前言
从线上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