在主主復制結構中,兩臺服務器的任何一臺上面的數據庫存發生了改變都會同步到另一臺服務器上,這樣兩臺服務器互為主從,并且都能向外提供服務。配置的時候需要注意:主鍵重復,server-id不能重復。 1.新建數據庫 Ubuntu16.04,開啟兩個虛擬機。 配置前,兩個mysql分別新建一個數據庫,保證的test數據庫的數據一致 create database test default character set utf8 default collate utf8_general_ci; 2.修改配置文件 vim /etc/mysql/mysql.conf.d/mysqld.cnf 服務器A(192.168.8.129)配置如下 bind-address = 0.0.0.0 log_bin = /var/log/mysql/mysql-bin.log #開啟二進制日志 server-id = 1 #任意自然數n,只要保證兩臺MySQL主機不重復即可 expire-logs-days = 100 replicate-do-db = test #要同步的數據庫,默認所有庫 binlog-ignore-db = mysql #忽略mysql庫 binlog-ignore-db = information_schema #忽略information_schema庫 auto-increment-increment = 2 #步進值,有n臺主MySQL就填n auto-increment-offset = 1 #起始值。第n臺主MySQL,此時為第1主MySQL
服務器B(192.168.8.131)配置 bind-address = 0.0.0.0 log_bin = /var/log/mysql/mysql-bin.log server-id = 2 expire-logs-days = 100 replicate-do-db = test binlog-ignore-db = mysql binlog-ignore-db = information_schema auto-increment-increment = 2 auto-increment-offset = 2 #起始值,第2臺主MySQL 二者只有server-id不同和 auto-increment- offset不同 auto-increment-offset是用來設定數據庫中自動增長的起點的,兩個服務器都設定了一次自動增長值2,所以它們的起點必須得不同,這樣才能避免兩臺服務器數據同步時出現主鍵沖突 replicate-do-db 指定同步的數據庫,我們只在兩臺服務器間同步test數據庫。auto-increment-increment的值應設為整個結構中服務器的總數,本例用到兩臺服務器,所以值設為2 3.重啟mysql服務 /etc/init.d/mysql restart 4.創建共享用戶 創建一個可以在另一臺主機上登錄的MySQL用戶repl 看是否有mysql中是否有repl這個用戶 use mysql; select user from user;
若沒有的話,新建用戶 create user 'repl'@'%' IDENTIFIED BY 'passwd'; grant replication slave on . to 'repl'@'%'; flush privileges; 查看repl用戶的權限 show grants for 'repl'@'%';
9.測試是否同步成功 在A上 create table test_user (id int NOT NULL AUTO_INCREMENT PRIMARY KEY,createtime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP); 在B上可以看到新增了一個表
在B上 insert into test_user set id=1; 在A上可以看到test_user表中新增了一條記錄。