MySQL的備份方式

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

相關文章
相關標籤/搜索