備份
備份分為完全備份和增量備份。
完全備份有兩種方式,一種是備份所有的資料庫檔案,適合比較大的資料庫,另一種是將資料庫全部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 後面接資料庫...