初識MySQL 日誌binlog
MySQL重要log,二進制日誌文件,記錄全部DDL和DML語句(除select),事件形式記錄,包含語句所執行的消耗時間,事務安全型。
DDL(數據庫定義語言),主要命令有create、alter、drop等。DDL主要定義或改變表table的結構、數據類型。建表時使用。
MDL(數據操縱語言),主要命令有select、update、insert、delete。mysql
mysqlbinlog常見選項:
--start-datetime:從二進制中讀取指定時間戳。
--stop-datetime:從二進制中讀取指定時間戳。
--start-position:從二進制中讀取指定position事件位置。
--stop-position:從二進制中讀取指定position事件位置。sql
binlog日誌使用場景:
1)MySQL主從複製:MySQL在replication在Master端開啓binlog,master將二進制文件傳遞給slaves來達到master-slave數據一致。
2)數據恢復:經過mysqlbinlog工具恢復數據
binlog日誌包括兩類文件:
1)二進制日誌索引文件(文件後綴名.index)用於記錄全部二進制文件
2)二進制日誌文件(文件後綴名.00000)記錄數據庫全部DDL和DML(select除)語句事件數據庫
開啓binlog日誌和基本操做vim
開啓binlog:
/etc/my.cnf文件log-bin=mysql-bin
安全
mysql命令操做:ide
查看日誌開啓mysql>show variables like 'log_%';
工具
查看全部binlog列表mysql>show master logs;
3d
查看master狀態,最後一個binlog日誌的編號名稱,及最後一個操做事件pos結束點(position)值。mysql>show master status;
日誌
刷新log日誌,開始產生一新的編號的binlog日誌文件mysql>flush logs;
注:mysqld服務重啓時,也會執行此命令,刷新binlog日誌。code
重置(清空)全部binlogmysql>reset master;
MySQL binlog日誌內容查看
binlog日誌爲二進制文件,cat、vim等工具沒法打開,使用自帶的mysqlbinlog命令查看
binlog內容分析:
# at 28226679 #181116 0:20:01 server id 776499703 end_log_pos 28226710 CRC32 0xb12373d2 Xid = 54012151 COMMIT/*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; # at 28226710 #181116 0:20:35 server id 3095565156 end_log_pos 28226757 CRC32 0x05f2d78a Rotate to mysql-bin.001121 pos: 4 DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
server id :數據庫主機服務號
end_log_pos:數據庫SQL結束時pos節點
binlog日誌查看命令:mysql> show binlog events in ‘mysql-bin.001120’\G;
binlog 從pos點100開始查,查詢10條mysql> show binlog events in ‘mysql-bin.001120’ from 100 limit 10\G;
利用binlog日誌恢復數據庫
1)恢復就近的完整備份庫mysql -uusername -p -v db_test -h 192.168.1.100 < ./db_test .sql
2)經過binlog找到要恢復的--stop-position點 和 --stop-position
binlog:mysql-bin.001118 、mysql-bin.001119 、mysql-bin.001120
mysqlbinlog -v --base64-output=DECODE-ROWS /data/binlog/mysql-bin.001118 | head -10 mysqlbinlog -v --base64-output=DECODE-ROWS /data/binlog/mysql-bin.001120 | grep -C 30 -i "22:05:01"
3)binlog恢復/bin/mysqlbinlog --start-position=120 --stop-position=2174941 /data/binlog/mysql-bin.001118 /data/binlog/mysql-bin.001119 /data/binlog/mysql-bin.001120 |/bin/mysql -uusername -p -v db_test -h 192.168.1.100
--start-position是備份後記錄下的pos點, --stop-position是誤操前的pos點,若是批多個binlog文件,那麼start-position是第一個binlog文件的pos點,stop-position是最後一個binlog的pos點
總結:所謂恢復,就是用mysql保存的binlog日誌中指定的區間段的sql語句進行從新執行一次。