一、MySQL Binlog 簡介
MySQL 的二進制日志 binlog 可以說是 MySQL 最重要的日志,它記錄了所有的 DDL 和 DML 語句(除了數據查詢語句select、show等),以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進制日志是事務安全型的。binlog 的主要目的是復制和恢復。
二、Binlog日志的兩個最重要的使用場景:
1、MySQL主從復制:MySQL Replication在Master端開啟binlog,Master把它的二進制日志傳遞給slaves來達到master-slave數據一致的目的
2、數據恢復:通過使用 mysqlbinlog工具來使恢復數據
三、開啟Binlog日志:
通過配置 /etc/my.cnf
或 /etc/mysql/mysql.conf.d/mysqld.cnf
配置文件的 log-bin
選項:
##配置binlog日志路徑以及日志文件名前綴、生成的日志格式為:bin-log.000001 log-bin=/var/lib/mysql/bin-log ##注意5.7以及更高版本需要配置本項、自定義,保證唯一性 server-id=1 ##binlog格式,有3種statement,row,mixed,區別的話,請自行搜索 binlog-format=mixed ##表示每1次執行寫入就與硬盤同步,會影響性能,為0時表示,事務提交時mysql不做刷盤操作,由系統決定 sync-binlog=1
四、查看Binlog日志狀態
mysql命令行:
show variables like '%log_bin%';
binlog日志開啟狀態為ON
五、查看Binlog文件內容
mysql命令行:
show binlog events in 'bin-log-1.000001';
六、通過Binlog恢復數據
linux命令行:
/usr/bin/mysqlbinlog --database=hello /var/lib/mysql/bin-log-1.000001 | /usr/bin/mysql -uroot -p123456zy -v hello
/usr/bin/mysqlbinlog 為binlog命令
--database=hello 指定數據庫為hello的日志
/var/lib/mysql/bin-log-1.000001 為binlog日志
| 為管道符
/usr/bin/mysql -uroot -p123456zy -v hello 連接mysql、並指定需要恢復的數據庫 -v 為顯示詳細信息
七、通過指定位置恢復數據
linux命令行:
/usr/bin/mysqlbinlog --start-position=573 --stop-position=718 --database=hello /var/lib/mysql/bin-log-1.000001 | /usr/bin/mysql -uroot -p123456zy -v hello
--start-position=573 開始位置
--stop-position=718 結束位置
查看位置信息:
mysql命令行:
show binlog events in 'bin-log-1.000001';
八、通過指定時間恢復數據
linux命令行:
/usr/bin/mysqlbinlog --start-datetime="2021-06-27 20:58:18" --stop-datetime="2021-06-27 20:58:35" --database=hello /var/lib/mysql/bin-log-1.000001 | /usr/bin/mysql -uroot -p123456zy -v hello
--start-datetime="2021-06-27 20:58:18" 開始時間
--stop-datetime="2021-06-27 20:58:35" 結束時間
查看時間信息
linux命令行:
/usr/bin/mysqlbinlog --no-defaults /var/lib/mysql/bin-log-1.000001