随着业务变化与时间的推移,我们租用在阿里云的RDS数据也不断增长。阿里云提供了非常稳定而高效的数据备份机制(备份一次仅仅耗时1s)。数据却是备份了,但是恢复却耗费了精力,今天专门针对阿里云官方提供的帮助文档 - DS备份文件恢复到自建数据库进行实际操作与研究,虽然结果是美好的,但是这中间的过程却坡坡坎坎、“委婉而曲折”。下面总结下自己实际的操作过程与心得,以为遇到类似问题的同伴提供一些有效的帮助。
操作系统: OS X 10.10.4
服务器环境:CentOS 6.5
终端工具:iTerm (Mac)
数据压缩解压工具:rds_backup_extract (仅仅适用RDS)
数据库恢复工具:Percona XtraBackup 2.2 Release 2.2.12
本地数据库环境:Server version: 5.6.21-log MySQL Community Server (GPL)
生产数据库环境:MySQL5.5
备份文件请按照文档中给出的流程操作
按照它提供的官方文档 RDS备份文件恢复到自建数据库,直接下载文中提到的地址即可:有个警告提示就是,不要在终端中直接wget该地址(wget注意)。我尝试了很久都没有能下载到本地。
官方文档中提供的版本是2.2.9,不过我是用的最新版本2.2.12 (强迫症)。不要去搜索网上很多安装资料,如果中文的,英文的,baidu的, google的。直接在官方下载Percona XtraBackup安装,官方也提供了安装指南(https://www.percona.com/doc/percona-xtrabackup/2.2/installation/yum_repo.html)。我也搜索了很多安装信息,但是大多版本,系统环境不一致,所以小心坑。
文档中给出的命令是这个
sh rds_backup_extract -f /home/mysql/backup/hins575175_xtra_20150429091224.tar.gz -C /home/mysql/data
实际操作时,可能环境不同,操作的命令和方式不同。我实际操作的命令是
sh rds_backup_extract.sh -f /alidata/www/databases_backups/hins651261_xtra_20150814021723.tar.gz -C /alidata/www/databases_backups/20150814
心酸的要来了,文中提到的一个还原命令
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
却让我摸不着头脑啊。我执行了命令,一直报错:
[vagrant@localhost ~]$ sudo innobackupex --defaults-file=/alidata/www/databases_backups/20150814/backup-my.cnf --apply-log /alidata/www/databases_backups/20150814/ InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy and Percona LLC and/or its affiliates 2009-2013. All Rights Reserved. This software is published under the GNU GENERAL PUBLIC LICENSE Version 2, June 1991. Get the latest version of Percona XtraBackup, documentation, and help resources: http://www.percona.com/xb/p150814 08:55:39 innobackupex: Starting the apply-log operation IMPORTANT: Please check that the apply-log run completes successfully. At the end of a successful apply-log run innobackupex prints "completed OK!". Warning: World-writable config file '/alidata/www/databases_backups/20150814/backup-my.cnf' is ignored innobackupex: got a fatal error with the following stacktrace: at /usr/bin/innobackupex line 4545 main::get_option('innodb_data_file_path') called at /usr/bin/innobackupex line 2631 main::apply_log() called at /usr/bin/innobackupex line 1578innobackupex: Error: no 'innodb_data_file_path' option in group 'mysqld' in server configuration file '/alidata/www/databases_backups/20150814/backup-my.cnf' at /usr/bin/innobackupex line 4545. [vagrant@localhost ~]$
Google了很多资源,大多看不懂也不太明白,于是发了个Segment问题:Percona XtraBackup 数据库备份工具使用问题,基本上是无人问津。
然后又继续搜索Percona工具的相关问题,整理了一些有用的在Github中。
上面的问题还是一直缠绕着我,之前我也做过类似的操作,也遇到了这个问题。云里雾里的时候,我仔细对比了上面的一些资料,发现backup-my.conf有些端倪,有的文档中用的是mysql安装目录中的my.conf文件,
对比这段内容后,我好像明白了点什么。其实原理就是图片的那句“2.2备份恢复”
innobackupex --defaults-file 这里应该是mysql的my.conf的路径 --copy-back 后面就是备份的路径
这个推测与阿里云帮助文档中的命令确实有些差异咯。我心想反正之前两此都不成功了,何不按照这样的理解是试试呢?在CentOS中查找mysql运行目录ps -ef | grep mysql
;将mysql数据目录备份mv data data_backup
;做了一些辅助工作后,带着试一试的想法开始实施。
按照我猜想的命令执行后,报了”…no datadir option …”字样的错误。然后又搜素到了这篇文章。于是继续修改,将系统的my.conf文件进行修改,打开了datadir选项。最后执行,还原命令终于执行了。
看到complete ok字样后,感觉终于对了样,实际却不然。innobackupex
将文件还原后,需要进一步做配置(我的环境):
mysql启动报错:mysql Starting MySQL..The server quit without updating PID file
,可能会修改还原datadir配置,也可能需要给data目录分配权限(chmod & chown)
mysql连接本地不成功: 还原数据后,使用mysql root密码为空,试了很久,发现官方也是这么干的!
phpmyadmin/navicat等工具连接不上:这时需要设置mysql数据表的host字段为%(这里也有一些坑,比如多个root账号)。
$sudo innobackupex --defaults-file=/alidata/server/mysql/my.cnf --copy-back /alidata/www/databases_backups/20150815/ //回车后,继续报错 nnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy and Percona LLC and/or its affiliates 2009-2013. All Rights Reserved. This software is published under the GNU GENERAL PUBLIC LICENSE Version 2, June 1991. Get the latest version of Percona XtraBackup, documentation, and help resources: http://www.percona.com/xb/p150815 03:02:54 innobackupex: Starting the copy-back operation IMPORTANT: Please check that the copy-back run completes successfully. At the end of a successful copy-back run innobackupex prints "completed OK!". innobackupex: got a fatal error with the following stacktrace: at /usr/bin/innobackupex line 4545 main::get_option('datadir') called at /usr/bin/innobackupex line 2450 main::copy_back(0) called at /usr/bin/innobackupex line 1578innobackupex: Error: no 'datadir' option in group 'mysqld' in server configuration file '/alidata/server/mysql/my.cnf' at /usr/bin/innobackupex line 4545.
执行成功之后
将datadir注释
启动mysql报错
修改目录权限
再次启动成功
无需密码登陆
phpmyadmin连接不上
设置root密码
phpmyadmin登陆成功
mysqlworkbench 登陆不成功
继续设置root的host配置 - 连接成功
最后,总结一下,当我们在遇到问题时,千万别因为它陌生,看不懂就抛开了。反而是我们要善于在过程中发现细节,总结归纳,有效试错,这样收获会更多!
http://www.111cn.net/database/mysql/47258.htm
http://blog.csdn.net/mchdba/article/details/12970991
http://segmentfault.com/q/1010000003096058
https://github.com/Brave-Cheng/Materials/blob/master/%E5%9C%A8%E7%BA%BF%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%BA%90%E6%A2%B3%E7%90%86(Online)/Mysql%E5%A4%87%E4%BB%BD.md
http://www.drupal001.com/2014/02/percona-xtrabackup-mysql/
http://ju.outofmemory.cn/entry/189507
转载:http://www.chenghuiyong.com/percona.html