Centos7 根据mysql binlog恢复RDS

版权声明:仅供学习参考 转载请标明出处。 https://blog.csdn.net/xujiamin0022016/article/details/82263011

Centos7 根据mysql binlog恢复RDS

 

任何完美的数据恢复 比不上数据备份来的实在。

做好备份  做好备份  做好备份  因为mysql binlog  自动会删除

 

数据库表被删除了怎么办 怎么恢复

先判断表是否重要

 

如果非常重要


1.停服务,挂维护页面。保证数据一致性
2.找一个新的数据库。同时,对故障库进行备份
3.恢复前日备份。恢复完毕后。 scp binglog过来。
4.获取备份bin位置。获取故障前一刻 binlog位置。追 binlog

5.启动。测试。
6.对外,启动服务
7.再次备份。

 

如果不重要

1.创建新表

 

 

恢复的具体思路如下

先将全量备份的文件 恢复到数据库,然后通过binlog将剩下丢失的数据,补上。

 

我这边用的是中信云 (阿里云的阉割版)  不能回滚,而且备份出来的文件不能再源库恢复(解释是阿里的架构导致),所以只能重新搭一个数据库,正常的应该是不需要的,然后将binlog恢复。

建议mysql版本和RDS一致,mysql5.6需要用到Percona XtraBackup 2.3.5

mysql5.7应该需要用到Percona XtraBackup 2.4 

 

安装mysql

#yum删除已安装的mysql依赖----------------------------------------------------------------------。

yum -y remove mysql-libs.x86_64

yum -y remove mysql-*

yum -y remove mysql-community-*

yum -y install libaio

 

 

 

cd /tmp

wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm

rpm -ivh mysql-community-release-el6-5.noarch.rpm

yum repolist all | grep mysql

yum install mysql-community-server –y

service mysqld start

mysql_secure_installation;

 

首次登陆的话   如果提示输入密码 直接按确认  会提示你是否重置密码  直接重置就好了

 

 

 

下载脚本 和Percona XtraBackup 2.3.5

 

 

安装Percona XtraBackup 2.3.5

我这边centos7直接

cd /tmp

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.5/binary/redhat/7/x86_64/percona-xtrabackup-2.3.5-1.el7.x86_64.rpm

yum localinstall percona-xtrabackup-2.3.5-1.el7.x86_64.rpm

 

如果安装过程中报.error Requires:libev.so.4

wget  ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/libev-4.15-1.el6.rf.x86_64.rpm

rpm –ivh libev-4.15-1.el6.rf.x86_64.rpm

 

正常情况安装完

 

把数据库备份文件重命名成tar.gz  脚本中只识别tar.gz

mv hins4732247_data_20180830043140.tar  hins4732247_data_20180830043140.tar.gz 

mkdir –p /usr/local/mysql/data

 

bash rds_backup_extract.sh -f hins4732247_data_20180830043140.tar.gz  -C /usr/local/mysql/data

会解压出一堆数据库 和文件 但是数据库里面暂时是没有数据的

 

ls -l /usr/local/mysql/data

 

innobackupex --defaults-file/usr/local/mysql/data/backup-my.cnf --apply-log /usr/local/mysql/data

 

 

 

 

 

 

如果恢复的位置不对 覆盖到原本的配置文件  直接service mysqld restart 或者用systemctl启动 会报错

 

修改backup-my.cnf

# This MySQL options file was generated by innobackupex.

 

# The MySQL server

[mysqld]

innodb_checksum_algorithm=innodb

#innodb_log_checksum_algorithm=innodb

innodb_data_file_path=ibdata1:200M:autoextend

innodb_log_files_in_group=2

innodb_log_file_size=1572864000

#innodb_fast_checksum=false

#innodb_page_size=16384

#innodb_log_block_size=512

innodb_undo_directory=.

innodb_undo_tablespaces=0

 

 

#rds_encrypt_data=false

#innodb_encrypt_algorithm=aes_128_ecb

 

mysqld_safe --defaults-file=/usr/local/mysql/data/backup-my.cnf --user=mysql --datadir=/usr/local/mysql/data &

就可以启动mysql了

 

启动mysql 之后执行mysql_upgrade 修复用户丢失的问题

mysql_upgrade

 

 

 

Binlog 恢复

然后就开始一条条  慢慢恢复数据的过程了

 

 

 

mysqlbinlog --skip-gtids=true --stop-datetime="2018-08-30 11:30:00" /tmp/binlog/mysql-bin.000350 | mysql -u root

mysqlbinlog --skip-gtids=true --start-datetime="2018-08-30 11:30:00" --stop-datetime="2018-08-30 12:00:00" /tmp/binlog/mysql-bin.000350 | mysql -u root

mysqlbinlog --skip-gtids=true --start-datetime="2018-08-30 12:00:00" --stop-datetime="2018-08-30 12:10:00" /tmp/binlog/mysql-bin.000350 | mysql -u root

mysqlbinlog --skip-gtids=true --start-datetime="2018-08-30 12:10:00" --stop-datetime="2018-08-30 12:20:00" /tmp/binlog/mysql-bin.000350 | mysql -u root

mysqlbinlog --skip-gtids=true --start-datetime="2018-08-30 12:20:00" --stop-datetime="2018-08-30 12:25:00" /tmp/binlog/mysql-bin.000350 | mysql -u root

mysqlbinlog --skip-gtids=true --start-datetime="2018-08-30 12:25:00" --stop-datetime="2018-08-30 12:27:00" /tmp/binlog/mysql-bin.000350 | mysql -u root

mysqlbinlog --skip-gtids=true --start-datetime="2018-08-30 12:27:00" --stop-datetime="2018-08-30 12:27:30" /tmp/binlog/mysql-bin.000350 | mysql -u root

mysqlbinlog --skip-gtids=true --start-datetime="2018-08-30 12:27:30" --stop-datetime="2018-08-30 12:28:00" /tmp/binlog/mysql-bin.000350 | mysql -u root

 

mysqlbinlog --skip-gtids=true --start-datetime="2018-08-30 12:28:00" --stop-datetime="2018-08-30 12:28:30" /tmp/binlog/mysql-bin.000350 | mysql -u root

 

 

 

 

 

 

参考

https://help.aliyun.com/knowledge_detail/41817.html

https://www.percona.com/doc/percona-xtrabackup/2.2/index.html?spm=a2c4g.11186623.2.5.3f4d5cf8Nd9SnP

https://help.aliyun.com/knowledge_detail/41817.html

https://www.percona.com/doc/percona-xtrabackup/2.3/installation/yum_repo.html

猜你喜欢

转载自blog.csdn.net/xujiamin0022016/article/details/82263011