原文發表於cu:2017-06-12 本文簡單介紹MySQL雙主複製原理及1個簡單是雙主複製驗證。 一.MySQL雙主複製原理 1. 雙主複製原理 master-master複製的兩台伺服器,既是master,又是另一臺伺服器的slave,本質上互為主從。 二.驗證環境 1. 操作系統 CentOS ...
原文發表於cu:2017-06-12
本文簡單介紹MySQL雙主複製原理及1個簡單是雙主複製驗證。
一.MySQL雙主複製原理
1. 雙主複製原理
master-master複製的兩台伺服器,既是master,又是另一臺伺服器的slave,本質上互為主從。
二.驗證環境
1. 操作系統
CentOS-6.7-x86_64
2. MySQL版本
MySQL版本是5.6.36:https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.36.tar.gz
3. 拓撲圖
- 採用VMware ESXi虛擬出的2台伺服器master/backup,地址10.11.4.196/197;
- MySQL已安裝並配置完成,可參考:http://www.cnblogs.com/netonline/p/7327409.html中的MySQL部分;
- 主從配置可參考:http://www.cnblogs.com/netonline/p/7603578.html
三.master配置
1. my.cnf配置
#在主從複製配置文件的基礎上增加3個參數項 [root@master ~]# vim /etc/my.cnf [mysqld] server_id = 196 log_bin = /mysql/mysql-bin max_binlog_size = 1G sync_binlog = 0 binlog-format = mixed binlog-ignore-db = information_schema,mysql,performance_schema,test # 中繼日誌執行之後將變化寫入自己的binlog文件,即從庫從主庫複製的文件預設不會寫入自己的binlog文件,需要開啟後才生效; # 通常此從庫同時作為主庫時,即鏈式複製時,需要開啟此參數; # 預設參數為0,表示OFF, 設置為1表示ON,參數可直接帶OFF或ON. log-slave-updates = 1 # 做雙主時,每台資料庫都可能在同一個表中插入數據,如果表有一個自動增長的主鍵,那麼就會在多伺服器上出現主鍵衝突;解決方案是讓每個資料庫的自增主鍵不連續; # 參數auto_increment_increment表示自增值,一般有n台主庫,自增值就採用n; # auto_increment_offset表示起始序號,一般offset不超過自增值,且各主庫的自增值不一樣. auto_increment_increment = 2 auto_increment_offset = 1 #使用--skip-slave-start啟動,可以不立即啟動從庫的複製線程,方便後續配置操作 [root@master ~]# service mysqld stop [root@master ~]# mysqld_safe --skip-slave-start &
2. 創建複製用戶
#在主庫上10.11.4.0網段的主機授權,從庫用戶repl獲得REPLICATION SLAVE許可權 [root@master ~]# mysql -uroot -p Enter password: mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.11.4.%' IDENTIFIED BY 'repl'; mysql> flush privileges;
3. 獲取master binlog文件名與偏移量
[root@master ~]# mysql -uroot -p Enter password: mysql> show master status;
- 獲取到binlog文件名與偏移量,可為從庫設定同步複製點。
4. iptables
[root@master ~]# vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
[root@master ~]# service iptables restart
四.backup配置
1. my.cnf配置
#將主庫伺服器上的my.cnf文件拷貝到從庫伺服器 [root@master ~]# scp /usr/local/mysql/my.cnf backup:/usr/local/mysql/ root@backup's password: #修改server id值與主庫伺服器不同; #auto_increment_offset參數,各伺服器的offset值應不一樣 [root@backup ~]# vim /etc/my.cnf [mysqld] server_id = 197 auto_increment_increment = 2 auto_increment_offset = 2 #使用--skip-slave-start啟動,可以不立即啟動從庫的複製線程,方便後續配置操作 [root@backup ~]# service mysqld stop [root@backup ~]# mysqld_safe --skip-slave-start &
2. 創建複製用戶
#在主庫上10.11.4.0網段的主機授權,從庫用戶repl獲得REPLICATION SLAVE許可權 [root@backup ~]# mysql -uroot -p Enter password: mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.11.4.%' IDENTIFIED BY 'repl'; mysql> flush privileges;
3. 獲取master(backup節點) binlog文件名與偏移量
[root@backup ~]# mysql -uroot -p Enter password: mysql> show master status;
- 獲取到binlog文件名與偏移量,可為從庫設定同步複製點。
4. iptables
[root@backup ~]# vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
[root@backup ~]# service iptables restart
五.同步複製
1. master配置同步複製
#配置從庫向主庫提交的參數,如果參數有錯誤,可以重新配置; # master-host、master-user、master-password、master-port等也可在my.cnf文件中指定; #”start slave“啟動複製 [root@master ~]# mysql -uroot -p Enter password: mysql> change master to master_host = '10.11.4.197', master_user = 'repl', master_password = 'repl', master_log_file = 'mysql-bin.000009', master_log_pos = 1306; mysql> start slave;
2. backup配置同步複製
[root@backup ~]# mysql -uroot -p Enter password: mysql> change master to master_host = '10.11.4.196', master_user = 'repl', master_password = 'repl', master_log_file = 'mysql-bin.000003', master_log_pos = 2462; mysql> start slave;
六.驗證
1. 查看線程
1)master伺服器
[root@master ~]# mysql -uroot -p Enter password: mysql> show processlist;
- master伺服器做為主庫的binlog dump線程已由backup伺服器從庫的repl用戶啟動;
- master伺服器做為從庫的I/0線程與SQL線程由系統用戶啟動。
2)backup伺服器
[root@backup ~]# mysql -uroot -p Enter password: mysql> show processlist;
- backup伺服器做為主庫的binlog dump線程已由master伺服器從庫的repl用戶啟動;
- backup伺服器做為從庫的I/0線程與SQL線程由系統用戶啟動。
2. 查看從庫狀態
1)master伺服器
[root@master ~]# mysql -uroot -p Enter password: mysql> show slave status\G;
- 重點關註Slave_IO_Running與Slave_SQL_Running,狀態均為YES時正常。
2)backup伺服器
[root@backup ~]# mysql -uroot -p Enter password: mysql> show slave status\G;
3. 查看新建數據資料庫同步情況
1)在master伺服器新建資料庫與表
[root@master ~]# mysql -uroot -p Enter password: mysql> create database dbtest2; mysql> use dbtest2; mysql> create table tabtest2(id int); mysql> insert into tabtest2() values(1),(2);
2)在backup伺服器查看資料庫與表
[root@backup ~]# mysql -uroot -p Enter password:
(1)查看資料庫
mysql> show databases;
(2)查詢表
mysql> select * from dbtest2.tabtest2;
3)在backup伺服器修改數據表
[root@backup ~]# mysql -uroot -p Enter password: mysql> use dbtest2; mysql> insert into tabtest2() values(3),(4);
4)在master伺服器查看修改後的數據表
[root@master ~]# mysql -uroot -p Enter password: mysql> select * from dbtest2.tabtest2;