MySQL Master and Slave 資料庫叢集

在開始進行master/slave同步時,請務必記得要同步兩邊的資料庫,如果不一致

需要先將master DB dump出來,import到slave中

DB server O.S : CentOS 7

master : 192.168.10.91

slave : 192.168.10.92

1. 安裝兩台mysql ,並設定好DB root密碼

yum install mariadb-server -y
systemctl start mariadb
mysqladmin -u root password '你的密碼'

2. 在master資料庫中

vi /etc/my.cnf    在[mysqld]區塊中加入以下

log_bin = master_bin	
server_id = 1

systemctl restart mariadb  <--------修改完要重啟mariadb

3. 在slave資料庫中

vi /etc/my.cnf    在slave[mysqld]區塊下加入以下,此處的id務必不同於master
 
log_bin = slave_bin	
server_id = 2
log-slave-updates
expire_logs_days = 10

systemctl restart mariadb  <--------修改完要重啟mariadb

4. 啟動mysql DB

systemctl start mariadb

mysql -uroot -p
mysql> show variables like 'log_bin';	 查看binlog功能有無開啟
mysql> show variables like "server_id";  查看server_id是不是剛剛設置好的

5. 在master DB中新增一個同步帳號 : rep

mysql> grant replication slave on *.* to 'rep'@'192.168.10.%' identified by 'password';  <----保險起見也可以只輸入slave IP'rep'@'192.168.10.92' 
mysql> flush privileges;
mysql> show grants for rep@'192.168.10.%';	查看指定帳號權限
mysql> show master status; 查看目前索引位置

6. 在slave DB中開啟同步

# mysql -uroot -p
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.10.91',	         master IP
-> MASTER_PORT=3306,		             DB port
-> MASTER_USER='rep',		             sync account
-> MASTER_PASSWORD='password',   	     sync account password
-> MASTER_LOG_FILE='master_bin.000001',  Binlog id請參考以下圖片file的數字
-> MASTER_LOG_POS=474;		             Binlog 請參考以下圖片的Position數字

7. 開啟slave同步功能

mysql> start slave;

8. 在master資料庫新增一個DB並且檢查slave是否也一樣新增了

在master 上新建DB testdb111

# mysql -uroot -p
mysql> create database testdb111;

在slave上看有無sync

# mysql -uroot -p
mysql> show databases;

testdb111在slave上有新增了

在master 上刪除DB testdb111

# mysql -uroot -p
mysql> drop database testdb111;

在slave上看有無sync

# mysql -uroot -p
mysql> show databases;

testdb111在slave上也消失了

9. 如果要加入第二台slave DB,只要將master DB資料庫完整打包匯入,並記錄下來目前bin log index

     編輯/etc/my.cnf

vi /etc/my.cnf  加入以下

log_bin = slave1_bin
server_id = 3


systemctl restart mariadb  <--------修改完要重啟mariadb

    在master DB確認目前binlog index

# mysql -uroot -p
mysql> show variables like 'log_bin';

10. 在第二台slave DB上修改檔案

# mysql -uroot -padmin
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.0.1.7',	         master IP
-> MASTER_PORT=3306,		             DB port
-> MASTER_USER='rep',		             sync account
-> MASTER_PASSWORD='password',   	     sync account password
-> MASTER_LOG_FILE='master_bin.000003',  Binlog id
-> MASTER_LOG_POS=120;		             Binlog 目前位置是多少

11. 第二台slave DB啟動同步

mysql> start slave;