Mysql 日志管理(學(xué)習(xí)筆記九)

mysql日志——記錄著mysql數(shù)據(jù)庫(kù)運(yùn)行期間的操作和信息

日志作用

(1)當(dāng)數(shù)據(jù)庫(kù)遭到意外損害,可以通過(guò)日志文件來(lái)查詢(xún)出錯(cuò)原因

(2)利用日志文件進(jìn)行數(shù)據(jù)恢復(fù)

日志分類(lèi)

(1)二進(jìn)制日志:以二進(jìn)制文件的形式記錄了數(shù)據(jù)庫(kù)中的操作,但是不記錄查詢(xún)語(yǔ)句

(2)錯(cuò)誤日志:記錄Mysql服務(wù)器的啟動(dòng)、關(guān)閉和運(yùn)行錯(cuò)誤等信息

(3)慢查詢(xún)?nèi)罩?記錄執(zhí)行時(shí)間超過(guò)指定時(shí)間的操作

(4)通用查詢(xún)?nèi)罩?記錄用戶(hù)的所有操作,包括啟動(dòng)和關(guān)閉MySQL服務(wù)、更新語(yǔ)句、查詢(xún)語(yǔ)句等

日志設(shè)置

(1)除了二進(jìn)制日志,其他都是文本文件

(2)日志文件通常存儲(chǔ)在Mysql數(shù)據(jù)目錄下

(3)默認(rèn)只啟動(dòng)了錯(cuò)誤日志功能,其他需要手工啟動(dòng)

(4)但啟動(dòng)日志功能會(huì)降低Mysql的執(zhí)行速度,因?yàn)橐粭l操作寫(xiě)進(jìn)日志中是要花時(shí)間的


二進(jìn)制日志

(1) 以二進(jìn)制文件的形式記錄了數(shù)據(jù)庫(kù)中的操作,但是不記錄查詢(xún)語(yǔ)句

(2) 也叫變更日志(update log),主要用于記錄數(shù)據(jù)庫(kù)的變化

(3) 啟動(dòng)與設(shè)置二進(jìn)制日志:在Mysql的配置文件中,log-bin=DIR/filename

DIR是存放二進(jìn)制日志的目錄;

每啟動(dòng)一次Mysql,該目錄下就會(huì)生成一個(gè)filename.00000x的文件;

目錄下還有一個(gè)filename.index的文件,用于存儲(chǔ)所有二進(jìn)制文件清單;

如果我們沒(méi)有設(shè)置DIR和filename,則默認(rèn)在數(shù)據(jù)目錄下以hostname-bin.00000x命名

# cat /etc/my.cnf|egrep "log-bin"

log-bin = /data/mysqldb/binlog/mysql-bin

# ls /data/mysqldb/binlog/

mysql-bin.000001 mysql-bin.000003 mysql-bin.000005 mysql-bin.000007 mysql-bin.index

mysql-bin.000002 mysql-bin.000004 mysql-bin.000006 mysql-bin.000008

(4)臨時(shí)停止與啟動(dòng)二進(jìn)制日志

-> set sql_log_bin=0; 停止-> set sql_log_bin=1; 啟動(dòng)

(5)注意:二進(jìn)制日志文件與數(shù)據(jù)庫(kù)數(shù)據(jù)文件最好不要放在同一塊硬盤(pán)上,如果存放數(shù)據(jù)文件的硬盤(pán)壞了,可以用另一塊硬盤(pán)的二進(jìn)制日志來(lái)恢復(fù)數(shù)據(jù)

(6)查看二進(jìn)制日志:

# mysqlbinlog mysql-bin.000001

(7)刪除二進(jìn)制日志:

//刪除所有->reset master;//刪除00004之前的所有->purge master logs to'mysql-bin.000004';//刪除指定日期時(shí)間之前的所有->purge master logs to'2016-08-10 15:00:00';

(8)使用二進(jìn)制日志還原數(shù)據(jù)庫(kù)

# mysqlbinlog mysql-bin.000001 | mysql -u root -p

# mysqlbinlog mysql-bin.000002 |mysql -u root -p

這條命令可以理解為:使用mysqlbinlog讀取二進(jìn)制日志文件然后使用mysql命令還原到數(shù)據(jù)庫(kù)中

注意還原時(shí)必須是編號(hào)小的先還原

