MySQL的備份與恢復

2021-08-29 06:59:12 字數 1522 閱讀 7759

備份

備份分為完全備份和增量備份。

完全備份有兩種方式,一種是備份所有的資料庫檔案,適合比較大的資料庫,另一種是將資料庫全部dump出來,適合資料比較少的情況。

對於第一種方法,各種引擎的方式差不多,步驟如下:

1. flush tables with read lock 加讀鎖保持資料的一致性

2. flush logs或者show master status記下二進位制日誌的位置方便增量備份

3. 建立快照或者直接拷貝資料庫檔案

4. unlock tables

3中如果建立快照還需要下面兩步:

5. 拷貝資料庫檔案

6. 刪除快照

對於myisam表還可以使用mysqlhotcopy,它也是直接拷貝表檔案。由於指令碼自己會鎖表所以步驟比較少,命令為:

mysqlhotcopy -h hostname -u username --flushlog db_name /bak/path

需要注意的是mysqlhotcopy(5.0.37)和最新的dbi(1.54)不相容,可以在842行後加上一行

s/.*$quote//g;

解決。注意用這種方法,如果不是用快照,那麼當資料庫很大的時候,鎖表的時間比較長,這段時間內更新操作不能進行。

對於第二種方法,可以使用mysqldump,當然也可以用select into,不過用這個命令比較麻煩。

如果是innodb的表,那麼使用引數--single-transaction可以保持資料庫的一致性,而鎖表的時間很短。

如果不是innodb表,那麼就要使用--lock-tables或者--lock-all-tables,這樣在整個匯出過程中加讀鎖,期間更新操作不 能進行,當資料庫比較大的時候需要注意。--lock-tables是按資料庫加鎖,不能保證全部資料庫的一致性,--lock-all-tables是 給所有資料庫的所有表加鎖。

命令為:

mysqldump --lock-all-tables --flush-logs --master-data=2 --all-database > db.sql

或mysqldump --single-transaction --flush-logs --master-data=2 --database db_name> db.sql

增量備份則是定期備份二進位制日誌,備份前使用 flush logs 重新整理日誌。如果之前完全備份使用了flush命令或選項,那麼增加備份從完全備份之後新生成的日誌開始,否則從完全備份時在使用的日誌開始。

恢復

恢復步驟比較簡單。

1. 如果是備份的資料檔案,那麼拷回資料目錄。如果是匯出的,用 mysql < bak.sql 匯入

2. 匯入完全備份之後增量備份的二進位制日誌,命令為 mysqlbinlog mysql-bin.***x | mysql。

如果完全備份時沒有重新整理日誌可能還需要用--start-datetime或--start-position指定日誌的起始位置。

mysql 備份與恢復 MySQL 備份與恢復

1 檢視資料庫的資料儲存在哪個目錄下 shiyanlou mysql uroot e show variables like datadir variable name value datadir var lib mysql 2 備份資料的方法 select into outfile 檔名 或者 s...

mysql 備份與恢復 Mysql 備份與恢復

資料檔案一致性處理 在完全備份的情況下,檔案不是時間點一致的,因為進行快照的時間點不一樣。如果嘗 試在未prepare資料的情況下還原資料庫,雖然操作上支援恢復,但是在啟動的時候仍會 進行資料recovery。執行帶 prepare 選項的 mariabackup 命令會使資料檔案進行統一,達到資料...

mysql備份恢復 mysql之備份與恢復

工作中,我們經常會遇到資料庫的備份與恢復場景 目錄1 mysql的備份與恢復 2 mysql的匯入與匯出 1 mysql的備份與恢復 mysql的備份命令是mysqldump,mysql之備份 mysqldump u user h host port p db table.file u 後面接資料庫...