第十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用戶就完全刪除了。
相關文章
相關標籤/搜索