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数据库即可,应该会遇到报错,需要将配置文件中的一些参数注释掉,具体的报错信息在mysql的error文件中可以看到
启动报错:
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日志,在你需要的时间点附近的
利用mysqlbinlog将binlog日志转换成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上都是普通用户