#CentOS6系统分32位和64位的,要注意是否有lib64(或者32)/security/pam_userdb.so这个认证文件
15.5 使用pure-ftpd搭建ftp服务
#使用pure-ftpd搭建比vsftpd搭建要简单
pure-ftpd搭建ftp
一、安装pure-ftpd包(须要epel扩展源)
•yum install -y epel-release
• yum install -y pure-ftpd
二、编辑pure-ftpd配置文件
•
vim /etc/pure-ftpd/pure-ftpd.conf
#找到pureftpd.pdb这行,把行首的#删除
(pureftpd.pdb是密码文件)
三、关闭vsftpd服务,开启pure-ftpd服务(
由于都是监听21端口的)
• systemctl stop vsftpd
• systemctl start pure-ftpd
四、建立给pure-ftp的用户使用的目录
• mkdir /data/ftp
五、建立一个普通用户pure-ftp
• useradd -u 1010 pure-ftp
六、将/data/ftp的属主权限改成pure-ftp
• chown -R pure-ftp:pure-ftp /data/ftp
七、建立pure-ftp用户
• pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp
#useradd指定建立用户名,-u指定系统用户,-d指定用户家目录;而后设置密码
[root@xinlinux-03 testuser1]#
pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp
Password:
Enter it again:
八、将用户密码转化成计算机识别的二进制文件
•
pure-pw mkdb
测试:
touch /data/ftp/123.txt
lftp ftp_usera@127.0.0.1
ls
pure-pw用法:
pure-pw list #列出全部的用户
pure-pw userdel #删除用户
pure-pw usermod #更改用户权限属性
pure-pw passwd #更改用户密码
pure-pw mkdb #转化用户密码文件
15.6扩展
15.7课堂笔记
1、mysql操做
show variables 后面加like(相似grep的用法)模糊匹配
show processlist;(
很重要)
#查看目前的进程数(通常状况数量在10多个左右,几十个说明mysql很忙,多是哪里堵塞了 )
2、mysql用户管理
对象的owner将权限赋予某个用户(如:testuser1)
grant select ,update on bd_corp to testuser1 [with grant option ]
1.若是带了 with grant option
那么用户testuser1能够将select ,update权限传递给其余用户( 如testuser2)
grant select,update on bd_corp to testuser2
2.若是没带with grant option
那么用户testuser1不能给testuser2受权
#简单的说就是将权限传递给第三方
受权表使用举例
#grant用于给增长用户和建立权限,revoke用于删除用户权限。
下面是一些用grant增长用户和建立权限的例子:
mysql> grant all privileges on *.* to test@localhost identified by 'test' with grant option;
#这句增长一个本地具备全部权限的test用户(超级用户),密码是test。ON子句中的*.*意味着"全部数据库、全部表"。with grant option表示它具备grant权限。
mysql> grant select,insert,update,delete,create,drop privileges on test.* to test1@'192.168.1.0/255.255.255.0' identified by 'test';
#这句是增长了一个test1用户,口令是test,可是它只能从C类子网192.168.1链接,对test库有select,insert,update,delete,create,drop操做权限。
用grant语句建立权限是不须要再手工刷新受权表的,由于它已经自动刷新了。
给用户建立权限还能够经过直接修改受权表:
mysql> insert into user
values("localhost","test",password("test"),"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y");
mysql> flush privileges;
这两句和上面第一句grant的效果是同样的,也是增长了一个本地的test超级用户。咱们看到用grant方便多了,并且还不需flush privileges。
mysql> insert into user (host,user,password) values("192.168.1.0/255.255.255.0","test1",PASSWORD("test")); mysql> insert into db values("192.168.1.0/255.255.255.0","test","test1","Y","Y","Y","Y","Y","Y","N","N","N","N") mysql> flush privileges;
#这三句和上面第二句grant的效果也是同样的,也是增长了一个只能从C类子网192.168.1链接,对test库有select,insert,update,delete,create,drop操做权限的test1用户,口令是test。要取消一个用户的权限,使用revoke语句。revoke的语法很是相似于grant语句,除了to用from取代而且没有identified by和with grant option子句,下面是用revoke删除用户权限的例子:
mysql> revoke all on test.* from test1@'192.168.1.0/255.255.255.0';
这句revoke就撤消了上面第二句grant建立的权限,可是test1用户并无被删除,必须手工从user表删除:
mysql> delete from user where user='test1';
mysql> flush privileges;
这样,test1用户就完全删除了。
3、mysql的备份与恢复
#mysqldump只适用于数据量较小的数据库,当数据量高达上百G等便不适用
#XtraBackup有两个工具,xtrabackup和innobackex:
xtrabackup自己只能备份innoDB和XtraDB,不能备份MyISAM;
innobackex 本事是Hot Backup 脚本修改而来,同时能够备份MuISAM和innoDB,
可是备份innoDB须要加读锁。
4、innobackupex备份
#增量备份以前必需要先进行一次全量备份
#第一次增量备份须要指定全量备份的时间戳目录
第二次增量备份须要指定上次增量备份的时间戳目录便可;
5、扩展
一、mysql5.7root密码更改
#mysql5.7root有默认密码,须要重设密码才能进行mysql操做
设置root密码的步骤:
1、查看默认密码
[root@localhost src]# cat /root/.mysql_secret
# The random password set for the root userat Fri Jan 10 20:00:34 2014 (local time): aJqZsA2m
这里的aJqZsA2m就是生成的root随机密码啦
2、登陆mysql
[root@localhost src]# mysql -u root -p
Enter password:
输入上面的密码aJqZsA2m登陆,若是你没有把mysql的路径加到path里,那就用绝对路径,mysql -u root -p还能够写成mysql -uroot -paJqZsA2m
3、更改密码
mysql> SET PASSWORD FOR 'root'@localhost = PASSWORD('123456');
Query OK, 0 rows affected (0.17 sec)
至此,就成功地修改了密码。
二、MyISAM引擎与InnoDB的优劣(面试可能问到)
主要区别:
一、
MyISAM不支持外键,InnoDB支持外键
二、
MyISAM锁表时锁的是整张表,而InnoDB只能锁一条记录
三、
MyISAM不支持事务,
InnoDB支持事务
四、使用select count(*)时
MyISAM最快,由于会记录和保存到内存里;而InnoDB,每次select都会从头至尾去计算,全部会很慢
五、存储结构 MyISAM每张表都存放在三个文件(frm、MYD、MYI)里面,而InnoDB全部的表都保存在同一个数据文件或者多个文件中(不是三个)
六、
存储空间 MyISAM可悲压缩,存储空间较小;InnoDB相对MyISAM较大一点,由于要创建缓冲池优化存取速度。
七、移植性:
MyISAM数据以文件形式存在,可直接复制粘贴拷贝;InnoDB数据存储到专门的表空间文件,没法复制粘贴拷贝
|
MyISAM |
InnoDB |
存储结构 |
每张表被存放在三个文件:
- frm-表格定义
- MYD(MYData)-数据文件
- MYI(MYIndex)-索引文件
|
全部的表都保存在同一个数据文件中(也多是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操做系统文件的大小,通常为2GB |
存储空间 |
MyISAM可被压缩,存储空间较小 |
InnoDB的表须要更多的内存和存储,它会在主内存中创建其专用的缓冲池用于高速缓冲数据和索引 |
可移植性、备份及恢复 |
因为MyISAM的数据是以文件的形式存储,因此在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操做 |
免费的方案能够是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了 |
事务安全 |
不支持 每次查询具备原子性 |
支持 具备事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表 |
AUTO_INCREMENT |
MyISAM表能够和其余字段一块儿创建联合索引 |
InnoDB中必须包含只有该字段的索引 |
SELECT |
MyISAM更优 |
|
INSERT |
锁表锁整张表 |
InnoDB更优(锁表时只能锁一条记录) |
UPDATE |
|
InnoDB更优 |
DELETE |
|
InnoDB更优 它不会从新创建表,而是一行一行的删除 |
COUNT without WHERE |
MyISAM更优。由于MyISAM保存了表的具体行数 |
InnoDB没有保存表的具体行数,须要逐行扫描统计,就很慢了 |
COUNT with WHERE |
同样 |
同样,InnoDB也会锁表 |
锁 |
只支持表锁 |
支持表锁、行锁 行锁大幅度提升了多用户并发操做的新能。可是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的 |
外键 |
不支持 |
支持 |
FULLTEXT全文索引 |
支持 |
不支持 能够经过使用Sphinx从InnoDB中得到全文索引,会慢一点 |
三、mysql配置文件
max_connections最大数通常100就足够了,
max_allowed_packet #作数据恢复的时候可能用到
四、mysql调优
MySQL调优能够从几个方面来作:
1、架构层:
作从库,实现读写分离;
2、系统层次:
增长内存;
给磁盘作raid0或者raid5以增长磁盘的读写速度;
能够从新挂载磁盘,并加上noatime参数,这样能够减小磁盘的i/o;
3、MySQL自己调优:
(1) 若是未配置主从同步,能够把bin-log功能关闭,减小磁盘i/o
(2) 在my.cnf中加上skip-name-resolve,这样能够避免因为解析主机名延迟形成mysql执行慢
(3) 调整几个关键的buffer和cache。调整的依据,主要根据数据库的状态来调试。
4、用层次:
查看慢查询日志,根据慢查询日志优化程序中的SQL语句,好比
增长索引(增长索引很重要)
5、调整几个关键的buffer和cache
1)
key_buffer_size 首先能够根据系统的内存大小设定它,大概的一个参考值:1G如下内存设定128M;2G/256M; 4G/384M;8G/1024M;16G/2048M.这个值能够经过检查状态值Key_read_requests和 Key_reads,能够知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽量的低,至少是1:100,1:1000更好(上述状态值可使用SHOW STATUS LIKE ‘key_read%’得到)。注意:该参数值设置的过大反而会是服务器总体效率下降!
2)
table_open_cache 打开一个表的时候,会临时把表里面的数据放到这部份内存中,通常设置成1024就够了,它的大小咱们能够经过这样的方法来衡量: 若是你发现 open_tables等于table_cache,而且opened_tables在不断增加,那么你就须要增长table_cache的值了(上述状态值可使用SHOW STATUS LIKE ‘Open%tables’得到)。注意,不能盲目地把table_cache设置成很大的值。若是设置得过高,可能会形成文件描述符不足,从而形成性能不稳定或者链接失败。
3)
sort_buffer_size 查询排序时所能使用的缓冲区大小,该参数对应的分配内存是每链接独占!若是有100个链接,那么实际分配的总共排序缓冲区大小为100 × 4 = 400MB。因此,对于内存在4GB左右的服务器推荐设置为4-8M。
4)
read_buffer_size 读查询操做所能使用的缓冲区大小。和sort_buffer_size同样,该参数对应的分配内存也是每链接独享!
5)
join_buffer_size 联合查询操做所能使用的缓冲区大小,和sort_buffer_size同样,该参数对应的分配内存也是每链接独享!
6)
myisam_sort_buffer_size 这个缓冲区主要用于修复表过程当中排序索引使用的内存或者是创建索引时排序索引用到的内存大小,通常4G内存给64M便可。
7)
query_cache_size MySQL查询操做缓冲区的大小,经过如下作法调整:SHOW STATUS LIKE ‘Qcache%’; 若是Qcache_lowmem_prunes该参数记录有多少条查询由于内存不足而被移除出查询缓存。经过这个值,用户能够适当的调整缓存大小。若是该值很是大,则代表常常出现缓冲不够的状况,须要增长缓存大小;Qcache_free_memory:查询缓存的内存大小,经过这个参数能够很清晰的知道当前系统的查询内存是否够用,是多了,仍是不够用,咱们能够根据实际状况作出调整。通常状况下4G内存设置64M足够了。
8)
thread_cache_size 表示能够从新利用保存在缓存中线程的数,参考以下值:1G —> 8 2G —> 16 3G —> 32 >3G —> 64
除此以外,还有几个比较关键的参数:
9)
thread_concurrency 这个值设置为cpu核数的2倍便可
10)
wait_timeout 表示空闲的链接超时时间,默认是28800s,这个参数是和interactive_timeout一块儿使用的,也就是说要想让wait_timeout 生效,必须同时设置interactive_timeout,建议他们两个都设置为10
11)
max_connect_errors 是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的状况。与性能并没有太大关系。为了不一些错误咱们通常都设置比较大,好比说10000
12)
max_connections 最大的链接数,根据业务请求量适当调整,设置500足够
13)
max_user_connections 是指同一个帐号可以同时链接到mysql服务的最大链接数。设置为0表示不限制。一般咱们设置为100足够
五、mysqldump和binlog备份恢复某个库/表(要了解)
#binlog是实时记录数据
mysqldump备份时可使用,避免过程当中全局锁表致使
mysqldump全量备份+mysqlbinlog二进制日志增量备份
从mysqldump备份文件恢复数据会丢失掉从备份点开始的更新数据,因此还须要结合mysqlbinlog二进制日志增量备份。确保my.ini或者my.cnf中包含下面的配置以启用二进制日志,或者mysqld —log-bin:
[mysqld]
log-bin=mysql-bin
mysqldump命令必须带上
–flush-logs选项以生成新的二进制日志文件:
mysqldump --single-transaction --flush-logs --master-data=2 > backup.sql
这样生成的增量二进制日志文件好比为mysql-bin.000003,那么恢复数据时以下:
shell> mysql -uroot -pPwd < backup_sunday_1_PM.sql
shell> mysqlbinlog mysql-bin.000003 | mysql -uroot -pPwd
此外mysqlbinlog还能够指定–start-date、–stop-date、–start-position和–stop-position参数,用于精确恢复数据到某个时刻以前或者跳过中间某个出问题时间段恢复数据,直接摘录MySQL文档说明中相关内容以下:
5.9.3.1. 指定恢复时间
对于MySQL 4.1.4,能够在mysqlbinlog语句中经过--start-date和--stop-date选项指定DATETIME格式的起止时间。举例说明,假设在今天上午10:00(今天是2005年4月20日),执行SQL语句来删除一个大表。要想恢复表和数据,你能够恢复前晚上的备份,并输入:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd
#该命令将恢复截止到在--stop-date选项中以DATETIME格式给出的日期和时间的全部数据。若是你没有检测到几个小时后输入的错误的SQL语句,可能你想要恢复后面发生的活动。根据这些,你能够用起使日期和时间再次运行mysqlbinlog:
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd \
#在该行中,从上午10:01登陆的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行能够将全部数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。
5.9.3.2. 指定恢复位置
也能够不指定日期和时间,而使用mysqlbinlog的选项--start-position和--stop-position来指定日志位置。它们的做用与起止日选项相同,不一样的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法,特别是当因为破坏性SQL语句同时发生许多事务的时候。要想肯定位置号,能够运行mysqlbinlog寻找执行了不指望的事务的时间范围,但应将结果从新指向文本文件以便进行检查。操做方法为:
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" \
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
#该命令将在/tmp目录建立小的文本文件,将显示执行了错误的SQL语句时的SQL语句。你能够用文本编辑器打开该文件,寻找你不要想重复的语句。若是二进制日志中的位置号用于中止和继续恢复操做,应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了之前的备份文件后,你应从命令行输入下面内容:
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \
| mysql -u root -pmypwd \
#上面的第1行将恢复到中止位置为止的全部事务。下一行将恢复从给定的起始位置直到二进制日志结束的全部事务。由于mysqlbinlog的输出包括每一个SQL语句记录以前的SET TIMESTAMP语句,恢复的数据和相关MySQL日志将反应事务执行的原时间。
六、mysqldump --master-data=2 --single-transaction
一、mysqldump处处数据主要有两种控制:一种导出的全过程加锁lock-tables,另外一种是不加。前者在导出开始时执行FLUSH TABLES WITH READ LOCK;也就是全局读锁,会阻塞其余写操做,以保证导出是一致性的;所以只有在导出测试数据时或导出时没有业务链接操做时可不加lock-all-tables。
二、single-transaction和lock-all-tables选项是二选一的,前者是在导出开始时设置事务隔离状态并使用一致性快照开始事务,然后立刻unlock tables,而后执行导出,导出过程不影响其余事务或业务链接,但只支持相似InnoDB多版本特性的引擎,由于必须保证导出期间其余操做(事务点t2)改变了数据,而导出时仍能取出导出开始的事务点t1时的数据。而lock-all-tables则是一开始就加全局读锁,知道dump完成。
三、master_data选项开启时默认打开lock-all-tables,同时实现了两个功能,一个加锁,一个取得log信息。
#master_data取1和2的区别在于后者把change master 命令注释起来了,实际意义不大
四、
master_data和single-transaction同时使用时,现价全局读锁,而后设置事务一致性和使用一致性快照开始事务,而后立刻就取消锁,而后执行导出
七、mysql字符集调整(了解)
#字符乱码问题就须要调整
mysql编译安装时,指定字符集的方法:
./configure --with-charset=utf8
mysql的字符集有4个级别的默认设置:服务器级、数据库级、表级和字段级
1、服务器级三种指定字符集方法:
一、能够在my.cnf中设置:
[mysql]
### 默认字符集为utf8
default-character-set=utf8
二、### (设定链接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)
init_connect='SET NAMES utf8'
三、在启动选项中指定:
mysqld --default-character-set=utf8
#若是没有特别的指定服务器字符集,默认使用
latin1(ISO-8859-1的别名)做为服务器字符集。上面三种设置的方式都只指定了字符集,没有去作校对,咱们能够用
show variables like 'char%';命令查询当前服务器的字符
集和校对规则。
注:若是增长default-character-set=utf8后,MYSQL启动报错。能够用character_set_server=utf8来取代default-character-set=utf8,就能正常启动了。这是由于MYSQL不一样版本识别的问题。
2、数据库级
建立数据库时指定字符集
mysql>CREATE DATABASE my_db default charset utf8 COLLATE utf8_general_ci;
#注意后面这句话 "COLLATE utf8_general_ci",大体意思是在排序时根据utf8编码格式来排序
#若是指定了数据库编码,那么在这个数据库下建立的全部数据表的默认字符集都会是utf8了
修改MYSQL数据库编码
mysql>ALTER DATABASE my_db DEFAULT CHARACTER SET utf8;
#将MYSQL的my_db数据库的编码设为utf8
3、表级
建立表时指定字符集
mysql>create table my_table (name varchar(20) not null default '')type=myisam default charset utf8;
#这句话就是建立一个表,指定默认字符集为utf8
修改MYSQL表的编码:
ALTER TABLE my_table DEFAULT CHARACTER SET utf8;
以上命令就是将一个表my_table的编码改成utf8
4、字段级
修改字段的编码:
ALTER TABLE `test` CHANGE `name` `name` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
#将MYSQL数据库test表中name的字段编码改成utf8