(9)使用二進(jìn)制日志文件的pos號(hào)|時(shí)間點(diǎn)恢復(fù)

//先執(zhí)行3條操作-> create database 2test-> create database alvin-> drop database 2test//查看二進(jìn)制日志,觀察每一個(gè)命令的起始/結(jié)束pos號(hào),和起始/結(jié)束時(shí)間# mysqlbinlog mysql-bin.000001# at 120#160813 15:13:53serverid 706end_log_pos 217CRC32 0x781f816eQuery? ? thread_id=21exec_time=0 error_code=0SET TIMESTAMP=1471072433/*!*/;

SET @@session.pseudo_thread_id=21/*!*/;

SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;

SET @@session.sql_mode=1075838976/*!*/;

SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;

/*!\C utf8 *//*!*/;

SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;SET @@session.lc_time_names=0/*!*/;SET @@session.collation_database=DEFAULT/*!*/;create database 2test/*!*/;# at 217#160813 15:14:11serverid 706end_log_pos 314 CRC32 0x0fde9820Query? ? thread_id=21exec_time=0error_code=0SET TIMESTAMP=1471072451/*!*/;create database alvin/*!*/;//想回到什么哪條命令時(shí)的狀態(tài),可以指定起始/結(jié)束pos號(hào)恢復(fù)# mysqlbinlog --start-position="120" --stop-position="217" mysql-bin.000001 |mysql -u root -p

//日志也會(huì)記錄下這條恢復(fù)語(yǔ)句,我們可以看到這條命令的時(shí)間和原來(lái)那條一模一樣

# mysqlbinlog mysql-bin.000001# at 401#160813 15:13:53server id 706 end_log_pos 498 CRC32 0x3a899ca5 Query? ? thread_id=21? ? exec_time=619? ? error_code=0SET TIMESTAMP=1471072433/*!*/;create database 2test/*!*/;

//同理也可以用時(shí)間點(diǎn)來(lái)恢復(fù)

# mysqlbinlog –start-datetime=”2016-08-13 15:13:53” –stop-datetime=”2016-08-13 15:14:11” mysql-bin.000001 | mysql –uroot –p


錯(cuò)誤日志

(1)主要用于記錄Mysql服務(wù)的開(kāi)啟、關(guān)閉和錯(cuò)誤信息,若服務(wù)啟動(dòng)不成功第一件事應(yīng)該就是去看這個(gè)錯(cuò)誤日志

(2)錯(cuò)誤日志是默認(rèn)開(kāi)啟的,且錯(cuò)誤日志無(wú)法被關(guān)閉

(3)設(shè)置錯(cuò)誤日志:在配置文件中,log-error=DIR/filename

# cat /etc/my.cnf |egrep "log-error"

log-error = /data/mysqldb/log/mysql-error.log

# ls /data/mysqldb/log

mysql-error.log

(4)刪除錯(cuò)誤日志

mysqladmin -u root -p flush-logs

# ls

mysql-error.log mysql-slow_query.log


通用查詢(xún)?nèi)罩?/b>

(1)用來(lái)記錄用戶(hù)的所有操作:啟動(dòng)和關(guān)閉mysql、更新語(yǔ)句、查詢(xún)語(yǔ)句

(2)啟用和設(shè)置通用查詢(xún)?nèi)罩?配置文件中,log=DIR/filename

(3)刪除通用查詢(xún)?nèi)罩?

# mysqladmin -u root -p flush-logs

或# echo >access.log


慢查詢(xún)?nèi)罩?/b>

(1)記錄執(zhí)行時(shí)間超過(guò)指定時(shí)間的執(zhí)行語(yǔ)句

(2)啟動(dòng)和設(shè)置慢查詢(xún)?nèi)罩?在配置文件中

log-slow-queries=DIR/filename

long_query_time=n//設(shè)置時(shí)間為n秒,默認(rèn)為10s

(3)刪除慢查詢(xún)?nèi)罩?

# mysqladmin -u root -p flush-logs



MySQL日志類(lèi)型

a?錯(cuò)誤日志(Error Log)

日志文件名稱(chēng):用--log-error[=file_name]選項(xiàng)來(lái)指定mysql保存錯(cuò)誤日志文件的位置,如果沒(méi)有指定file_name,mysql使用默認(rèn)的錯(cuò)誤日志名host_name.err;

