阿里云官方文档上已经对这个部分进行了说明,但是其中有一些小的细节上可能还没有说的特别清楚,这篇文章是对官方文档的一个补充。
前提条件(再次强调):
- 本地的数据库版本要和RDS本身的数据库版本一致。如果RDS是5.7的,那么本地也要是5.7的版本。对于5.6版本也是一样。
请最好使用二进制文件安装mysql:下载链接:https://dev.mysql.com/downloads/mysql/5.7.html#downloads - Percona XtraBackup的版本:5.6和之前的要使用2.3,5.7使用2.4。
1
在官方文档中有说明对 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
2
如果直接使用按照文档中的方式启动 mysql(mysqld_safe --defaults-file...),然后登录(mysql -uroot -p<数据库密码>) 可能会遇到权限问题,导致登录不上的情况。
所以下面会对这个部分再进行一下补充:
第一个方法
直接使用原来RDS中的账号进行登录,因为系统表是从原来rds中"继承"下来的,所以使用原来RDS创建的账号也是能够登录的。
第二个方法
由于RDS是PaaS服务,所以在一些权限上的确是做了一些修改,比如对原生mysql中root账号就进行了限制,用户是无法得到这个账号级别的权限的。有些客户希望将数据恢复到本地以后,能够"无限制"的使用,那么可以参考下面的方法进行:
将物理备份恢复到本地以后,可以使用 aliyun_root管理mysql, 但是需要对 aliyun_root 进行密码重置。
使用无密码的方式进行启动mysql服务。添加参数:--skip-grant-tables
mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --skip-grant-tables --user=mysql --datadir=/home/mysql/data
然后使用 下面的方法进行重置:
mysql -hlocalhost -uroot
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#重置密码
mysql> SET PASSWORD FOR 'aliyun_root'@'127.0.0.1' = PASSWORD('Fdsa1234');
Query OK, 0 rows affected, 1 warning (0.00 sec)
#使用aliyun_root账号登录
mysql -h127.0.0.1 -ualiyun_root -pFdsa1234
这样就解决了权限的问题。