通過(guò)mysql的my.cnf文件可以設(shè)置mysql的日志,而日志文件如果長(zhǎng)期不進(jìn)行清理或回收,勢(shì)必會(huì)造成日志文件越來(lái)越大,進(jìn)而影響到mysql的性能,而利用rpm 包安裝方式的自帶有mysql日志的輪詢(xún)刷新,通過(guò)源碼包安裝的一樣能實(shí)現(xiàn)該功能,該功能的實(shí)現(xiàn)要通過(guò)flush命令和mysql自帶腳本的修改來(lái)完成,當(dāng)然,二進(jìn)制日志文件除外,因?yàn)橄到y(tǒng)自帶了expire_logs_days和max-binlog-size參數(shù)進(jìn)行設(shè)置,并且二進(jìn)制文件為系統(tǒng)數(shù)據(jù)恢復(fù)時(shí)的重要文件,不建議使用該方式進(jìn)行配置,如果有其他備份策略也可以使用該方式進(jìn)行輪詢(xún).
Flush命令的用法如下:
- mysql> help flush;
- Name: 'FLUSH'
- Description:
- Syntax:
- FLUSH [NO_WRITE_TO_BINLOG | LOCAL]
- flush_option [, flush_option] ...
- …………
- The RESET statement is similar to FLUSH. See [HELP RESET], for
- information about using the RESET statement with replication.
- URL: http://dev.mysql.com/doc/refman/5.5/en/flush.html
從上面的英文幫助文檔中可以查看mysql的flush命令和日志相關(guān)的用法.
- BINARY closes and reopens the binary log files.
- ENGINE closes and reopens any flushable logs for installed storage engines. Currently, this causes InnoDB to flush its logs to disk and perform a checkpoint.
- ERROR closes and reopens the error log file.
- GENERAL closes and reopens the general query log file.
- RELAY closes and reopens the relay log files.
- SLOW closes and reopens the slow query log file.
- The log_type options were added in MySQL 5.5.3.
關(guān)于flush其他方面的用法,我不想直接翻譯了,直接拿個(gè)網(wǎng)上別人現(xiàn)成的吧,如下:
MySQL的FLUSH句法(清除或者重新加載內(nèi)部緩存)FLUSH flush_option [,flush_option],如果你想要清除一些MySQL使用內(nèi)部緩存,你應(yīng)該使用FLUSH命令,為了執(zhí)行FLUSH,你必須有reload權(quán)限.
flush_option 可以是下列任何東西:
HOSTS 這個(gè)用的最多,經(jīng)常碰見(jiàn),主要是用來(lái)清空主機(jī)緩存表,如果你的某些主機(jī)改變IP數(shù)字,或如果你得到錯(cuò)誤消息Host ... isblocked,你應(yīng)該清空主機(jī)表,當(dāng)在連接MySQL服務(wù)器時(shí),對(duì)一臺(tái)給定的主機(jī)有多于 max_connect_errors個(gè)錯(cuò)誤連續(xù)不斷地發(fā)生,MySQL為了安全的需要將會(huì)阻止該主機(jī)進(jìn)一步的連接請(qǐng)求,清空主機(jī)表允許主機(jī)再?lài)L試連接.
LOGS 關(guān)閉當(dāng)前的二進(jìn)制日志文件并創(chuàng)建一個(gè)新文件,新的二進(jìn)制日志文件的名字在當(dāng)前的二進(jìn)制文件的編號(hào)上加1.
PRIVILEGES 這個(gè)也是經(jīng)常使用的,每當(dāng)重新賦權(quán)后,為了以防萬(wàn)一,讓新權(quán)限立即生效,一般都執(zhí)行一把,目地是從數(shù)據(jù)庫(kù)授權(quán)表中重新裝載權(quán)限到緩存中.
TABLES 關(guān)閉所有打開(kāi)的表,同時(shí)該操作將會(huì)清空查詢(xún)緩存中的內(nèi)容.
FLUSH TABLES WITH READ LOCK 關(guān)閉所有打開(kāi)的表,同時(shí)對(duì)于所有數(shù)據(jù)庫(kù)中的表都加一個(gè)讀鎖,直到顯示地執(zhí)行unlock tables,該操作常常用于數(shù)據(jù)備份的時(shí)候.
STATUS 重置大多數(shù)狀態(tài)變量到0.
MASTER 刪除所有的二進(jìn)制日志索引文件中的二進(jìn)制日志文件,重置二進(jìn)制日志文件的索引文件為空,創(chuàng)建一個(gè)新的二進(jìn)制日志文件,不過(guò)這個(gè)已經(jīng)不推薦使用,改成reset master 了,可以想象,以前自己是多土啊,本來(lái)一條簡(jiǎn)單的命令就可以搞定的,卻要好幾條命令來(lái),以前的做法是先查出來(lái)當(dāng)前的二進(jìn)制日志文件名,再用purge 操作.
QUERY CACHE 重整查詢(xún)緩存,消除其中的碎片,提高性能,但是并不影響查詢(xún)緩存中現(xiàn)有的數(shù)據(jù),這點(diǎn)和Flush table 和Reset Query Cache(將會(huì)清空查詢(xún)緩存的內(nèi)容)不一樣的.
SLAVE 類(lèi)似于重置復(fù)制吧,讓從數(shù)據(jù)庫(kù)忘記主數(shù)據(jù)庫(kù)的復(fù)制位置,同時(shí)也會(huì)刪除已經(jīng)下載下來(lái)的relay log,與Master一樣,已經(jīng)不推薦使用,改成Reset Slave了,這個(gè)也很有用的.
一般來(lái)講,Flush操作都會(huì)記錄在二進(jìn)制日志文件中,但是FLUSH LOGS、FLUSH MASTER、FLUSH SLAVE、FLUSH TABLES WITH READ LOCK不會(huì)記錄,因此上述操作如果記錄在二進(jìn)制日志文件中話(huà),會(huì)對(duì)從數(shù)據(jù)庫(kù)造成影響,注意:Reset操作其實(shí)扮演的是一個(gè)Flush操作的增強(qiáng)版的角色.
Mysql自的帶的日志輪詢(xún)腳本位于源碼包的support-files目錄中——mysql-log-rotate.sh文件.
具體操作如下(query日志為例):
先將query_log.log文件mv
- [root@localhost logs]# ll
- total 32
- -rw-rw---- 1 mysql mysql 1 Mar 12 14:28 mysql.err
- -rw-rw---- 1 mysql mysql 6 Mar 5 15:44 mysql.pid
- -rw-rw---- 1 mysql mysql 1015 Mar 12 15:32 query_log.log
- -rw-rw---- 1 mysql mysql 704 Mar 5 15:44 slow.log
- [root@localhost logs]# mv query_log.log query_log.log.1
登陸mysql命令界面下,執(zhí)行如下操作:
- mysql> flush general logs;
- Query OK, 0 rows affected (0.06 sec)
注:這一步分關(guān)鍵,也容易錯(cuò),我之前進(jìn)行flush general操作老是出錯(cuò),后來(lái)看了官方的文檔后,才發(fā)現(xiàn)后面少了logs.
下面再看下日志文件:
- [root@localhost logs]# ll
- total 40
- -rw-rw---- 1 mysql mysql 1 Mar 12 14:28 mysql.err
- -rw-rw---- 1 mysql mysql 6 Mar 5 15:44 mysql.pid
- -rw-rw---- 1 mysql mysql 176 Mar 12 15:38 query_log.log
- -rw-rw---- 1 mysql mysql 1285 Mar 12 15:38 query_log.log.1
- -rw-rw---- 1 mysql mysql 704 Mar 5 15:44 slow.log
- [root@localhost logs]# cat query_log.log
- /usr/local/mysql/bin/mysqld, Version: 5.5.21-log (Source distribution). started with:
- Tcp port: 3306 Unix socket: /tmp/mysqld.sock
- Time Id Command Argument
關(guān)于使用輪詢(xún)腳本時(shí)的注意點(diǎn):
- /data/mysql/mysqld.log {
- # create 600 mysql mysql
- notifempty
- daily
- rotate 3
- missingok
- compress
- postrotate
- # just if mysqld is really running
- if test -x /usr/local/mysql/bin/mysqladmin &&
- /usr/local/mysql/bin/mysqladmin ping &>/dev/null
- then
- /usr/local/mysql/bin/mysqladmin flush-logs
- fi
- endscript
- }
上面腳本中的二處在設(shè)置密碼后進(jìn)運(yùn)行時(shí)會(huì)報(bào)錯(cuò)的,因?yàn)槠湟褂妹艽a的直持,具體為:
/usr/local/mysql/bin/mysqladmin –uroot-ptest ping(其中用戶(hù)名為root,密碼為test)
/usr/local/mysql/bin/mysql -uroot -ptest -e "flush general logs"
設(shè)置完成后將該腳本放到/etc/logrotate.d目錄就行了.
新聞熱點(diǎn)
疑難解答
圖片精選