本文介紹如何在Ubuntu 14.04系統上,將阿里云RDS mysql 5.6數據庫同步到本地MySQL 5.6數據庫。
一、準備工作:
環境:阿里云RDS MySQL 5.6,本地環境Ubuntu 14.04,MySQL 5.6。
二、安裝Percona Xtrabackup:
wget https://repo.percona.com/apt/percona-release_0.1-5.$(lsb_release -sc)_all.deb dpkg -i percona-release_0.1-5.$(lsb_release -sc)_all.deb apt-get update apt-get install percona-xtrabackup-24
三、安裝MySQL服務和客戶端:
apt-get install mysql-server-5.6 mysql-client-5.6 /etc/init.d/mysql stop
四、下載RDS數據庫備份文件:
wget -c '' -O rds_backup.tar.gz # 請替換空字符串為你的RDS備份文件下載鏈接
五、解壓備份文件:
將備份文件解壓到指定目錄(例如/home/mysql/data,請根據實際情況修改)。
bash rds_backup_extract.sh -f rds_backup.tar.gz -C /home/mysql/data # 請確保rds_backup_extract.sh腳本可用
六、恢復數據庫:
使用innobackupex恢復解壓后的備份文件。
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
七、配置backup-my.cnf文件:
編輯/home/mysql/data/backup-my.cnf文件,根據你的RDS配置調整參數。以下提供一個示例,請根據實際情況修改:
[mysqld] innodb_checksum_algorithm=innodb innodb_data_file_path=ibdata1:200M:autoextend innodb_log_files_in_group=2 innodb_log_file_size=1048576000 innodb_page_size=16384 innodb_undo_directory=. innodb_undo_tablespaces=0
八、修改文件屬主:
chown -R mysql:mysql /home/mysql/data
九、啟動MySQL進程:
mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data
十、清理MySQL系統表:
mysql -uroot 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> use mysql; mysql> drop table slave_master_info; mysql> drop table slave_relay_log_info; mysql> drop table slave_worker_info; mysql> drop table innodb_index_stats; mysql> drop table innodb_table_stats; mysql> source /usr/share/mysql/mysql_system_tables.sql; mysql> quit; mysqladmin shutdown;
十一、配置my.cnf文件:
將backup-my.cnf中的必要參數復制到/etc/mysql/my.cnf文件中,并根據你的實際情況進行調整。 請特別注意server-id,gtid-mode等參數的設置,以及數據庫復制相關的配置。
十二、設置slave并進行同步 (請在阿里云RDS控制臺創建一個只讀用戶用于同步):
- 重啟MySQL服務:/etc/init.d/mysql restart
- 獲取xtrabackup_slave_info文件內容:cat /home/data/mysql/xtrabackup_slave_info
- 使用獲取到的信息,執行以下SQL語句 (替換為你的RDS地址,用戶名和密碼):
mysql -uroot mysql> SET GLOBAL gtid_purged='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:1-123456'; # 根據xtrabackup_slave_info文件內容修改 mysql> CHANGE MASTER TO MASTER_HOST='RDS外網地址', MASTER_PORT=3306, MASTER_USER='RDS同步賬號', MASTER_PASSWORD='RDS同步密碼', MASTER_AUTO_POSITION=1; mysql> START SLAVE; mysql> SHOW SLAVE STATUS G;
十三、問題排查:
- InnoDB錯誤: 重啟服務器。
- unknown variable: 在my.cnf中注釋掉未知變量。
- Table crashed: 使用myisamchk -c -r /home/mysql/data/db/tablesname.MYI修復。
- 內存錯誤: 調整my.cnf中的內存相關參數。
- GTID錯誤 (1236): 獲取RDS最新的備份文件重新同步。
注意: 以上步驟中的路徑和參數需要根據你的實際情況進行調整。 在進行任何操作之前,請務必備份你的數據。 強烈建議在測試環境中先進行測試,再應用到生產環境。 部分參數的設置,可以參考阿里云RDS的配置,確保本地MySQL的配置與RDS盡可能一致。