MySQL備份與還原

1.mysqldump+mysqlbinlog介紹

  mysqldump備份結合binlog日誌恢復。MySQL備份一般採取全庫備份加日誌備份的方式,例如每天執行一次全備份,每小時執行一次二進制日誌備份,這樣在MySQL故障後可以使用全備份和日誌備份將數據恢復到最後一個二進制日誌備份前的任意位置或時間。


2.binlog


2.1介紹

  MySQL的二進制日誌記錄着該數據庫的所有增刪改的操作日誌(前提是要在自己的服務器上開啓binlog),還包括了這些操作的執行時間。爲了顯示二進制文件內容,可以使用mysqlbinlog命令查看。


2.2用途

  1)主從複製

  2)恢復數據


2.3開啓binary log功能

  通過編輯my.cnf中的log-bin選項可以開啓二進制日誌,形式如下:

  log-bin [=DIR/[filename]]


  其中,DIR參數指定二進制文件的存儲路徑;filename參數指定二進制文件的文件名,其形式爲filename.number,number的形式爲000001、000002等。每次重啓MySQL服務或運行mysql>flush logs;都會生成一個新的二進制日誌文件,這些日誌文件的number會不斷遞增。除了生成上述的文件外還會生成一個名爲fiename.index的文件,這個文件中存儲所有二進制日誌文件的清單,又稱爲二進制文件的索引。


開啓binary log功能的命令操作:

vim /etc/my.cnf

log_bin=/data/mysql/mysql-bin


/etc/init.d/mysqld restart


查看是否開啓:

[root@CentOS 7 ~]# mysql

mysql> show variables like 'log_bin';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin             | ON    |

+---------------+-------+

1 row in set (0.00 sec)


3.二進制日誌操作的相關命令


3.1查看MySQL Server上的二進制日誌

mysql> show binary logs;

+------------------+-----------+

| Log_name             | File_size  |

+------------------+-----------+

| mysql-bin.000001 |       120   |

| mysql-bin.000002 |       120   |

| mysql-bin.000003 |     65402 |

| mysql-bin.000004 |  1190629|

| mysql-bin.000005 |       262   |

+------------------+-----------+

5 rows in set (0.00 sec)


3.2查看二進制日誌信息

mysql> mysql> show binlog events in 'mysql-bin.000001';

+------------------+-----+-------------+-----------+-------------+---------------------------------------+

| Log_name           | Pos  | Event_type  | Server_id  |End_log_pos | Info                                                   |

+------------------+-----+-------------+-----------+-------------+---------------------------------------+

|mysql-bin.000001|   4    |Format_desc|      3306    |       120        | Server ver: 5.6.36-log, Binlog ver: 4 |

+------------------+-----+-------------+-----------+-------------+---------------------------------------+

1 row in set (0.00 sec)


3.3查看二進制日誌的事件

mysql> show binlog events;

image.png


3.4把某個二進制日誌之前的其他二進制日誌都刪除

pugre binary logs to 'mysql-bin.00010';


3.5把指定時間之前的二進制文件刪除

pugre binary logs before '2018-5-7 22:46:26';


4.使用binlog恢復之前刪除的數據(id=2)


注意:在實際生產環境中,如果遇到需要恢復數據庫的情況,不要讓用戶能訪問到數據庫,以避免新的數據插入進來,以及在主從的環境下,關閉主從。


4.1查看binlog文件,從中找出delete from test.tb1 where id=2

[root@CentOS7 ~]# cd /data/mysql/

[root@CentOS7 mysql]# mysqlbinlog -v mysql-bin.000002    (由於顯示太多,就不寫了。但從中可以看出delete事件發生position是27,事件結束position是416)


4.2恢復流程

  直接用bin-log日誌將數據庫恢復到刪除位置287前,然後跳過故障點,載進行恢復


4.3由於之前沒有做過全庫備份,所以使用所有binlog日誌恢復,所以生產環境中需要很長時間恢復,導出相關binlog文件

[root@CentOS7 mysql]# mysqlbinlog /data/mysql/mysql-bin.000001 > /tmp/mysql-bin.000001.sql

[root@CentOS7 mysql]# mysqlbinlog --stop-position=287 /data/mysql/mysql-bin.000002 > /tmp/287.sql

[root@CentOS7 mysql]# mysqlbinlog --start-position=416 /data.mysql/mysql-bin.000002 > /tmp/416.sql


4.4刪除test數據庫

mysql>drop database test;


4.5利用binlog恢復數據

[root@CentOS7 mysql]# mysql -uroot -p123456 < /tmp/mysql-bin.000001.sql

[root@CentOS7 mysql]# mysq -uroot -p123456 < /tmp/287.sql

[root@CentOS7 mysql]# mysql -uroot -p123456 < /tmp/416.sql


4.6恢復後,檢查表的數據是否完整

mysql>select * from test.tb1;


4.7mysqlbinlog相關參數

--start-datetime    從二進制日誌文件中讀取指定時間戳或本地計算機時間之後的日誌事件

--stop-datetime    從二進制日誌文件中讀取指定時間戳或本地計算機時間之前的日誌事件

--start-position     從二進制日誌文件中讀取指定position事件位置作爲開始

--stop-position     從二進制日誌文件中讀取指定position事件位置作爲事件截至


5.mysqldump


5.1介紹

  是MySQL用於備份和數據轉移的一個工具。主要生產一系列的SQL語句,可以封裝到文件,該文件包含所有重建數據庫所需的SQL命,如create database、create table、insert等。可以用來實現輕量級的快速遷移或恢復數據庫。

  mysqldump是將數據表導成SQL腳本文件,在不同的MySQL版本之間升級時相對比較合適。

  

5.2使用建議

  一般在數據量很小的時候(幾個G)可以由於備份。當數據量比較大的情況下,不建議使用mysqldump進行備份


5.3使用對象

  可以針對單個表、多個表、單個數據庫、多個數據庫、所有數據庫進行導出的操作


6.mysqldump相關操作命令


6.1導出數據庫test

mysqldump -uroot -p --flush-logs test > /tmp/terst.sql

          --flush-logs  完整備份的時候重新開啓一個新的binlog


6.2數據庫的導入

mysql -uroot -p test > /tmp/test.sql


6.3導出指定數據庫或單個表

mysqldump [options] db_name [tbl_name]


6.4導出多個數據庫

mysqldump [options] --databases db_name


6.5導出所有

mysqldump [options] --all-databases

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章