RDS数据恢复至本地

背景:

虽然阿里云是靠谱的,但是数据容灾该做还是要做的,数据不在自己的手里总感觉没什么安全感。而且,阿里云索取慢sql是要收费的,公司运营部门隔一段时间还要统计一些数据,统计数据的SQL相当复杂,严重影响生产库的性能,所以在公司本地搭建从库

第1章 恢复全备

在阿里云控制台复制备份的下载地址并下载到本地

wget –c ‘下载地址’–O rds.tar.gz

tar xf rds.tar.gz

验证是否安装了恢复工具:

yum install Percona-XtraBackup

chown –R mysql.mysql /application/msyql/data

利用xtrabackup工具恢复

恢复之前注释掉配置中的一些参数避免报错:

[mysql]

#innodb_fast_checksum=false

#innodb_page_size=16384

#innodb_log_block_size=512

 

innobackupex --defaults-file=/application/mysql/data/backup-my.cnf --apply-log /application/mysql/data

数据量较大的恢复时间比较长

启动mysql数据库即可,应该会遇到报错,需要将配置文件中的一些参数注释掉,具体的报错信息在mysqlerror文件中可以看到

启动报错:

cat jhkj66.err 

/application/mysql-5.6.40/bin/mysqld: File '/var/mysql/slave-binlog.index' not found (Errcode: 13 - Permission denied)

2018-09-03 19:30:52 6645 [ERROR] Aborting

这应该是mysql那个文件夹权限不是mysql造成的

-rw-r--r-- 1 root  root 1048576000 9   4 22:05 ib_logfile0

-rw-r--r-- 1 root  root 1048576000 9   4 22:05 ib_logfile1

[root@jhkj66 data]# chown -R mysql.mysql ib*

 

登录数据库:

我这里用生产库上的用户直接登录就好了,用户是存在的

 

第2章 基于时间点恢复数据

查看binlog日志应该开始的位置;

cat xtrabackup_binlog_info

mysql-bin.000600        231393319      56613f39-b86a-11e6-8566-6c92bf2c161d:1-10936168,

717b9f69-5f5f-11e5-bb6f-288023a1a6a8:1-6497801,

71f7d9dd-b86a-11e6-8567-40a8f01e5d38:1-1639034,

8304837d-5f5f-11e5-bb6f-288023a1a804:1-69709,

b4fc1b00-73a2-11e7-8a3b-7cd30ac4ea32:1-244515043

在阿里云下载binlog日志,在你需要的时间点附近的

利用mysqlbinlogbinlog日志转换成SQL文件,然后导入:

这里应该要提前注释掉配置文件中的一个参数,不然使用mysqlbinlog的时候回报错

[client]

#default-character-set = utf8

将此参数注释掉,因为mysqlbinlog命令不会识别

[root@jhkj66 rds-bak]# mysqlbinlog mysql-bin.000622 mysql-bin.000623 mysql-bin.000624 mysql-bin.000625 mysql-bin.000626 mysql-bin.000627 --start-position=34233808 --stop-date="2018-09-04 08:04:13" |mysql -uroot -pjhkj -h127.0.0.1

Warning: Warning: Using a password on the command line interface can be insecure.

Using unique option prefix stop-date instead of stop-datetime is deprecated and will be removed in a future release. Please use the full name instead.

这里应该使用root用户,使用rds上的用户,是没有导入SQL文件的权限的,反正我的rds上都是普通用户