MySQL的二進制日誌binlog可以說是MySQL最重要的日誌,它記錄了所有的DDL和DML語句(除了數據查詢語句select),以事件形式記錄,還包含語
句所執行的消耗的時間,MySQL的二進制日誌是事務安全型的。
一般來說開啟binlog日誌大概會有1%的性能損耗。
binlog日誌有兩個最重要的使用場景:
1)MySQL主從複製:MySQL Replication在Master端開啟binlog,Master把它的二進制日誌傳遞給slaves來達到
master-slave數據一致的目的。
2)自然就是數據恢復了,通過使用mysqlbinlog工具來使恢復數據。
binlog日誌包括兩類文件:
1)二進制日誌索引文件(文件名後綴為.index)用於記錄所有的二進制文件
2)二進制日誌文件(文件名後綴為.00000*)記錄數據庫所有的DDL和DML(除了數據查詢語句select)語句事件。
一、開啟mysql-binlog日誌
在mysql配置文件my.cnf加上如下配置
[mysqld]
log-bin=mysql-bin
重啟mysql
service mysqld restart
查看binlog日誌是否開啟
mysql> show variables like 'log_%';
+---------------------------------+---------------------+
| Variable_name | Value |
+---------------------------------+---------------------+
| log_bin | ON |
二、常用的binlog日誌操作命令
1)查看所有binlog日誌列表
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 149 |
| mysql-bin.000002 | 4102 |
+------------------+-----------+
2 rows in set (0.00 sec)
2)查看master狀態,即最後(最新)一個binlog日誌的編號名稱,及其最後一個操作事件pos結束點(Position)值
mysql> show master status;
3)flush刷新log日誌,自此刻開始產生一個新編號的binlog日誌文件
mysql> flush logs;
4)重置(清空)所有binlog日誌
mysql> reset master;
注意:
每當mysqld服務重啟時,會自動執行此命令,刷新binlog日誌;在mysqldump備份數據時加 -F 選項也會刷新binlog日誌;
三:使用binlog日誌恢復數據的方法
語法如下
mysqlbinlog mysql-bin.0000xx | mysql -u用戶名 -p密碼 數據庫名
mysqlbinlog常見的選項有以下幾個:
--start-datetime:從二進制日誌中讀取指定等於時間戳或者晚於本地計算機的時間
--stop-datetime:從二進制日誌中讀取指定小於時間戳或者等於本地計算機的時間 取值和上述一樣
--start-position:從二進制日誌中讀取指定position 事件位置作為開始。
--stop-position:從二進制日誌中讀取指定position 事件位置作為事件截至
比如我們要把所有的操作都恢復(不包括我們的刪除,我們知道刪除是在755點上):
mysqlbinlog mysql-bin.000009 --start-position 154 --stop-position 755 | mysql -uroot -p mytest
既然binlog這麼好,是不是開啟了binlog就不需要定期做備份了呢,不要這樣做。為什麼呢,因為binlog的數據量非常大,另外就是使用binlog做數據的恢復性能會非常低。數據庫的定期備份還是需要的。
閱讀更多 IT碼將 的文章