第十4、十五章NFS和FTP的搭建与配置

14.1 NFS介绍
14.2 NFS服务端安装配置
14.3 NFS配置选项
14.4 exportfs命令
14.5 NFS客户端问题
15.1 FTP介绍
15.2/15.3 使用vsftpd搭建ftp
15.4 xshell使用xftp传输文件
15.5 使用pure-ftpd搭建ftp服务
15.6扩展
 
14.1 NFS介绍
#NFS文件系统是基于网络层面,须要经过网络实现数据的同步
 
 
 
#NFS服务端给NFS客户端提供服务 须要借助RPC协议rpcbind服务(CentOS6开始的叫法,CentOS5及以前叫portmap服务),实现通讯
#NFS不监放任何端口;最终实现TCP/IP通讯的过程是由 RPC监听111端口 实现的
 

 

NFS传输过程:先由服务端的NFS服务在RPC服务商注册一个端口,而后服务端的RPC服务经过TCP/IP将注册的端口号告知客户端的RPC服务,最后NFS客户端经过与NFS服务端注册的端口进行通讯,实现数据传输。
 
 
14.2 NFS服务端安装配置
给服务端安装NFS
一、下载nfs-utils安装包
yum install -y nfs-utils rpcbind
 
二、修改exports文件,增长一行
vim /etc/exports 
#加入以下内容
/home/nfstestdir     192.168.233.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
#设置分享目录、分享ip或者ip段,目录与ip用空格隔开
 
三、建立分享目录,加上777权限
mkdir /home/nfstestdir
chmod 777 /home/nfstestdir
 
四、启动并设置开机自启rpcbind服务和nfs服务
• systemctl start rpcbind
• systemctl start nfs
• systemctl enable rpcbind
• systemctl enable nfs
 
 
14.3 NFS配置选项
配置exports文件增长行内小括号可加的参数说明:
#多个参数间用","逗号隔开
rw 读写
ro 只读
sync 同步模式,内存数据实时写入磁盘
async 非同步模式
no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大
root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
all_squash 客户端上全部用户在使用NFS共享目录时都被限定为一个普通用户
anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid
 
客户端挂载nfs
一、下载nfs-utils包
yum install -y nfs-utils
 
二、 查看远程服务端共享状况(共享目录和容许访问的ip)
showmount -e 192.168.233.150
[root@xinlinux-01 ~]# showmount -e 192.168.233.150
Export list for 192.168.233.150:
/home/nfstestdir 192.168.233.0/24
 
三、挂载nfs
mount -t nfs 192.168.233.150:/home/nfstestdir /mnt
#mount -t nfs  远程ip:共享目录  挂载目录
 
四、查看挂载是否成功
df -h
[root@xinlinux-01 ~]# mount -t nfs 192.168.233.150:/home/nfstestdir /mnt
[root@xinlinux-01 ~]# df -h
文件系统                          容量  已用  可用 已用% 挂载点
/dev/sda3                          28G  1.2G   27G    5% /
devtmpfs                          481M     0  481M    0% /dev
tmpfs                             492M     0  492M    0% /dev/shm
tmpfs                             492M  7.4M  485M    2% /run
tmpfs                             492M     0  492M    0% /sys/fs/cgroup
/dev/sda1                         197M  112M   85M   57% /boot
tmpfs                              99M     0   99M    0% /run/user/0
192.168.233.150:/home/nfstestdir   28G  4.5G   24G   16% /mnt
 
 
测试:
• t ouch /mnt/123.txt
ls -l /mnt/123.txt 
#能够看到文件的属主和属组都为1000
id  用户名   #查看用户信息(uid,gid)
 
[root@xinlinux-01 ~]# ls -l /mnt/123.txt
-rw-r--r-- 1 user1 user1 0 10月  2 09:50 /mnt/123.txt
[root@xinlinux-01 ~]# id user1
uid=1000(user1) gid=1000(user1) 组=1000(user1)
 
 
#报错
[root@xinlinux-01 ~]# showmount -e 192.168.233.150
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
#没法与服务端111端口通讯
 
两个可能:
一、服务端的rpc服务没开启;
二、防火墙没关闭;
 
