xtrabackup物理備份
- 對Mysql數據庫進行備份,邏輯備份或工具傳輸可能會遇到查詢超時等各種問題。使用xtrabackup進行物理備份,且是熱備份。第一步進行熱備份:
## 下面腳本是使用qpress進行壓縮版本的產生qp壓縮文件,降低備份大小。xbstream解壓后出現的都是qp壓縮文件。qpress壓縮是默認的壓縮工具。
xtrabackup --defaults-file=/home/mysql/mysql_571/conf/mysql571.cnf --backup
--target-dir=/home/mysql/ --user=root --password=root
--host 192.168.0.1 --port 3306 --parallel=10
--compress-chunk-size=1024K --kill-long-query-type=select --kill-long-queries-timeout=15 --ftwrl-wait-query-type=update --ftwrl-wait-timeout=30 --ftwrl-wait-threshold=10
--slave-info --stream=xbstream --compress --compress-threads=10 > mysql571.tar.gz
## 下面的是非壓縮版本,解壓xbstream后直接就是數據庫文件
xtrabackup --defaults-file=/home/mysql/mysql_571/conf/mysql571.cnf --backup
--target-dir=/home/mysql/ --user='root' --password='root'
--host 192.168.0.1 --port 23306 --parallel=10
--compress-chunk-size=1024K --kill-long-query-type=select --kill-long-queries-timeout=15 --ftwrl-wait-query-type=update --ftwrl-wait-timeout=30 --ftwrl-wait-threshold=10 --slave-info --compress-threads=10 > mysql571.tar.gz
- 備份時長與數據庫大小相關:一般500G以內在10-20分鍾,大於1T可能需要花費30分鍾以上。
- 第2步拿熱備份文件傳到目標主機上,准備進行恢復。
xtrabackup恢復
- 由於我們的物理備份是個壓縮文件,所以第1步需要解壓縮:
//需要xbstream命令,表示從aaa.stream備份文件解壓到/backup/tmp目錄下
xbstream --parallel=10 -xv < /data/mysql/aaa.xbstream -C /data/mysql/backup/tmp
//如果備份的時候使用了qpress進行壓縮,則需要進一步解壓縮qp文件,使用如下命令:
//注意它依賴qpress命令,可能需要單獨安裝
xtrabackup --decompress --remove-original --parallel=10 --target-dir=/data/mysql/backup/tmp
- 第2步將備份過程中的事務等熱信息進行prepare:
xtrabackup --prepare --parallel=10 --target-dir=/data/mysql/backup/tmp
- 第3步將備份文件恢復到目標地址:
- 注意這一步驟恢復到目標地址,要求恢復目標數據庫是停運狀態,且目標地址的data,redolog,undolog,binlog都是空的才行。否則下面恢復會提示。
//如果是這個備份要恢復好幾個mysql,則可以采用copy-back將復制到目標地址:
xtrabackup --defaults-file=/home/mysql/conf/my.cnf --copy-back --parallel=10 --target-dir=/home/mysql/backup/tmp
//如果是一次性恢復,可以采用--move-back,將tmp下准備好的備份文件移到目標地址
xtrabackup --defaults-file=/data/mysql/conf/my.cnf --move-back --parallel=10 --target-dir=/data/mysql/backup/tmp
- 恢復時長與數據庫大小相關。大庫第1步解壓縮耗時較多,第3步恢復目標耗時較多。一般500G數據庫,恢復到這邊耗時也在10-20分鍾。
- 第4步,恢復完成后即可啟動目標數據庫。啟動后目標數據庫將於原備份數據庫,用戶密碼權限完全一致。
//恢復完成后,在data目錄中會有xtrabackup_info的恢復信息。可以用次信息進行主從搭建。
$ cat ../data/xtrabackup_info
uuid = ac94c92b-4e92-11ec-9ec8-fa163e09fc56
name =
tool_name = xtrabackup
tool_command = --defaults-file=/home/mysql/mysql_571/conf/mysql571.cnf --backup --target-dir=/home/mysql/ --user=root --password=... --host 192.168.0.1 --port 20001 --parallel=10 --compress-chunk-size=1024K --kill-long-query-type=select --kill-long-queries-timeout=15 --ftwrl-wait-query-type=update --ftwrl-wait-timeout=30 --ftwrl-wait-threshold=10 --slave-info --stream=xbstream
tool_version = 2.4.12
ibbackup_version = 2.4.12
server_version = 5.7.21
start_time = 2021-11-26 16:01:07
end_time = 2021-11-26 16:27:20
lock_time = 0
binlog_pos = filename 'mysql-bin.000127', position '514519689', GTID of the last change 'e8c1933c-f9bd-11e8-88c2-fa163e09fc56:1-30042640'
innodb_from_lsn = 0
innodb_to_lsn = 77942856651
partial = N
incremental = N
format = xbstream
compact = N
compressed = N
encrypted = N
Mysql主從搭建
- 上面備份恢復完成后,將得到1個與源庫數據一致的數據庫,這倆可以搭建主從同步,也可以再恢復1個數據庫搭建1主2從多從的架構。
- 第1步驟,編寫主從同步語句在mysql命令行中運行。如果原庫沒有主從信息,則只需要將從庫指向主庫進行同步即可。
//直接指定主庫進行同步
CHANGE MASTER TO
MASTER_HOST='192.168.0.1',
MASTER_USER='root',
MASTER_PASSWORD='root',
MASTER_PORT=3306,
master_auto_position=1;
//開啟從主庫同步
start slave
//查看主從同步狀態。主要看master_host對不對,Slave_IO_running是否yes,Slave_SQL_running是否為yes
show slave status\G;
- 第1步中如果原庫已經有過主從配置,恢復過來的時候也會有主從信息,需要先刪除原來的主從配置,再配置主從:
//將停止原來的關系,清除原來的主從關系。
stop slave;
reset slave all;
//如果需要重置GTID,則運行如下語句,GITD段來源於上面備份文件的xtrabackup_info中:
SET GLOBAL gtid_purged='e8c1933c-f9bd-11e8-88c2-fa163e09fc56:1-30042640';
- 第2步,如果從庫需要做讀節點,主庫做讀寫節點,則可以給從庫做只讀配置:
set global read_only=on;