Mysql 日志管理(學習筆記九)

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

日志作用

(1)當數(shù)據(jù)庫遭到意外損害,可以通過日志文件來查詢出錯原因

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

日志分類

(1)二進制日志:以二進制文件的形式記錄了數(shù)據(jù)庫中的操作屋摇,但是不記錄查詢語句

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

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

(4)通用查詢?nèi)罩?記錄用戶的所有操作,包括啟動和關(guān)閉MySQL服務(wù)炮温、更新語句火脉、查詢語句等

日志設(shè)置

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

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

(3)默認只啟動了錯誤日志功能柒啤,其他需要手工啟動

(4)但啟動日志功能會降低Mysql的執(zhí)行速度倦挂,因為一條操作寫進日志中是要花時間的


二進制日志

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

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

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

DIR是存放二進制日志的目錄方援;

每啟動一次Mysql,該目錄下就會生成一個filename.00000x的文件涛癌;

目錄下還有一個filename.index的文件犯戏,用于存儲所有二進制文件清單;

如果我們沒有設(shè)置DIR和filename拳话,則默認在數(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)臨時停止與啟動二進制日志

-> set sql_log_bin=0; 停止-> set sql_log_bin=1; 啟動

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

(6)查看二進制日志:

# mysqlbinlog mysql-bin.000001

(7)刪除二進制日志:

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

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

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

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

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

注意還原時必須是編號小的先還原

(9)使用二進制日志文件的pos號|時間點恢復(fù)

//先執(zhí)行3條操作-> create database 2test-> create database alvin-> drop database 2test//查看二進制日志弃衍,觀察每一個命令的起始/結(jié)束pos號呀非,和起始/結(jié)束時間# 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/*!*/;//想回到什么哪條命令時的狀態(tài),可以指定起始/結(jié)束pos號恢復(fù)# mysqlbinlog --start-position="120" --stop-position="217" mysql-bin.000001 |mysql -u root -p

//日志也會記錄下這條恢復(fù)語句笨鸡,我們可以看到這條命令的時間和原來那條一模一樣

# 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/*!*/;

//同理也可以用時間點來恢復(fù)

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


錯誤日志

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

(2)錯誤日志是默認開啟的,且錯誤日志無法被關(guān)閉

(3)設(shè)置錯誤日志:在配置文件中形耗,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)刪除錯誤日志

mysqladmin -u root -p flush-logs

# ls

mysql-error.log mysql-slow_query.log


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

(1)用來記錄用戶的所有操作:啟動和關(guān)閉mysql哥桥、更新語句、查詢語句

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

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

# mysqladmin -u root -p flush-logs

或# echo >access.log


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

(1)記錄執(zhí)行時間超過指定時間的執(zhí)行語句

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

log-slow-queries=DIR/filename

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

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

# mysqladmin -u root -p flush-logs



MySQL日志類型

a?錯誤日志(Error Log)

日志文件名稱:用--log-error[=file_name]選項來指定mysql保存錯誤日志文件的位置拟糕,如果沒有指定file_name,mysql使用默認的錯誤日志名host_name.err倦踢;

日志文件路徑:默認情況下送滞,日志文件都保存在mysql的數(shù)據(jù)目錄中。如果執(zhí)行FLUSH LOGS辱挥,錯誤日志用-old重新命名后綴犁嗅,并且mysql創(chuàng)建一個新的空日志文件。(如果未給出-log-error選項晤碘,則不會重新命名)褂微。

日志其他說明:如果不指定--log-error功蜓,或者(Windows)使用--console選項,錯誤被寫入標準錯誤輸出stderr宠蚂。通常標準輸出為終端式撼。

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

日志文件名稱:(老版本方法)--log=[file_name]-l[file_name]選項進行啟用。如果未指定file_name求厕,默認名稱為host_name.log

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

#servicemysql restart

查看錯誤日志:

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

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

general_log=ON

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

重啟mysql

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

查詢?nèi)罩緝?nèi)容:

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

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

日志配置:--log-slow-queries[=file_name]選項啟動時具壮,mysql寫一個包含了所有執(zhí)行超過了long_query_time秒的SQL語句的日志褪迟。如果未指定file_name输莺,默認為host_name-slow.err。如果給出了文件名十艾,但不是絕對路徑抵代,文件則寫入默認的數(shù)據(jù)目錄腾节。

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

#?執(zhí)行超過1秒的sql會被log下來

long_query_time=1

#?將查詢執(zhí)行時間較慢的語句進行記錄

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

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

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

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

#?執(zhí)行超過1秒的sql會被log下來

long_query_time=1

#?開啟慢查詢

slow_query_log=on

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

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

重啟MySQL

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

慢查詢?nèi)罩緝?nèi)容

d?更新日志(Update Log)

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

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

#?更新查詢

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

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

暫未找到解決辦法

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

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

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

#?二進制查詢

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

重啟MySQL

輸出二進制日志

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

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

f)mysql日志查詢

mysql> show variables like'log_%';

h)mysql當前日志

mysql> show master status;

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

mysql> show master logs;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市同辣,隨后出現(xiàn)的幾起案子拷姿,更是在濱河造成了極大的恐慌,老刑警劉巖旱函,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件响巢,死亡現(xiàn)場離奇詭異,居然都是意外死亡棒妨,警方通過查閱死者的電腦和手機踪古,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來券腔,“玉大人伏穆,你說我怎么就攤上這事》兹遥” “怎么了枕扫?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辱魁。 經(jīng)常有香客問我烟瞧,道長偷厦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任燕刻,我火速辦了婚禮只泼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卵洗。我一直安慰自己请唱,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布过蹂。 她就那樣靜靜地躺著十绑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酷勺。 梳的紋絲不亂的頭發(fā)上本橙,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音脆诉,去河邊找鬼甚亭。 笑死,一個胖子當著我的面吹牛击胜,可吹牛的內(nèi)容都是我干的亏狰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼偶摔,長吁一口氣:“原來是場噩夢啊……” “哼暇唾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辰斋,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤策州,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宫仗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體够挂,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年锰什,在試婚紗的時候發(fā)現(xiàn)自己被綠了下硕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡汁胆,死狀恐怖梭姓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嫩码,我是刑警寧澤誉尖,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站铸题,受9級特大地震影響铡恕,放射性物質(zhì)發(fā)生泄漏琢感。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一探熔、第九天 我趴在偏房一處隱蔽的房頂上張望驹针。 院中可真熱鬧,春花似錦诀艰、人聲如沸柬甥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绿满,卻和暖如春臂外,著一層夾襖步出監(jiān)牢的瞬間喇颁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工无牵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厂抖,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓忱辅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親墙懂。 傳聞我的和親對象是個殘疾皇子橡卤,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容