两边同时关闭firewalld和SEXlinux
systemctl  stop  firewalld
setenforce  0
 
 
14.4 exportfs命令
使用场景:当须要变动(更改、增长或删除)共享目录,要先更改配置文件,而后重启nfs服务;可是这样会让客户端的nfs挂起状态,没法正常访问,进程杀不死,重启nfs也重启不了 (因此要重启服务端的nfs,要先将客户端挂载的nfs卸载umount)
 
exportfs命令( 不用重启nfs也能使配置文件生效)
• 经常使用选项
-a 所有挂载或者所有卸载
-r 从新挂载
-u 卸载某一个目录
-v 显示共享目录
 
 
测试:服务端建立新的共享目录tmp,客户端建立xinlinux目录做为tmp目录的挂载目录
 
• 如下操做在服务端上
vim /etc/exports 
#增长共享目录/tmp/
/tmp/ 192.168.233.0/24(rw,sync,no_root_squash)
 
exportfs -arv 
#不用重启nfs服务,配置文件就会生效
[root@xinlinux-03 ~]# exportfs -arv
exporting 192.168.233.0/24:/tmp
exporting 192.168.233.0/24:/home/nfstestdir
 
• 如下操做在客户端
mkdir /xinlinux
• mount -t nfs    192.168.233.150:/tmp /xinlinux
• touch /xinlinux/test.txt
• ls -l  /xinlinux/test.txt
#发现全部者和所属组都是root,由于配置文件的时候选择了no_root_squash,root用户不受限制
[root@xinlinux-01 ~]# mount -t nfs 192.168.233.150:/tmp/   /xinlinux/
[root@xinlinux-01 ~]# touch /xinlinux/test.txt
[root@xinlinux-01 ~]# ls -l /xinlinux/test.txt
-rw-r--r-- 1 root root 0 10月  2 10:04 /xinlinux/test.txt
 
 
14.5 NFS客户端问题
#客户端文件属主属组nobody
NFS 4版本会有问题:
客户端挂载共享目录后,无论是root用户仍是普通用户,建立新文件时属主、属组为nobody
 
解决问题两种方案:
一、客户端挂载时加上 -o nfsvers=3    #将nfs版本变成3
 
先正常挂载,而后从新挂载
mount  -t  nfs  -o nfsvers=3  192.168.233.150:/tmp/   /xinlinux
 
mount  -t  nfs  -oremount,nfsvers=3  192.168.233.150:/tmp/   /xinlinux
[root@xinlinux-01 ~]# umount /xinlinux
[root@xinlinux-01 ~]# mount  -t  nfs  -o nfsvers=3  192.168.233.150:/tmp/   /xinlinux
[root@xinlinux-01 ~]# mount  -t  nfs  -oremount,nfsvers=3  192.168.233.150:/tmp/  /xinlinux
 
二、修改/etc/idmapd.conf文件
#客户端和服务端都须要
 
vim /etc/idmapd.conf 
#把“ #Domain = local.domain.edu” 改成 “Domain = xxx.com” (这里的xxx.com,随意定义),而后再重启rpcidmapd服务(重启rpcbind服务便可)
 
 
15.1 FTP介绍
FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
 
#FTP的主要做用就是 让用户链接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,而后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。
 
#小公司用的多,大企业不用FTP,由于不安全
 
 
15.2/15.3 使用vsftpd搭建ftp
#centos上自带vsftpd软件包
搭建ftp
一、下载vsftpd包
yum install -y vsftpd
 
二、建立virftp虚拟用户
#这个用户不是经过ssh登陆,是经过ftp登陆到该用户的家目录,为了安全,-s  /sbin/nologin,不能经过ssh登陆用户系统
useradd -s /sbin/nologin virftp
 
三、编辑vsftpd的虚拟用户的密码文件,定义用户的文件密码
vim /etc/vsftpd/vsftpd_login  
#内容以下,奇数行为用户名,偶数行为密码,多个用户就写多行
testuser1
123456
 
四、设置密码文件的权限
chmod 600 /etc/vsftpd/vsftpd_login
 
