MySQL 備份和恢復策略

備份數據

shell> mysqldump --single-transaction --flush-logs --master-data=2 \
         --all-databases --delete-master-logs > backup_sunday_1_PM.sql

--flush-logs, -F:轉存數據文件前刷新MySQL服務日誌,在數據目錄生成一個新的二進制日誌文件。一般與--lock-all-tables,-master-data或--single-transaction一塊兒使用。html

--master-data[=value]:使轉存的數據文件包含 CHANGE MASTER TO 語句,該語句標明瞭服務器的二進制日誌文件名和位置。默認值爲1,該語句不以註釋的形式寫入,並在從新加載轉存的數據文件時執行。若是值爲2,則以註釋的形式寫入,從新加載轉存的數據文件時不會執行。所以生成的 .sql 轉存文件包括如下幾行:mysql

-- Position to start replication or point-in-time recovery from
-- CHANGE MASTER TO MASTER_LOG_FILE='gbichot2-bin.000007',MASTER_LOG_POS=4;

--master-data選項會自動關閉--lock-tables,而且打開--lock-all-tables,除非同時指定了--single-transaction,則在轉存開始時在短期內得到全局讀鎖定。sql

--single-transaction:對於支持事務的表如InnoDB表,此選項會將事務隔離級別設置爲:REPEATABLE READ。並在備份前執行 START TRANSACTION 語句,讓整個數據在備份過程當中保證一致性,且不會鎖表和阻塞其餘應用程序。可是該選項不能保證MyISAM表和MEMORY表的數據一致性。shell

備份過程當中應避免其餘連接使用如下語句:ALTER TABLE,CREATE TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE,事務並不能隔離以上的語句,可能會致使備份的內容不正確或失敗。服務器

該選項與--lock-tables選項互斥,要備份大表,應該將--single-transaction選項與--quick選項結合使用。ui

--all-databases:備份全部庫和表。日誌

--delete-master-logs:執行備份操做後,向服務器發送 PURGE BINARY LOGS 語句來刪除二進制日誌。此選項會自動啓用--master-data。code

恢復數據

shell> mysql < backup_sunday_1_PM.sql
shell> mysqlbinlog gbichot2-bin.000007 gbichot2-bin.000008 | mysql
shell> mysqlbinlog gbichot2-bin.000009 ... | mysql

備份策略

  • 始終使用--log-bin選項或--log-bin=log_name選項運行MySQL服務器。
  • 按期使用mysqldump命令進行完整備份。
  • 按期使用 FLUSH LOGS 或 mysqladmin flush-logs 命令刷新日誌進行增量備份。

參考:https://dev.mysql.com/doc/mys...htm

相關文章
相關標籤/搜索