阿里雲官網上是有提供關於RDS備份恢復到自建數據庫中的方法,但本人根據他們提供的方法進行操作的時候發現很多問題並沒有在方法裏頭提到的怎麼解決,只寫瞭如何操作的一個過程,我在這重新梳理了一下過程,並給廣發的博友參考。(此文只針對自己恢復過程中遇到的問題解決方法,並不針對所有現象)
一、前提是先安裝好數據庫
1.首先是把下載的rds_backup_extract隨便放在一個地方並授予權限
#chmod -R 777 rds_backup_extract
2.下載備份包進行解壓,-C後面指的是你本地數據庫data路徑。
#bash rds_backup_extract -f /home/mysql/backup/hins575175_xtra_20150429091224.tar.gz -C /home/mysql/data
解壓完成。
到https://www.percona.com/downloads/XtraBackup/LATEST/這裏去找根據自己版本,下載對應恢復工具,RDS是用2.2.6。我用的是2.2.9的。
#yum -y install perl-Time-HiRes perl-DBD-MySQL
#rpm -ivh percona-xtrabackup-2.2.9-5067.el6.x86_64.rpm
二、開始恢復
1.進入到當時解壓的本地數據庫data路徑下,能看到當時解壓出來的所有數據,包括backup-my.cnf。
2.執行語句恢復數據庫
#innobackupex --defaults-file=/alidata/server/mysql/data/backup-my.cnf --apply-log /alidata/server/mysql/data/
三.由於5.6的GTID的新特性自建數據庫對RDS進行同步需要,所以需要添加一些backup-my.cnf裏的參數,所以啓動會報以下幾個錯誤。
1.當報:[ERROR] /alidata/server/mysql/bin/mysqld: unknown variable 'innodb_log_checksum_algorithm=innodb'的時候
解決方法:
把my.cnf裏的innodb_log_checksum_algorithm=innodb註釋掉。(註釋掉只是暫時解決,後期有變動我會修改。因爲這個參數要用得到。)
2.當報:[ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode的時候
解決方法:
rm -fr ibdata1 ib*,再重新啓動即可。
3.當報:[ERROR] --gtid-mode=ON or UPGRADE_STEP_1 or UPGRADE_STEP_2 requires --log-bin and --log-slave-updates
解決方法:
開啓GTID需要啓用這三個參數,gtid_mode = on,enforce_gtid_consistency = 1,log_slave_updates = 1不然就會報這個錯誤。
4.當報:[ERROR] Fatal error: Can't open and lock privilege tables: Can't find file: './mysql/user.frm' (errno: 13 - Permission denied)
解決方法:
由於RDS恢復完成後,表 mysql.user 中是不包含 RDS 中創建的用戶,需要新建,或者在my.cnf裏面添加user=root。
新建用戶前請執行如下 SQL:
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;