備份和恢復:php
邏輯備份:mysqldump, mydumper, phpMyAdminmysql
Schema和數據存儲一塊兒、巨大的SQL語句、單個巨大的備份文件sql
mysqldump: 客戶端,經過mysql協議鏈接至mysqld; 建議使用較小的數據集,不建議使用較大的備份數據集。shell
mysqldump [options] [db_name [tbl_name ...]]數據庫
備份的數據集服務器
-A, --all-databases #備份全部數據庫網絡
-B db_name,... #備份指定的數據庫app
--databases db_name,...socket
-x, --lock-all-tables:鎖定全部庫的全部表,建議備份全部庫使用;ide
-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快照
一、請求鎖定全部表:
mysql> FLUSH TABLES WITH READ LOCK;
二、記錄二進制日誌文件及事件位置:
mysql> FHULS LOGS;
mysql> SHOW MASTER STATUS;
shell# mysql -e 'SHOW MASTER STATUS' > /root/pos-`date +%F>`
三、建立快照:
lvcreate -L SIZE -s -p r -n NAME(卷名) /dev/VG_NAME/LV_NAME
四、釋放鎖:
mysql> UNLOCK TABLES
五、掛載快照卷,複製數據進行備份;
cp, rsync, tar等命令複製數據;
六、備份完成以後,刪除快照卷;
七、制定好策略,經過原卷備份二進制日誌;
兩種備份和恢復方式:
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下的全部內容進行數據恢復。
完整備份策略:完整備份 + 增量備份 + 二進制日誌
注意:
一、將數據和二進制文件放置於不一樣的設備;二進制日誌也應該週期性地備份;
二、將數據和備份分開存放,建議不在同一設備、同一主機、同一機房、同一地域;
三、每次災難恢復後都應該當即作一次徹底備份;
四、備份後的數據應該週期性地作還原測試;
從備份中恢復應該遵循的步驟:
一、中止MySQL服務器;
二、記錄服務器配置和文件權限;
三、將備份恢復到MySQL數據目錄;此步驟依賴具體的備份工具;
四、改變配置和文件權限;
五、以限制方式啓動MySQL服務器:好比經過網絡訪問;
[mysqld]
skip-networking
socket=/tmp/mysql-recovery.sock
六、載入額外的邏輯備份;而檢查和重放二進制日誌;
七、檢查已經還原的數據;
八、以徹底訪問模式重啓服務器;
其它的備份工具:
SELECT ... INTO OUTFILE ''
LOAD FILE
mylvmbackup