为了账号安全,请及时绑定邮箱和手机立即绑定

Xtrabackup安装备份还原<一>

标签:
MySQL

架构

备份IP:172.17.100.103(5.6.39)

还原IP:172.17.100.104(5.6.39)

线上备份:阿里云RDS(5.6.16)

还原IP:172.17.100.101(5.7.22)

###################################################

实验一:完成Xtrabackup的安装,以及测试环境下的备份和还原

###################################################

Xtrabackup的安装

(CentOS6)前置依赖条件

#在centos6.6和6.8的版本上直接安装会提示缺少一个依赖条件,因此需要先打上这个rpm包

wget http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el6/en/x86_64/rpmforge/RPMS/libev-4.15-1.el6.rf.x86_64.rpm

yum install -y libev-4.15-1.el6.rf.x86_64.rpm

yum安装xtrabackup

wget http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

rpm -ivh percona-release-0.1-4.noarch.rpm

yum install percona-xtrabackup-24 -y

单机备份(172.17.100.103)

#创建备份路径

mkdir -p /data/Xtrabackup

#执行备份

(innobackupex -S /tmp/mysql3306.sock -uroot -p密码 /data/Xtrabackup/)

#上面一条执行备份时出现过报错,最好指定一下参数文件

innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf  --user=root  --password=beacon /data/Xtrabackup/

#将备份拷贝到目的IP

scp -r /data/Xtrabackup/2018-06-26_09-27-15/ 172.17.100.104:/data/Xtrabackup/

单机还原(172.17.100.104)

#删除datadir下的数据文件(2台测试机没有开启binlog)

cd /usr/local/mysql/data

rm -rf *

#执行还原

innobackupex --apply-log /data/Xtrabackup/2018-06-26_09-27-15/

innobackupex --copy-back /data/Xtrabackup/2018-06-26_09-27-15/

#更改权限

chown -R mysql.mysql  /usr/local/mysql/data

遇到的问题

问题①

104的mysql没有执行关闭,直接执行的数据还原,完成之后可以登陆,也可以查看到有多少表被恢复过来,但是在执行表内容查询时,提示该表不存在

webp

并且无法用service mysqld stop去关闭mysql

#通过mysqladmin关闭mysql

mysqladmin -uroot -p shutdown

完成重启后,可以正常使用数据库

问题②

备份时报错InnoDB: File ./ib_logfile2: 'open' returned OS error 71. Cannot continue operation

解决方法:在备份时指定cnf文件

innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf  --user=root  --password=beacon /data/Xtrabackup/

###################################################

实验二:线上RDS库(5.6.16)还原到本地(5.6.39)

###################################################

下载阿里云解压脚本

wget http://oss.aliyuncs.com/aliyunecs/rds_backup_extract.sh

chmod +x rds_backup_extract.sh

将RDS的备份文件拷贝到本地

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

#执行恢复

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

#修改数据路径的权限

chown -R mysql.mysql /usr/local/mysql/data

#对数据目录(/usr/local/mysql/data)下之前解压出的backup-my.cnf进行修改,注释掉一堆RDS特有的设置

综合来说能留下的就是这3个设置

innodb_data_file_path=ibdata1:200M:autoextend

innodb_log_files_in_group=2

innodb_log_file_size=1048576000

webp

因为我本地5.6并没有按照标准规范去安装,所以这里并不像我5.7MySQL库设置得那样严谨

我直接把这3行拷贝到了/etc/my.cnf的[mysqld]下

然后用service mysqld start启动了数据库

#在RDS里创建的用户,是不会被恢复到本地的,因此采用下列方式即可完成登陆

mysql -uroot

检查确认所有库都可以打开,数据恢复完成;

根据阿里云的指导文档,在新建用户前还需要完成下面这个操作

delete from mysql.db where user<>'root' and char_length(user)>0;delete from mysql.tables_priv where user<>'root' and char_length(user)>0;flush privileges;

webp

读取mysql.user可以发现账号只有root@localhost等3个空密码的账号,对其修改密码时,出现了下图的错误

ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50518, now running 50639. Please use mysql_upgrade to fix this error.


webp

通过mysql_upgrade来解决该问题

webp

完成升级后该问题得以解决

执行完mysql_update之后关键的一步:一定要重启!!!

否则在打开performance_schema相关表的时候,仍然会有报错!!!

至此RDS(5.6)恢复到本地(5.6)完成,但是有一个遗留问题

在此次恢复过程中,只是用了apply-log,没有用copy-back就完成了恢复,那么copy-back的意义何在呢?(本机需要copy-back,异机不需要)

###################################################

实验三:线上RDS库(5.6.16)还原到本地(5.7.22)

###################################################

--------------------------------------------------------------------------------------

写在最前:阿里云RDS恢复到本地踩到的坑

在执行恢复的时候,遇到了一个gone away的报错

通过tail -f error.log可以发现是一个参数造成的恢复中断

将参数max_allowed_packet设置为与线上库相同的值后解决该问题(截图参见实验四)

在阿里云生产环境上这个值设置的是1024M

官网下载的5.7.22该值默认仅为4M(4194304Byte/1024/1024)

webp

--------------------------------------------------------------------------------------

总体来说把RDS跨版本恢复到5.7与恢复到5.6没有太多差异,相同之处直接复制实验二的字段,差异之处加粗处理

5.7.22的数据目录路径为/data/mysql/mysql3306/data

下载阿里云解压脚本

wget http://oss.aliyuncs.com/aliyunecs/rds_backup_extract.sh

chmod +x rds_backup_extract.sh

将RDS的备份文件拷贝到本地

./rds_backup_extract.sh -f hins4334903_data_20180625233726.tar.gz -C /data/mysql/mysql3306/data

把恢复到本地的backup-my.cnf中的

innodb_data_file_path=ibdata1:200M:autoextend

复制到我的defaults-file中(我本地设置的是100M

#执行恢复(生成ibdata)

innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf --apply-log /data/mysql/mysql3306/data

#修改数据路径的权限

chown -R mysql.mysql /data/mysql/mysql3306/data

#一切准备妥当,启动MySQL

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &

在另一个会话中读取error.log,可以发现如下报错

webp



作者:飞翔的麋鹿
链接:https://www.jianshu.com/p/bdc34271f21f


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 1
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消