Rds Mysql Recover
腾讯云RDS数据库恢复
环境准备
安装过程遇到报错
去下载这个包 perl-DBD-MySQL-4.023-6.el7.x86_64 安装上即可,
如果有冲突的就需要 rpm -qa |grep mysql 找到关于mysql 的包全部卸载了
数据恢复
将腾讯云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
Prepare 备份文件
备份解压出来之后,执行命令进行apply log 操作
xtrabackup --prepare --target-dir=/data/mysql
修改配置文件
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
修改文件属性
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 的,需要安装二进制的
如果有报错,可以看输出的日志进行解决
cat /data/mysql/i-h01fyi82.err 查看日志是否有错误
登录mysql
./mysql -uroot -p
# 输入之前的用户密码即可登录
mysql 忘记root 密码
因为root 用户不能在本地登录,登录其他账号提示
#修改 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
恢复数据
./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