MySql学习15----MySql日志
MySql日志記錄了MySql數(shù)據(jù)庫(kù)日常操作和錯(cuò)誤信息。MySql有不同類型的日志文件(各自存儲(chǔ)了不同類型的日志),從日志當(dāng)中可以查詢到MySql數(shù)據(jù)庫(kù)的運(yùn)行情況、用戶操作、錯(cuò)誤信息等,可以為MySql管理和優(yōu)化提供必要的信息。
一. 日志簡(jiǎn)介
MySql日志主要分為4類,使用這些日志文件,可以查看MySql內(nèi)部發(fā)生的事情。
- 錯(cuò)誤日志:記錄MySql服務(wù)的啟動(dòng)、運(yùn)行或停止MySql服務(wù)時(shí)出現(xiàn)的問(wèn)題;
- 查詢?nèi)罩?#xff1a;記錄建立的客戶端連接和執(zhí)行的語(yǔ)句;
- 二進(jìn)制日志:記錄所有更改數(shù)據(jù)的語(yǔ)句,可以用于數(shù)據(jù)復(fù)制;
- 慢查詢?nèi)罩?#xff1a;記錄所有執(zhí)行時(shí)間超過(guò)long_query_time的所有查詢或不使用索引的查詢
默認(rèn)情況下,所有日志創(chuàng)建于MySql數(shù)據(jù)目錄中。通過(guò)刷新日志,可以強(qiáng)制MySql關(guān)閉和重新打開日志文件。當(dāng)執(zhí)行一個(gè)Flush logs語(yǔ)句或執(zhí)行MySqladmin flush-logs或MySqladmin refresh時(shí),將刷新日志。
二. 二進(jìn)制日志
使用二進(jìn)制日志的主要目的是最大可能地恢復(fù)數(shù)據(jù)庫(kù),因?yàn)槎M(jìn)制日志包含備份后進(jìn)行的所有更新。
二進(jìn)制日志主要記錄MySql數(shù)據(jù)庫(kù)的變化。二進(jìn)制日志以一種有效的格式,并且是事務(wù)安全的方式包含更新日志中可用的所有信息。二進(jìn)制日志包含了所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)(例如,沒有匹配任何行的一個(gè)DELETE)的語(yǔ)句。語(yǔ)句以“事件”的形式保存,描述數(shù)據(jù)更改。
2.1 啟動(dòng)和設(shè)置二進(jìn)制日志
默認(rèn)情況下,二進(jìn)制日志是關(guān)閉的,可以通過(guò)修改MySQL的配置文件來(lái)啟動(dòng)和設(shè)置二進(jìn)制日志。
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini中有下面幾個(gè)參數(shù)設(shè)置是關(guān)于二進(jìn)制日志的:
舉例:直接打開C:\ProgramData\MySQL\MySQL Server 5.7\my.in的文件,取消Log-bin前面的注釋,并添加expire_logs_days和max_binlog_size兩個(gè)字段
修改了以后,不會(huì)立即生效的,需要重啟MySql服務(wù)器(note,不是指的exit命令退出的客戶端,而是進(jìn)程中的MySql服務(wù))。究竟生效沒有,可以通過(guò)show variables變量來(lái)查看具體的值是否修改成功了。
關(guān)閉和重新啟動(dòng)MySql服務(wù)之后,新的二進(jìn)制文件將出現(xiàn)在C:\ProgramData\MySQL\MySQL Server 5.7\Data目錄下,并自動(dòng)生成.0000001和.index兩個(gè)文件,文件名稱默認(rèn)為主機(jī)名稱。當(dāng)然,可以自定義日志路徑,就需需要log-bin目錄中指定二進(jìn)制日志存放路徑:
log-bin="D:/mylogs"這樣,就會(huì)在mlogs路徑下生成對(duì)應(yīng)的二進(jìn)制文件 名稱為mylogs.0000001和mylogs.index
note: 數(shù)據(jù)庫(kù)文件最好不要和日志文件存放在同一個(gè)磁盤上,這樣,當(dāng)數(shù)據(jù)庫(kù)文件所在的磁盤出現(xiàn)故障時(shí),可以使用日志文件恢復(fù)數(shù)據(jù)。
2.2 查看二進(jìn)制日志
MySql二進(jìn)制日志存儲(chǔ)了所有的變更信息,MySql二進(jìn)制日志時(shí)經(jīng)常用到的。當(dāng)MySql創(chuàng)建二進(jìn)制日志文件時(shí),首先創(chuàng)建一個(gè)以“filename”為名稱,以“.index”為后綴的文件;再創(chuàng)建一個(gè)以“filename”為名稱,以“.000001”為后綴的文件。當(dāng)MySql服務(wù)重新啟動(dòng)一次,以“.000001”為后綴的文件會(huì)增加一個(gè),并且后綴名加1遞增;如果日志長(zhǎng)度超過(guò)了max_binlog_size的上限也會(huì)創(chuàng)建一個(gè)新的日志文件。
舉例:使用show binary logs查看二進(jìn)制文件個(gè)數(shù)及文件名
mysql> show binary logs; +---------------------+-----------+ | Log_name | File_size | +---------------------+-----------+ | WL12345-bin.000001 | 154 | +---------------------+-----------+ 1 row in set (0.00 sec)可以看到,當(dāng)前只有一個(gè)二進(jìn)制文件。日志文件的個(gè)數(shù)與MySql服務(wù)啟動(dòng)的次數(shù)相同。
舉例:假設(shè)Mytest中有四個(gè)表,刪除三個(gè)表,查看對(duì)應(yīng)的日志內(nèi)容。使用mysqlbinlog查看二進(jìn)制日志的內(nèi)容
1 mysql> use mytest; 2 Database changed 3 mysql> show tables; 4 +------------------+ 5 | Tables_in_mytest | 6 +------------------+ 7 | stu | 8 | stu2 | 9 | stu3 | 10 | user | 11 +------------------+ 12 4 rows in set (0.00 sec) 13 14 mysql> drop table stu2,stu3,user; 15 Query OK, 0 rows affected (0.09 sec) View Code C:\Users\Hermioner>cd C:\ProgramData\MySQL\MySQL Server 5.7\DataC:\ProgramData\MySQL\MySQL Server 5.7\Data>mysqlbinlog WL12345-bin.000001具體的結(jié)果中,將會(huì)出現(xiàn)DROP語(yǔ)句,記錄了剛剛的刪除操作
DROP TABLE `stu2`,`stu3`,`user` /* generated by server */
/*!*/;
# at 354
#190215 16:38:25 server id 1 end_log_pos 377 CRC32 0xaff15f2d Stop
Note: 即使現(xiàn)在更新了數(shù)據(jù),日志名字個(gè)數(shù)都不改變,只有重啟了MySql服務(wù)器,才會(huì)增加日志個(gè)數(shù)。假設(shè)現(xiàn)在重啟了,查看日志個(gè)數(shù)和名字:
mysql> show binary logs; +---------------------+-----------+ | Log_name | File_size | +---------------------+-----------+ | WL12345-bin.000001 | 377 | | WL12345-bin.000002 | 154 | +---------------------+-----------+ 2 rows in set (0.00 sec)2.3 刪除二進(jìn)制日志
MySql的二進(jìn)制文件可以配置自動(dòng)刪除,比如之前配置的過(guò)期刪除時(shí)間,同時(shí)MySql也提供了安全的手動(dòng)刪除二進(jìn)制日志文件的方法:RESET MASTER刪除所有的二進(jìn)制日志文件;PURGE MASTER LOGS只刪除部分二進(jìn)制日志文件。
(1)使用RESET MASTER語(yǔ)句刪除所有二進(jìn)制日志文件
? ? ? ? ? ?語(yǔ)法:
RESET MASTER;?說(shuō)明:執(zhí)行完該語(yǔ)句之后,所有二進(jìn)制日志將被刪除,MySql會(huì)重新創(chuàng)建二進(jìn)制日志文件,新的日志文件擴(kuò)展名將重新從000001開始編號(hào)。
(2)使用PURGE MASTER LOGS語(yǔ)句刪除指定日志文件
? ? ? ? ? 語(yǔ)法:
PURGE {MASTER | BINARY} LOGS TO 'log_name' PURGE {MASTER | BINARY} LOGS BEFORE 'date'說(shuō)明:第一種方法指定文件名,執(zhí)行該命令將刪除文件名編號(hào)比指定文件名編號(hào)小的所有日志文件。第二種方法指定日期,執(zhí)行該命令將刪除指定日期以前的所有日志文件。
舉例:刪除創(chuàng)建時(shí)間比binlog.000003早的所有日志文件
舉例:刪除早于2016年1月30日的所有日志
2.4 使用二進(jìn)制日志恢復(fù)數(shù)據(jù)庫(kù)
要想從二進(jìn)制日志恢復(fù)數(shù)據(jù),需要知道當(dāng)前二進(jìn)制日志文件的路徑和文件名。一般可以從配置文件my.ini中找到路徑。
語(yǔ)法:
位置和結(jié)束位置。
note: 上面的position代表日志文件中的具體start或者stop的行數(shù)位置
2.5 暫時(shí)停止二進(jìn)制日志功能
三. 錯(cuò)誤日志
3.1 啟動(dòng)和設(shè)置錯(cuò)誤日志
3.2 查看錯(cuò)誤日志
3.3 刪除錯(cuò)誤日志
四. 通用查詢?nèi)罩?/h2>
通用查詢?nèi)罩居涗汳ySql的所有用戶操作,包括啟動(dòng)和關(guān)閉服務(wù)、執(zhí)行查詢和更新語(yǔ)句等。
4.1 啟動(dòng)和設(shè)置通用查詢?nèi)罩?/strong>
默認(rèn)時(shí)沒開啟的,還是通過(guò)修改my.ini:
4.2 查看通用查詢?nèi)罩?/strong>
5.3 刪除通用查詢?nèi)罩?/strong>
五. 慢查詢?nèi)罩?/h2>
慢查詢?nèi)罩臼怯涗洸樵儠r(shí)長(zhǎng)超過(guò)指定時(shí)間的日志。慢查詢?nèi)罩局饕脕?lái)記錄執(zhí)行時(shí)間較長(zhǎng)的查詢語(yǔ)句。通過(guò)慢查詢?nèi)罩?#xff0c;可以找出執(zhí)行時(shí)間較長(zhǎng)、執(zhí)行效率較低的語(yǔ)句,然后進(jìn)行優(yōu)化。
5.1 啟動(dòng)和設(shè)置慢查詢?nèi)罩?/strong>
5.2 查看慢查詢?nèi)罩?/strong>
5.3 刪除慢查詢?nèi)罩?/strong>
?
參考文獻(xiàn):
《MySql5.7 從入門到精通》
轉(zhuǎn)載于:https://www.cnblogs.com/Hermioner/p/10384818.html
總結(jié)
以上是生活随笔為你收集整理的MySql学习15----MySql日志的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 函数表达式--递归
- 下一篇: JavaScript自动生成博文目录导航