五、将文本密码文件转化为计算机能识别的二进制文件
db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
 
六、建立虚拟用户配置文件所在目录
mkdir /etc/vsftpd/vsftpd_user_conf
 
七、定义虚拟用户配置文件 (文件命名要与用户名保持一致)
cd /etc/vsftpd/vsftpd_user_conf
• vim testuser1
#加入以下内容
local_root=/home/virftp/testuser1
#定义虚拟用户的家目录
anonymous_enable=NO
#是否容许匿名用户
write_enable=YES
#是否容许可写
local_umask=022
#定义umask值
anon_upload_enable=NO
#是否容许匿名用户可上传
anon_mkdir_write_enable=NO
#是否容许匿名用户建立目录而且可写
idle_session_timeout=600
#链接ftp后空闲时间段后断开链接
data_connection_timeout=120
#数据传输的超时时间
max_clients=10
#最大客户端数量
 
八、建立虚拟用户家目录
• mkdir  /home/virftp/testuser1
• touch /home/virftp/testuser1/aming.txt
 
九、更改家目录全部者,属组权限
• chown -R virftp:virftp /home/virftp
 
十、定义密码文件存放cd位置
vim /etc/pam.d/vsftpd 
#在最前面加上
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
 
#CentOS6系统分32位和64位的,要注意是否有lib64(或者32)/security/pam_userdb.so这个认证文件
 
十一、编辑vsftpd主配置文件
vim /etc/vsftpd/vsftpd.conf
#将anonymous_enable=YES 改成 anonymous_enable= NO
#将#anon_upload_enable=YES 改成 anon_upload_enable= NO
#将#anon_mkdir_write_enable=YES 改成 anon_mkdir_write_enable= NO
 
•  再增长以下内容
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
allow_writeable_chroot=YES
 
十二、重启vsftpd服务
systemctl start vsftpd //启动vsftpd服务
 
netstat  -lntp   #查看ftp监听端口是否启动 ftp监听21端口)
 
Linux客户端测试:
yum install -y lftp       #Linux安装ftp客户端软件
lftp ftpuser1@127.0.0.1
 
#执行命令ls,看是否正常输出
#若不正常查看日志/var/log/messages和/var/log/secure
 
windows客户端测试:
# windows下安装filezilla客户端软件,进行测试
 
 
15.4 xshell使用xftp传输文件
第一种方案:xshell新建会话, 协议改成SFTP,其余的往常改动,而后登录,输入设置的虚拟用户密码,get到的文件会放 会话属性的SFTP-->定义的本地文件夹
 
第二种方案:xshell借助xftp插件
在xsehll界面按 CTRL+ALT+F,打开xftp插件;若是没有下载下载,去r.aminglinux.com下载
 
#双击、拖移便可下载文件
 
 
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扩展
vsftp使用mysql存放虚拟用户并验证 http://www.aminglinux.com/bbs/thread-342-1-1.html
 
 
 
15.7课堂笔记
  1、mysql操做
show  variables  后面加like(相似grep的用法)模糊匹配
 
show  processlist;( 很重要
#查看目前的进程数(通常状况数量在10多个左右,几十个说明mysql很忙,多是哪里堵塞了    )
 
 
2、mysql用户管理
#grant受权时即便添加ALL权限,也没有受权的权限,grant受权权限是root用户特有的(也可设置普通用户拥有受权权限 http://www.javashuo.com/article/p-vmwdvaas-bd.html
 
对象的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
存储结构
每张表被存放在三个文件:
  1. frm-表格定义
  2. MYD(MYData)-数据文件
  3. 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
1、mysql操做
show  variables  后面加like(相似grep的用法)模糊匹配
 
show  processlist;( 很重要
#查看目前的进程数(通常状况数量在10多个左右,几十个说明mysql很忙,多是哪里堵塞了    )
 
 
2、mysql用户管理
#grant受权时即便添加ALL权限,也没有受权的权限,grant受权权限是root用户特有的(也可设置普通用户拥有受权权限 http://www.javashuo.com/article/p-vmwdvaas-bd.html
 
对象的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用户就完全删除了。
相关文章
相关标签/搜索