一、搭建說明
準備工做:主從庫已安裝mysql軟件以及xtracbackup備份工具。具體操做可參見mysql rpm安裝文檔。mysql
介質 版本
操做系統 Red Hat Enterprise Linux Server release 6.8 (Santiago)
數據庫 MySQL-5.6.30
角色 IP
主庫 172.16.81.90
從庫 172.16.81.76
二、主庫操做
2.1 建立複製用戶sql
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.81.76' IDENTIFIED BY 'repl_1234';
mysql> flush privileges;
2.2 開啓binlog(若已開啓則不須要操做)數據庫
# vi /usr/my.cnf #增長如下內容 [mysqld] log-bin=mysqlbin expire_logs_days=7
重啓數據庫服務器
# service mysql restart
2.3主庫備份app
建立備份目錄 # mkdir /data/backup/ 全庫備份 # innobackupex --defaults-file=/etc/my.cnf --user=root --password="niwodai#2017" --socket=/var/lib/mysql/mysql.sock /data/backup/ --no-timestamp 單庫備份 # innobackupex --user=root --password="niwodai#2017" --socket=/var/lib/mysql/mysql.sock --defaults-file=/usr/my.cnf /data/backup/ --no-timestamp --database=wjf 打包備份,傳到從庫(臨時存放在/tmp目錄下) # cd /data/ # tar -cvzf backup_master.tar.gz backup/ # scp backup_master.tar.gz root@172.16.81.76:/tmp/ 2.4 參數配置 # vi /usr/my.cnf #增長以下內容 [mysqld] server-id=129 relay-log=mymaster-relay-bin # binlog-do-db=wjf # binlog-ignore-db=test replicate_do_db=wjf #replicate-ignore-db=test log-slave-updates=1 replicate-same-server-id=0 master_info_repository=TABLE relay_log_info_repository=TABLE relay_log_purge=1 relay_log_recovery=1
server-id 是必須的,並且需惟一。
對於mysql 5.6,更新5張系統表的默認存儲引擎爲innodb。(changer master時報錯才操做)socket
mysql> ues mysql; mysql> show tables; 刪除表 drop table if exists innodb_index_stats; drop table if exists innodb_table_stats; drop table if exists slave_master_info; drop table if exists slave_relay_log_info; drop table if exists slave_worker_info; 進入datadir,刪除對應文件 cd /var/lib/mysql/mysql rm innodb_index_stats.ibd rm innodb_table_stats.ibd rm slave_master_info.ibd rm slave_relay_log_info.ibd rm slave_worker_info.ibd 重建以上表 mysql> use mysql; mysql> source /usr/share/mysql/mysql_system_tables.sql mysql> show tables; 確認表是否新建成功。 查看配置 mysql> show master status \G; 3、從庫操做 3.1 備份恢復 # mkdir /data/ # mv /tmp/backup_master.tar.gz /data/ # tar -xvzf backup_master.tar.gz # cd /data/backup/ 恢復備份文件至可用狀態 # innobackupex --apply-log --user=root --password=niwodai#2017 --port=3606 /data/backup/ 中止mysql服務 # service mysql stop 重命名原datadir目錄 # mv /data/mysql /data/mysql_bak 恢復數據到datadir # innobackupex --copy-back --user=root --password=niwodai#2017 /data/backup/ 170610 18:25:11 completed OK! 修改恢復後datadir目錄權限 # chown -R mysql:mysql /data/mysql/ 3.2 參數配置 # vi /etc/my.cnf #添加以下配置 #add for slave server-id=230 log-slave-updates=1 replicate-same-server-id=0 log-bin=myslavebin expire-logs-days=7 relay-log=myslave-relay-bin replicate_do_db=wjf #replicate-ignore-db=test master_info_repository=TABLE relay_log_info_repository=TABLE relay_log_purge=1 relay_log_recovery=1 read-only=1 對於mysql 5.6,更新5張系統表的默認存儲引擎爲innodb。(若表當前引擎爲innodb,能夠不操做) mysql> ues mysql; mysql> show tables; 刪除表 drop table if exists innodb_index_stats; drop table if exists innodb_table_stats; drop table if exists slave_master_info; drop table if exists slave_relay_log_info; drop table if exists slave_worker_info; 進入datadir,刪除對應文件 cd /var/lib/mysql/mysql rm innodb_index_stats.ibd rm innodb_table_stats.ibd rm slave_master_info.ibd rm slave_relay_log_info.ibd rm slave_worker_info.ibd 重建以上表 mysql> use mysql; mysql> source /usr/share/mysql/mysql_system_tables.sql mysql> show tables; 確認表是否新建成功。 重啓服務器 # service mysql restart 配置change master to 提取MASTER_LOG_FILE、MASTER_LOG_POS參數。 # cd /data/backup/ # more xtrabackup_binlog_info mysqlbin.000004 211678 配置 mysql> CHANGE MASTER TO MASTER_HOST='172.16.81.90', MASTER_USER='repl', MASTER_PASSWORD='repl_1234', MASTER_LOG_FILE='mysqlbin.000004', MASTER_LOG_POS=211678; 3.3 啓停從庫 啓動從庫 mysql> start slave; 中止從庫 mysql> stop slave; 從庫狀態確認 mysql> show slave status \G; (額外部分) 從庫的IO_thread、sql_thread能夠單獨啓停。命令以下: mysql> start slave io_thread; mysql> start slave sql_thread; 4、主從切換 4.1 切換前狀態檢查 #----主庫操做 鎖定全部表爲只讀模式。 mysql> flush tables with read lock; 狀態查看 mysql> show processlist; 傳輸線程顯示Master has sent all binlog to slave; waiting for binlog to be updated #----從庫操做 mysql> show processlist; 顯示Slave has read all relay log; waiting for the slave I/O thread to update it 4.2 切換 原從庫(81.76)操做 #-----原從庫(81.76)操做 mysql> stop slave; mysql> reset master; mysql> reset slave all; #-----切換後檢查 mysql> show master status\G; #-----建立複製用戶 mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.81.90' IDENTIFIED BY 'replpwd'; mysql> flush privileges; #-----註釋掉read_only參數 # vi /etc/my.cnf #read-only=1 #-------重啓數據庫 # service mysql restart 記錄一下兩個位置參數,用於主庫變從庫時的change master to設置。 原主庫(81.90)操做 #-------原主庫(81.90)操做 mysql> CHANGE MASTER TO MASTER_HOST='172.16.81.76', MASTER_USER='repl', MASTER_PASSWORD='replpwd', MASTER_LOG_FILE='mysqlbin.000001', MASTER_LOG_POS=638; #------啓動從庫 mysql> start slave; #------查看從庫狀態 mysql> show slave status; #------解鎖表 mysql> unlock tables; 若須要設置從庫只讀,還須要修改/usr/my.cnf文件 添加參數後重啓。 read-only=1