前言
腾讯云数据库(MYSQL)的备份文件都是xb
后缀文件,该文件无法直接提取内部数据,所以一般我们都需要对该文件进行解压还原之后,才能二次操作;但是这个还原流程却“并不简单”很容易出错,踩过两次坑,为此做个笔记以便后续查阅。
为节约存储空间,云数据库 MySQL 的物理备份和逻辑备份文件,都会先经过 qpress 压缩,后经过 xbstream 打包(xbstream 为 Percona 的一种打包/解包工具)进行压缩与打包。
操作环境:debian11 + aapanel + mysql5.7
,干净纯净的系统,安装了宝塔海外版本(aapanel),再使用面板安装的MySQL5.7;这个环境只是临时搭建,一般我还原成功之后就删掉。
还原教程
Ps:全程root权限操作执行
# 1.安装相关软件
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
apt update
apt install percona-xtrabackup-24 qpress -y
# 2.把自己的xb文件上传到 /root 目录,重命名为 backup.xb
# 3.创建一个临时目录
mkdir /root/data
# 4.解包文件 (无任何输出,/root/data/ 目录出现 qb 文件则成功)
xbstream -x -C /root/data/ < /root/backup.xb
# 5.解压备份文件 (最后一行出现 completed OK! 则成功 )
xtrabackup --decompress --target-dir=/root/data --remove-original
# 6.Prepare 备份文件(最后一行出现 completed OK! 则成功)
xtrabackup --prepare --target-dir=/root/data
# 7.修改配置文件,将配置里下面这些字段全部注释掉(行首加#)然后保存退出。
# innodb_checksum_algorithm
# innodb_log_checksum_algorithm
# innodb_fast_checksum
# innodb_page_size
# innodb_log_block_size
# redo_log_version
# server_uuid
# master_key_id
vi /root/backup-my.cnf
# 8.关闭面部自带的 MySql 实例进程。
systemctl stop mysqld
# 9.启动还原的MySql实例进程
#如果显示 mysqld_safe Starting mysqld daemon with databases from ... 等信息,则代表进程启动成功
#如果看到ended等字符说明启动失败,请跟踪 /var/log/syslog 查看具体的错误信息再进行排错。
mysqld_safe --defaults-file=/root/data/backup-my.cnf --user=root --datadir=/root/data --syslog &
至此,还原的MySQL实例已经启动成功,后续你就可以通过 mysql
mysqldump
等命令操作或者导出sql.gz
的备份文件,而启动的MySql实例 root 密码就是原来你在腾讯云数据库的root密码。
比如,我要导出实例里面 qzone_work 这个库的结构+数据,则执行命令:
mysqldump -uroot -p --databases qzone_work --default-character-set=utf8mb4 | gzip > ./qzone_work.sql.gz
就得到了一个压缩过的SQL文件:qzone_work.sql.gz