RDS MySQL物理备份文件恢复到自建数据库
可以参考阿里云官方教程:https://help.aliyun.com/knowledge_detail/41817.html
故障产生过程:
公司使用的阿里云版的mysql数据库,在线上数据库中错将订单表的会员编号批量改为了0或1。导致数据错乱。
好在阿里云自动将数据每天进行一次备份。
准备工作:
1:自己准备一个linux服务器,我用的是自己购买的阿里云服务器
2:通过阿里云后台,将RDS Mysql物理备份下载下来。最终得到的是一个XXXXXX_qp.xb 文件
3: 本文以自定义路径/home/mysql/data为例,您可以根据实际情况将其替换成实际路径。
innobackupex解压命令需要安装qpress,您可以前往QuickLZ网站,下载qpress工具,然后使用如下命令安装:
tar xvf qpress-11-linux-x64.tar
chmod 775 qpress
cp qpress /usr/bin
4:执行以下命令:
cat <数据备份文件名>_qp.xb | xbstream -x -v -C /home/mysql/data
5: 解压 备份文件,解压成功后 /home/mysql/data目录会有很多文件(文件夹对应数据库名称,后缀.ibd文件对应每张表)
xtrabackup --decompress --remove-original --target-dir=/home/mysql/data
将解压的文件全部赋予mysql的权限
chown -R mysql:mysql /home/mysql/data
6:安装mysql8.0 (我用的是物理安装,非docker安装),具体安装步骤自己去找其他文章进行参考,安装的mysql版本要跟阿里云的mysql版本保持一致,mysql安装完之后默认数据存放路径是:/var/lib/mysql。
7:重要的一个步骤
先停止mysql服务
systemctl stop mysqld
然后将路径:/var/lib/mysql/ 下的所有文件删除
8:
MySQL 8.0版本需要安装 Percona XtraBackup 8.0,安装指导请参见官方文档Percona XtraBackup 8.0
将解压的备份文件恢复到自己安装的mysql数据存放路径下, 执行以下命令:
xtrabackup --prepare --target-dir=/home/mysql/data
xtrabackup --datadir=/var/lib/mysql --copy-back --target-dir=/home/mysql/data
9: 启动mysql
systemctl start mysqld
启动mysql的时候会有各种原因无法启动。
我当时无法启动的原因查了之后是在/etc/my.cnf里面增加这句:
lower_case_table_names = 1
10: 重新登录自己的安装的mysql。
主机:你刚才安装mysql的自己的服务器公网ip
端口:你公司线上数据库的端口
账号:你公司线上数据库的账号
密码:你公司线上数据库的密码
没错,数据恢复后,账号密码都已经变成那个备份的数据库的登陆账号密码,和端口了
登陆成功之后就可以进行各种数据操作拉。