備份和恢復:
邏輯備份: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