Rds Mysql Recover

腾讯云RDS数据库恢复

环境准备

安装过程遇到报错

image-20220323230641265

去下载这个包 perl-DBD-MySQL-4.023-6.el7.x86_64  安装上即可,
如果有冲突的就需要 rpm -qa |grep mysql 找到关于mysql 的包全部卸载了

image-20220323231320311

数据恢复

将腾讯云rds 的备份与mysqlbinlog 下载到本地
解压备份文件

使用xbstream 将数据文件解压到/data/mysql 目录

xbstream -x --parallel=2  -C /data/mysql < /data/*****.xb
解压备份软件

下载安装qpress

wget -d --user-agent="Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0" http://www.quicklz.com/qpress-11-linux-x64.tar

tar -xf qpress-11-linux-x64.tar -C /usr/local/bin 
source /etc/profile

使用命令将目标目录下所有以.qb 结尾的文件解压出来

xtrabackup --decompress --target-dir=/data/mysql

image-20220324001503385

Prepare 备份文件

备份解压出来之后,执行命令进行apply log 操作

xtrabackup --prepare  --target-dir=/data/mysql

image-20220324001616130

修改配置文件

vi /data/mysql/backup-my.cnf
- innodb_checksum_algorithm
- innodb_log_checksum_algorithm
- innodb_fast_checksum
- innodb_page_size
- innodb_log_block_size
- redo_log_version

# mysql 8.0 不添加此参数启动会报错,根据情况,初始配置有的是0 有些是1 ,根据报错修改
lower_case_table_names=1  

image-20220324003236403

修改文件属性

chown -R mysql:mysql /data/mysql

启动 mysqld 进程并登录验证

mysqld_safe --defaults-file=/data/mysql/backup-my.cnf --user=mysql --datadir=/data/mysql &
# 备注,mysql 8.0 之后rpm 安装的是没有mysqld_safe 的,需要安装二进制的

image-20220324002227501

如果有报错,可以看输出的日志进行解决

 cat /data/mysql/i-h01fyi82.err 查看日志是否有错误
登录mysql
 ./mysql -uroot -p 
 # 输入之前的用户密码即可登录

image-20220324003505581

mysql 忘记root 密码

因为root 用户不能在本地登录,登录其他账号提示

image-20220325223911007

#修改  vi /data/mysql/backup-my.cnf 
skip-grant-tables   ##忽略mysql权限问题,直接登录 

# 重新启动
mysqld_safe --defaults-file=/data/mysql/backup-my.cnf --user=mysql --datadir=/data/mysql &
# 直接登录
mysql -utester -p  回车即可
use mysql 
ALTER USER 'root'@'%' IDENTIFIED BY '123456';   # 修改用户名与密码
flush privileges;

#如果是tcp6 连接的导致客户端连接不上
# vi /data/mysql/backup-my.cnf 
bind-address=0.0.0.0   # 添加
#重启

mysqlbinlog 恢复

查看mysqlbinlog
./mysqlbinlog  /opt/binlog_mysqlbin.000054 |  less 
# 查看mysqlbinlog 选择要恢复的时间节点或者at 

image-20220324142723100

恢复数据
./mysqlbinlog  --stop-position=132281014 /opt/binlog_mysqlbin.000054  |   /opt/mysql-8.0.27-el7-x86_64/bin/mysql -uroot   -p 
# 提示
ERROR 1227 (42000) at line 3: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN, SESSION_VARIABLES_ADMIN or REPLICATION_APPLIER privilege(s) for this operation

解决方法
use mysql 
update user set Super_priv='Y' where User='root';
flush privileges;
命令行需要断开重新连接一下

# 再次执行恢复
ERROR 1781 (HY000) at line 24: @@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF. 

解决
show global variables like 'gtid_mode';
set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
show global variables like 'gtid_mode';

##执行恢复
1. 首先备份的数据是3.22 00点备份的, mysqlbinlog 有2个备份,
    第一个, mysqlbinlog 的恢复要从3月22日0:00 到第一个mysqlbinlog 备份到3月22日时间节点的结束,
    第二个,mysqlbinlog 恢复从到开始时间到3月22日12点结束  
#mysqlbinlog 也可以根据时间节点来恢复
--start-datetime & --stop-datetime 解析某一个时间段内的 binlog
--start-position & --stop-position 解析在两个 position 之间的 binlog
mysqlbinlog 恢复
#第一个binlog 的恢复基于at 的恢复
./mysqlbinlog --start-position=143071637          --stop-position=301237997  /opt/binlog_mysqlbin.000053  |/opt/mysql-8.0.27-el7-x86_64/bin/mysql -u root -p

# 第二个binlog 的恢复 恢复到at 132284243
./mysqlbinlog  --stop-position=132284243    /opt/binlog_mysqlbin.000054  | /opt/mysql-8.0.27-el7-x86_64/bin/mysql -uroot -p

验证数据完整性

comments powered by Disqus