MySQL的備份方式

備份和恢復:

邏輯備份:mysqldump, mydumper, phpMyAdmin


Schema和數據存儲一起、巨大的SQL語句、單個巨大的備份文件


mysqldump: 客戶端,通過mysql協議連接至mysqld; 建議使用較小的數據集,不建議使用較大的備份數據集。

mysqldump [options] [db_name [tbl_name ...]]

備份的數據集

-A, --all-databases  #備份所有數據庫

-B db_name,... #備份指定的數據庫

--databases db_name,...

-x, --lock-all-tables:鎖定所有庫的所有表,建議備份所有庫使用;

-l, --lock-tables:對於每個單獨的數據庫,在啓動備份前鎖定其所有表,建議備份指定庫使用;

--single-transaction:啓動一個大的單一事務實現備份

shell> mysqldump [options] db_name [tbl_name ...] #備份單個庫,或庫指定的一個或多個表

shell> mysqldump [options] --databases db_name ...

shell> mysqldump [options] --all-databases

shell># mysqldump -uroot --databases test zabbix > /root/test.sql   #備份數據庫命令

shell># mysql < heoll.sql   #執行恢復操作。


MyISAM:支持溫備:鎖定備份庫,而後啓動備份操作;

MyISAM, InnoDB: 溫備

-x, --lock-all-tables:鎖定所有表

-l, --lock-tables:鎖定備份的表


InnoDB:支持熱備

--single-transaction:啓動一個大的單一事務實現備份


-B, --databases db_name1 db_name2 ...:備份指定的數據庫


-C, --compress:壓縮傳輸;


命令的語法格式:

mysqldump [OPTIONS] database [tables]:備份單個庫,或庫指定的一個或多個表

mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]:備份一個或多個庫

mysqldump [OPTIONS] --all-databases [OPTIONS]:備份所有庫



其它選項:


-E, --events:備份指定數據庫相關的事件調度器,event,scheduler;

-R, --routines:備份指定數據庫相關的所有存儲過程和存儲函數;

--triggers:備份表相關的觸發器;



--master-data[=#]:value

shell> mysqldump --all-databases --master-data=2 > all_databases.sql

shell> mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql

shell> mysqldump -uroot --all-databases --lock-all-tables --master-data=2 > /root/all.sql

1:記錄CHANGE MASTER TO語句;此語句不被註釋;

2:記錄爲註釋語句;


--flush-logs, -F:鎖定表之後執行flush logs命令; #二進制日誌滾動操作

二進制日誌恢復數據,通過二進制日誌進行時間點還原。

# mysqlbinlog --start-position=245 /var/lib/mysql/mysql-bin.000001

# mysqlbinlog --start-position=245 /var/lib/mysql/mysql-bin.000001 > incre.sql

mysql -hHOST -u USER -p PASSWORD < incre.sql  #將備份的二進制文件導入至mysql中


注意:二進制日誌文件與數據文件不應該放置於同一磁盤;


物理備份:數據文件的時間一致性?

冷備:

幾乎熱備:lvm2快照


1、請求鎖定所有表:

mysql> FLUSH TABLES WITH READ LOCK;


2、記錄二進制日誌文件及事件位置:

mysql> FHULS LOGS;

mysql> SHOW MASTER STATUS;

shell# mysql -e 'SHOW MASTER STATUS' > /root/pos-`date +%F>` 


3、創建快照:

lvcreate -L SIZE -s -p r -n NAME(卷名) /dev/VG_NAME/LV_NAME


4、釋放鎖:

mysql> UNLOCK TABLES


5、掛載快照卷,複製數據進行備份;

cp, rsync, tar等命令複製數據;


6、備份完成之後,刪除快照卷;


7、制定好策略,通過原卷備份二進制日誌;

兩種備份和恢復方式:

mysqldump,lvm2+cp(tar)


        mysqldump做的備份,數據還原時,是否會產生二進制日誌?

mysql> SET SESSION sql_log_bin=0;

mysql> SOURCE /path/from/somefile.sql;

mysql> SET SESSION sql_log_bin=1;


Xtrabackup:

percona, www.percona.com #MySQL諮詢公司

Percona Server爲 MySQL 數據庫服務器進行了改進,在功能和性能上較 MySQL 有着很顯著的提升

innobackupex: 客戶端工具, 以mysql協議連入mysqld,不支持離線備份

增量備份命令:# innobackupex --incremental /backups/ --incremental-basedir=/backups/2019-2-17/  


--user=

--password=


# innobackupex --apply-log /backups/2019-2-17    #數據還原的整理完全備份命令。

# innobackupex --apply-log --redo-only /backups/2019-02-27_13-53-43/ #數據還原的整理完全備份命令。

# innobackupex --apply-log --redo-only /backups/2019-02-27_13-53-43/ --incremental-dir=/backups/2019-2-17/ #整理增量備份命令

上述操作將增量備份合併的完全被上,這時可以通過上述備份進行數據恢復。

# innobackupex --apply-log --export /backups/2019-2-17/    #執行導出某張表。

# innobackupex  --copy-back  /backups/2019-2-17  #數據還原命令,使用backup下的所有內容進行數據恢復。

完整備份策略:完整備份 + 增量備份 + 二進制日誌


注意:

1、將數據和二進制文件放置於不同的設備;二進制日誌也應該週期性地備份;

2、將數據和備份分開存放,建議不在同一設備、同一主機、同一機房、同一地域;

3、每次災難恢復後都應該立即做一次完全備份;

4、備份後的數據應該週期性地做還原測試;

從備份中恢復應該遵循的步驟:

1、停止MySQL服務器;

2、記錄服務器配置和文件權限;

3、將備份恢復到MySQL數據目錄;此步驟依賴具體的備份工具;

4、改變配置和文件權限;

5、以限制方式啓動MySQL服務器:比如通過網絡訪問;

[mysqld]

skip-networking 

socket=/tmp/mysql-recovery.sock

6、載入額外的邏輯備份;而檢查和重放二進制日誌;

7、檢查已經還原的數據;

8、以完全訪問模式重啓服務器;


其它的備份工具:

SELECT ... INTO OUTFILE ''

LOAD FILE 


mylvmbackup


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