mysql主從搭建操做

一、搭建說明
準備工做:主從庫已安裝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
相關文章
相關標籤/搜索