本文基于 Ubuntu 14.04 系統(tǒng)和 mysql 5.5 版本進(jìn)行演示。請確保云 RDS 數(shù)據(jù)庫的 MySQL 版本與本地版本一致。
首先,安裝 Percona Xtrabackup 工具:
wget https://repo.percona.com/apt/percona-release_0.1-3.$(lsb_release -sc)_all.deb dpkg -i percona-release_0.1-3.$(lsb_release -sc)_all.deb apt-get update apt-get install percona-xtrabackup-24
接下來,安裝 MySQL 服務(wù)器和客戶端,并記住設(shè)置的 root 密碼:
點(diǎn)擊下載“嗨格式數(shù)據(jù)恢復(fù)大師”;
apt-get install mysql-server mysql-client
停止 MySQL 數(shù)據(jù)庫服務(wù):
/etc/init.d/mysql stop
以下步驟假設(shè)數(shù)據(jù)庫文件存儲(chǔ)在 /home/mysql/data 目錄下,請根據(jù)實(shí)際情況修改路徑或創(chuàng)建該目錄。
將從阿里云下載的數(shù)據(jù)庫備份文件解壓到 /home/mysql/data 目錄:
cd /home/mysql/data tar -zxvf hins123123_data_20180107052346.tar.gz
更改數(shù)據(jù)庫文件權(quán)限(通常為 mysql:mysql):
chown -R mysql:mysql /home/mysql/data
使用 innobackupex 恢復(fù)數(shù)據(jù)庫:
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
嘗試啟動(dòng) MySQL 服務(wù):
mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data
檢查錯(cuò)誤日志,并根據(jù)錯(cuò)誤信息修改 /home/mysql/data/backup-my.cnf 文件。 例如,注釋掉 backup-my.cnf 文件中導(dǎo)致錯(cuò)誤的行,示例如下:
# vim /home/mysql/data/backup-my.cnf # This MySQL options file was generated by innobackupex. # The MySQL server [mysqld] datadir=/home/mysql/data user=mysql skip-grant-tables #innodb_checksum_algorithm=innodb <-- 注釋掉報(bào)錯(cuò)的行 #innodb_log_checksum_algorithm=innodb <-- 注釋掉報(bào)錯(cuò)的行 innodb_data_file_path=ibdata1:200M:autoextend innodb_log_files_in_group=2 innodb_log_file_size=1048576000 #innodb_fast_checksum=false <-- 注釋掉報(bào)錯(cuò)的行 #innodb_page_size=16384 <-- 注釋掉報(bào)錯(cuò)的行 #innodb_log_block_size=512 <-- 注釋掉報(bào)錯(cuò)的行 #innodb_undo_directory=. <-- 注釋掉報(bào)錯(cuò)的行 #innodb_undo_tablespaces=0 <-- 注釋掉報(bào)錯(cuò)的行
請根據(jù)實(shí)際報(bào)錯(cuò)信息進(jìn)行注釋,不要直接復(fù)制粘貼以上內(nèi)容。
保存并退出后,重新啟動(dòng) MySQL 服務(wù),并嘗試使用 root 用戶登錄 (RDS 數(shù)據(jù)庫的 root 密碼默認(rèn)為空)。 如果無法登錄,請參考后續(xù)步驟。
mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data mysql -uroot
在創(chuàng)建新用戶之前,執(zhí)行以下命令清除 root 用戶權(quán)限:
mysql> delete from mysql.db where user='root' and char_length(user)>0; mysql> delete from mysql.tables_priv where user='root' and char_length(user)>0; mysql> flush privileges;
如果仍然無法登錄,請停止 MySQL 服務(wù):
ps -ef |grep mysql kill <mysql進(jìn)程ID>
然后替換 /home/mysql/data/mysql 目錄:
rm -R /home/mysql/data/mysql cp -R /var/lib/mysql/mysql /home/mysql/data/mysql
再次啟動(dòng) MySQL 服務(wù)并嘗試登錄:
mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data mysql -uroot -p
成功登錄后,檢查數(shù)據(jù)庫是否正常運(yùn)行并查看日志是否有錯(cuò)誤。確認(rèn)無誤后,停止 MySQL 服務(wù)。
將 /home/mysql/data/backup-my.cnf 文件中的內(nèi)容復(fù)制到 /etc/mysql/my.cnf 文件中,覆蓋原有內(nèi)容。
最后,啟動(dòng) MySQL 服務(wù)并測試訪問:
/etc/init.d/mysql start
請務(wù)必仔細(xì)檢查每個(gè)步驟,并根據(jù)實(shí)際情況調(diào)整路徑和配置。 如有任何疑問,請參考 MySQL 和 Percona Xtrabackup 的官方文檔。