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日志類型
日志其他說明:如果不指定--log-error功蜓,或者(Windows)使用--console選項,錯誤被寫入標準錯誤輸出stderr宠蚂。通常標準輸出為終端式撼。
日志文件名稱:(老版本方法)用--log=[file_name]或-l[file_name]選項進行啟用。如果未指定file_name求厕,默認名稱為host_name.log
在/etc/my.cnf中[mysqld]下面添加log=/var/lib/mysql/Dragonwake.log重啟后
正確的配置方法屏歹,在/etc/my.cnf中[mysqld]下面添加下如內(nèi)容
general_log_file=/var/lib/mysql/Dragonwake.log
生成的查詢?nèi)罩疚募?b>Dragonwake.log
#tail -f /var/lib/mysql/Dragonwake.log
log-slow-queries=/var/lib/mysql/Dragonwake-slow.log
重啟mysql服務(wù)后忘嫉,出現(xiàn)如下錯誤,
slow-query-log-file=/var/lib/mysql/Dragonwake-slow.log
輸出慢查詢?nèi)罩?b>Dragonwake-slow.log
日志配置:用--log-update[=file_name]選項(不建議使用)
log-update=/var/lib/mysql/Dragonwake-update.log
e?二進制日志(Binary Log & Binary Log Index)
日志設(shè)置:用--log-bin[=file_name]選項
log-bin=/var/lib/mysql/Dragonwake-bin.log
#tail -f /var/lib/mysql/Dragonwake-bin.000001
mysql> show variables like'log_%';