SoEasy——MySQL的二進位日誌binlog恢複數據庫

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做數據的恢復性能會非常低。數據庫的定期備份還是需要的。


分享到:


相關文章: