使用Xtrabackup恢復以.xb結尾的資料備份
前言
從線上sql server備份的資料檔案是以.xb結尾的.
想要在本地恢復到mysql中,xb結尾的資料還只能在linux系統中恢復,
所以用xshell連線公司本地的linux電腦,
安裝mysql,嘗試了線上安裝(網速早上好,其他時間段幾kb/s...emmmm)
後面到https://dev.mysql.com/downloads/mysql/5.7.html#downloads
下載mysql 5.7版本;
ftp上傳到伺服器中,
解壓:tar xvf FileName.tar
依次安裝:
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm
啟動mysql服務:server mysqld start
但是5.7版本以後會有預設密碼,可以通過:
cat /var/log/mysqld.log |grep password
檢視.
而且如果想要遠端連線,還得設定一下:
先進入mysql
mysql -uroot -p use mysql; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
就可以了.
但是我自己本地用,就偷下懶.
vim /etc/my.cnf
在空白行加上一句:skip-grant-tables(跳過驗證)
這樣就可以連線linux下的mysql了;
下一步,想要恢復資料庫,要得要下載安裝xtrabackup
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm rpm -qa |grep xtrabackup
ps:5.7版本得安裝24版的xtrabackup
準備恢復資料啦!
目前物理備份集檔案有3種格式:
- tar 壓縮包 (.tar.gz 字尾)
- xbstream 壓縮包 (.xb.gz 字尾)
- xbstream 檔案包(_qp.xb 字尾)
對於tar 壓縮包 (.tar.gz 字尾),使用命令:
tar -izxvf <資料備份檔名>.tar.gz -C /home/mysql/data
對於xbstream 壓縮包 (.xb.gz 字尾),使用命令:
gzip -d -c <資料備份檔名>.xb.gz | xbstream -x -v -C /home/mysql/data
對於xbstream 檔案包(_qp.xb 字尾),使用命令:
解包
cat <資料備份檔名>_qp.xb | xbstream -x -v -C /home/mysql/data
MySQL 5.6/5.7解壓
innobackupex --decompress --remove-original /home/mysql/data
MySQL 8.0解壓
xtrabackup --decompress --remove-original --target-dir=/home/mysql/data
執行如下命令,恢復解壓好的備份檔案。
MySQL 5.6/5.7
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
MySQL 8.0
xtrabackup --prepare --target-dir=/home/mysql/data xtrabackup --datadir=/var/lib/mysql --copy-back --target-dir=/home/mysql/data
為避免版本問題,需修改backup-my.cnf引數,具體操作步驟如下。
執行如下命令,以文字方式編輯backup-my.cnf檔案。
vi /home/mysql/data/backup-my.cnf
自建資料庫不支援如下引數,需要註釋掉。
#innodb_log_checksum_algorithm #innodb_fast_checksum #innodb_log_block_size #innodb_doublewrite_file #rds_encrypt_data #innodb_encrypt_algorithm #redo_log_version #master_key_id #server_uuid
還有可能遇到一個問題是 出現什麼log長度不一致,
只要把當前資料夾下報錯的log rm -rf xxxx 即可;
但還有可能遇到一個問題:解包並執行恢復後,重啟mysql報了一個錯誤
百度了半天,終於解決了;
chmod -R 777 /var/lib/mysql
對資料夾提權
然後再次重啟就搞定啦!
補充:
解包: xbstream -x -C ./ < ./cdb245337_backup_20200630000254.xb xtrabackup --decompress --target-dir=./ xtrabackup --prepare --target-dir=./ innobackupex --defaults-file=/mysql/data/backup-my.cnf --apply-log ./ chmod -R 777 /var/lib/mysql systemctl start mysqld