MySQL中的備份和恢復

MySQL備份

**MySQL中的邏輯備份是將數據庫中的數據備份爲一個文本文件,備份的文件可以被查看和編輯。**在MySQL中,使用mysaldump工具來完成備份。有以下3種來調用mysqldump:

  1. 備份指定的數據庫,或者此數據庫中某些表
shell>mysqldump [option] db_name [tables]
  1. 備份指定的一個或多個數據庫
shell>mysqldump [option] --database DB1 [DB2 DB3...]
  1. 備份所有數據庫
shell>mysqldump [option] --all-database

如果沒有指定數據庫中的任何表,默認導出所有數據庫中所有表。以下給出一些使用mysqldump工具進行備份的例子:

  1. 備份所有數據庫
[cqh@localhost ~]$ mysqldump -uroot -p --all-database > all.sql
  1. 備份數據庫test
[cqh@localhost ~]$ mysqldump -uroot -p test > test.sql
  1. 備份數據庫test下的表emp
[cqh@localhost ~]$ mysqldump -uroot -p test emp > emp.sql
  1. 備份數據庫test下的表emp和dept
[cqh@localhost ~]$ mysqldump -uroot -p test emp dept > emp_dept.sql
  1. 備份數據庫test下的所有表爲逗號分割的文本,備份到/tmp:
[cqh@localhost ~]$ mysqldump -uroot -p -T /tmp test emp --fields-terminated-by ','

MySQL恢復

MySQL中的恢復可分爲三種,分別是:完全恢復、基於時間點恢復和基於位置恢復。

1. 完全恢復

mysqldump的恢復也很簡單,將備份作爲輸入執行即可,具體語法如下:

mysql -uroot -p dbname < bakfile

注意,將備份恢復後數據並不完整,還需要將備份後執行的日誌進行重做,語法如下:

mysqlbinlog binlog-file | mysql -uroot -p

2. 基於時間點恢復

由於誤操作,比如誤刪除了一些表,這時使用完全恢復是沒有用的,因爲日誌裏還存在誤操作的語句,我們需要的是恢復到誤操作之前的狀態,然後跳過誤操作語句,再恢復後面執行的語句,完成我們的恢復。這種恢復叫不完全恢復,在MySQL中,不完全恢復分別爲基於時間點的恢復和基於位置的恢復。

以下是基於時間點恢復的操作步驟:

如果上午10點發生了誤操作,可以用以下語句用備份和BINLOG數據恢復到故障前:

shell>mysqlbinlog --stop-date="20150929 9:59:59" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd

跳過故障時的時間點,繼續執行後面的BINLOG,完成恢復。

shell>mysqlbinlog --start-date="20150929 10:01:00" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd \

3. 基於位置恢復

和基於時間點的恢復類似,但是更精確,因爲同一個時間點可能有很多條SQL語句同時執行。恢復的操作步驟如下:

在shell下執行如下命令:

shell>mysqlbinlog --start-date="20150929 9:55:00" --stop-date="20150929 10:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

該命令將在/tmp目錄創建小的文本文件,編輯此文件,找到出錯語句前後的位置號,例如前後位置號分別是565512和565515

恢復了以前的備份文件後,應從命令行輸入下面內容:

shell>mysqlbinlog--stop-position="551212"/var/log/mysql/bin.123456 | mysql -uroot -pmypwd
shell>mysqlbinlog--start-position="551215"/var/log/mysql/bin.123456 | mysql -uroot -pmypwd

**上面的第一行將恢復到停止位置爲止的所有事務。下一行將恢復從給定的起始位置直到二進制日誌結束的所有事務。**因爲mysqlbinlog的輸出包括每個SQL語句記錄之前的SET TIMESTAMP語句,因此恢復的數據和相關MySQL日誌將反應事務執行的原時間。

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