mysql日常維護(hù)
?1.mysql權(quán)限管理
1.1mysql賬戶權(quán)限信息被存儲(chǔ)在mysql數(shù)據(jù)庫(kù)的user 、db、host、tables_priv、column_priv和procs_priv表中,mysql啟動(dòng)時(shí)服務(wù)器將這些數(shù)據(jù)庫(kù)表內(nèi)容讀入內(nèi)存。推薦grant和revoke語(yǔ)句
例如:
mysql>grant select,update on account.users to user@ip identified by 'passwd';
mysql>flush privileges;
創(chuàng)建成功后查看mysql數(shù)據(jù)庫(kù)表的變化
mysql>select * from user where user='user1'G
mysql>select * from db where user='user1'G
mysql>select * from tables_priv where user='user1'G
mysql權(quán)限按照user 、db、tables_priv、column_priv檢查順序,如果對(duì)應(yīng)表權(quán)限為Y,則不會(huì)檢查后面的表
1.2.查看或修改賬戶權(quán)限
例如:
mysql>show grants for user1@ip G
1.3 回收賬戶權(quán)限
mysql>revoke insert on *.* from test3@'%';
mysql>drop user test3@'%'
2.mysql日志管理
mysql服務(wù)支持的日志有二進(jìn)制日志、錯(cuò)誤日志、訪問(wèn)日志和滿查詢?nèi)罩尽?/p>
2.1 二進(jìn)制日志(binlog)
記錄所有DDL和DML操作,但不包括數(shù)據(jù)查詢語(yǔ)句,通過(guò)mysqlbinlog查看 例如:mysqlbinlog mysql-bin.000005|cat -n
2.1.1 刪除binlog,用purge binary logs 例如:
purge binary logs to 'mysql-bin.010'; ?//刪除指定序號(hào)之前的二進(jìn)制日志
purge binary logs before '2016-04-02 22:46:26'; //刪除指定時(shí)間之前的二進(jìn)制日志
2.1.2 指定參數(shù)設(shè)置二進(jìn)制文件保留天數(shù)“expire_logs_days=#”
mysql>set global expire_logs_days=7; //自動(dòng)清理7天之前的二進(jìn)制日志文件
2.2 操作錯(cuò)誤日志
通過(guò)設(shè)置“--logs-error=[file-name]” 指定錯(cuò)誤日志存放位置,如沒(méi)有設(shè)置,則錯(cuò)誤日志默認(rèn)位于mysql服務(wù)的datadir目錄下
例如:cat /dataa/master/dbdata/CentOS.err
2.3 訪問(wèn)日志
記錄了所有關(guān)于客戶端發(fā)起的鏈接,查詢和更新語(yǔ)句,由于記錄了所有的操作,在相對(duì)繁忙的系統(tǒng)中建議關(guān)閉
在配置文件“--log=[file-name]” 指定訪問(wèn)日志的位置,另外一種方法可以在登陸mysql實(shí)例后通過(guò)變量啟用此日志,如
mysql>set global general_log=on;
mysql>show variables like '%general_log%'; ?//查詢?nèi)罩疚恢?br />
2.4 慢查詢?nèi)罩?/p>
記錄了時(shí)間超過(guò)參數(shù)long_query_time(單位是秒)所設(shè)定值的SQL語(yǔ)句日志,對(duì)于審核和開(kāi)發(fā)者發(fā)現(xiàn)性能問(wèn)題及時(shí)優(yōu)化有重要意義。
如需啟用該日志可以在配置文件中設(shè)置 “slow_query_log" ,沒(méi)有指定文件名,則默認(rèn)hostname-slow.log作為文件名,并存放在數(shù)據(jù)目錄中
log-slow-queries=/usr/local/mysql....#定義慢查詢?nèi)罩韭窂?/p>
慢查詢?nèi)罩痉治龉ぞ?mysqldumpslow?
[-s] 排序參數(shù),可選al:平均鎖定時(shí)間 ar:平均返回記錄數(shù) at:平均查詢時(shí)間;
[-t] 只顯示指定的行數(shù);
3. mysql備份與恢復(fù)
3.1 備份方式可以通過(guò)直接備份數(shù)據(jù)文件或使用mysqldump命令將數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)出到文本文件,直接備份數(shù)據(jù)庫(kù)文件適用于MyISAM和InnoDB存儲(chǔ)引擎,由于備份時(shí)數(shù)據(jù)庫(kù)表正在讀寫(xiě),備份出的文件可能損壞無(wú)法使用,不推薦直接使用此方法。
mysqldump -u root test>test.sql //導(dǎo)出整個(gè)數(shù)據(jù)庫(kù)
mysqldump -u root test TBL_2 >test.TBL_2.sql //導(dǎo)出一個(gè)表
mysqldump -u root -d --add-drop-table test>test.sql //只導(dǎo)出數(shù)據(jù)庫(kù)表結(jié)構(gòu) -d沒(méi)有數(shù)據(jù) --add-drop-table 在每個(gè)create語(yǔ)句前增加一個(gè)drop table
mysql -uroot test<test.sql //恢復(fù)數(shù)據(jù)方法1
mysql -uroot -p
mysql>source /root/test.sql //恢復(fù)數(shù)據(jù)方法2
3.2 另外一種可以實(shí)時(shí)備份的開(kāi)源工具為xtrabackup
http://www.percona.com/downloads/提供下載
4.mysql復(fù)制
復(fù)制功能可以經(jīng)濟(jì)高效地提高應(yīng)用程序的性能、擴(kuò)展力和高可用性。既支持簡(jiǎn)單的主從拓?fù)?,也可?實(shí)現(xiàn)復(fù)雜、極具可伸縮性的鏈?zhǔn)郊骸?/p>
使用mysql復(fù)制時(shí),所有對(duì)復(fù)制表的更新必須在主服務(wù)器上進(jìn)行,否則可能引起主服務(wù)器上的表進(jìn)行的更新與對(duì)從服務(wù)器上的表所進(jìn)行的更新產(chǎn)生沖突。
好處:(1)主從數(shù)據(jù)同步,主服務(wù)器故障時(shí),從服務(wù)器可作為主服務(wù)器接管服務(wù)。
(2)負(fù)載均衡。實(shí)現(xiàn)讀寫(xiě)分離,主服務(wù)器記錄更新、刪除、插入等操作;從服務(wù)器只查詢請(qǐng)求;
(3)數(shù)據(jù)備份。從服務(wù)器可設(shè)置在異地,增加容災(zāi)的健壯性,為避免傳輸過(guò)慢,可設(shè)置參數(shù)slave_compressed_protocol 啟用binlog壓縮傳輸
mysql使用3個(gè)線程來(lái)執(zhí)行復(fù)制功能,1個(gè)在主服務(wù)器上,2個(gè)在從服務(wù)器上。當(dāng)執(zhí)行START SLAVE時(shí),主服務(wù)器創(chuàng)建一線程負(fù)責(zé)發(fā)送二進(jìn)制日志。從服務(wù)器創(chuàng)建一個(gè)I/O線程,負(fù)責(zé)讀取主服務(wù)器上的二進(jìn)制日志,然后將該數(shù)據(jù)保存到從服務(wù)器數(shù)據(jù)目錄中的中繼日志文件中。從服務(wù)器的SQL線程負(fù)責(zé)讀取中繼日志并重做日志中包含的更新,從而達(dá)到主從數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性。#在主從服務(wù)器上輸入命令查詢狀態(tài):mysql>show processlist G 其中time列的值可以顯示從服務(wù)器比主服務(wù)器滯后多長(zhǎng)時(shí)間。