日志文件路徑:默認(rèn)情況下,日志文件都保存在mysql的數(shù)據(jù)目錄中。如果執(zhí)行FLUSH LOGS,錯(cuò)誤日志用-old重新命名后綴,并且mysql創(chuàng)建一個(gè)新的空日志文件。(如果未給出-log-error選項(xiàng),則不會(huì)重新命名)。

日志其他說(shuō)明:如果不指定--log-error,或者(Windows)使用--console選項(xiàng),錯(cuò)誤被寫(xiě)入標(biāo)準(zhǔn)錯(cuò)誤輸出stderr。通常標(biāo)準(zhǔn)輸出為終端。

b?查詢(xún)?nèi)罩荆≦uery Log)

日志文件名稱(chēng):(老版本方法)--log=[file_name]-l[file_name]選項(xiàng)進(jìn)行啟用。如果未指定file_name,默認(rèn)名稱(chēng)為host_name.log

/etc/my.cnf[mysqld]下面添加log=/var/lib/mysql/Dragonwake.log重啟后

#servicemysql restart

查看錯(cuò)誤日志:

正確的配置方法,在/etc/my.cnf[mysqld]下面添加下如內(nèi)容

#?查詢(xún)?nèi)罩?/b>

general_log=ON

general_log_file=/var/lib/mysql/Dragonwake.log

重啟mysql

生成的查詢(xún)?nèi)罩疚募?b>Dragonwake.log

查詢(xún)?nèi)罩緝?nèi)容:

#tail -f /var/lib/mysql/Dragonwake.log

c?慢查詢(xún)?nèi)罩荆⊿low Query Log)

日志配置:--log-slow-queries[=file_name]選項(xiàng)啟動(dòng)時(shí),mysql寫(xiě)一個(gè)包含了所有執(zhí)行超過(guò)了long_query_time秒的SQL語(yǔ)句的日志。如果未指定file_name,默認(rèn)為host_name-slow.err。如果給出了文件名,但不是絕對(duì)路徑,文件則寫(xiě)入默認(rèn)的數(shù)據(jù)目錄。

/etc/my.cnf[mysqld]下面添加

#?執(zhí)行超過(guò)1秒的sql會(huì)被log下來(lái)

long_query_time=1

#?將查詢(xún)執(zhí)行時(shí)間較慢的語(yǔ)句進(jìn)行記錄

log-slow-queries=/var/lib/mysql/Dragonwake-slow.log

重啟mysql服務(wù)后,出現(xiàn)如下錯(cuò)誤,

正確日志配置:mysql5.6版本以上,取消了參數(shù)log-slow-queries,更改為slow-query-log-file,同時(shí)必須設(shè)置slow_query_log=on

#?慢查詢(xún)?nèi)罩?/b>

#?執(zhí)行超過(guò)1秒的sql會(huì)被log下來(lái)

long_query_time=1

#?開(kāi)啟慢查詢(xún)

slow_query_log=on

#?慢查詢(xún)?nèi)罩韭窂?/b>

slow-query-log-file=/var/lib/mysql/Dragonwake-slow.log

重啟MySQL

輸出慢查詢(xún)?nèi)罩?b>Dragonwake-slow.log

慢查詢(xún)?nèi)罩緝?nèi)容

d?更新日志(Update Log)

日志配置:用--log-update[=file_name]選項(xiàng)(不建議使用)

/etc/my.cnf[mysqld]下面添加,

#?更新查詢(xún)

log-update=/var/lib/mysql/Dragonwake-update.log

出現(xiàn)如下錯(cuò)誤:

暫未找到解決辦法

e?二進(jìn)制日志(Binary Log & Binary Log Index)

日志設(shè)置:用--log-bin[=file_name]選項(xiàng)

/etc/my.cnf[mysqld]下面添加,

#?二進(jìn)制查詢(xún)

log-bin=/var/lib/mysql/Dragonwake-bin.log

重啟MySQL

輸出二進(jìn)制日志

查看二進(jìn)制日志內(nèi)容

#tail -f /var/lib/mysql/Dragonwake-bin.000001

f)mysql日志查詢(xún)

mysql> show variables like'log_%';

h)mysql當(dāng)前日志

mysql> show master status;

i)mysql二進(jìn)制日志數(shù)目

mysql> show master logs;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容