實做MySQL master slave replication
MySQL master slave replication 主要架構如下
1. 首先需要在主從資料庫中同時開啟mysql的binlog功能
2. 前端只要有任何新增修改刪除即insert,update,delete,create,drop,alter的操作時
3. 除了到資料庫中執行正常的sql之外,它同時也會把sql往binlog中寫一份
注意,binlog是有大小限制的,預設最大到1.1G,超過後就會自動再新增一個
另外,還有有個單獨的索引文件,是用來存放binlog的,後續主要根據它來命中對應的binlog文件中的sql
4. 最後master會起一個IO thread,主要用用來和slave的IO thread進行資料傳輸
1. 再來說明slave,slave中此時會起兩個thread,一個是IO thread,主要用來到master中去拿sql
2. 每拿一次就會在本地的master.info中update下對應的索引位置
3. 另一个則是SQL thread,主要用來執行master過來的sql,它並不是立刻執行,而是先放到slave本地的relay-log中
4. SQL thread會一直循環從那裡面讀取執行
在開始進行master/slave同步時,請務必記得要同步兩邊的資料庫,如果不一致
需要先將master DB dump出來,import到slave中
DB server O.S : CentOS 7
master : 10.0.1.7
slave : 10.0.1.5
1. 安裝兩台mysql ,並設定好DB root密碼
yum install mariadb-server -y
mysqladmin -u root password '你的密碼'
2. 在master資料庫中
vi /etc/my.cnf 在[mysqld]區塊中加入以下
log_bin = master_bin
server_id = 1
3. 在slave資料庫中
vi /etc/my.cnf 在slave[mysqld]區塊下加入以下,此處的id務必不同於master
log_bin = slave_bin
server_id = 2
log-slave-updates
expire_logs_days = 10
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'@'10.0.1.%' identified by 'password';
mysql> flush privileges;
mysql> show grants for rep@'10.0.1.%'; 查看指定帳號權限
mysql> show master status; 查看目前索引位置
6. 在slave DB中開啟同步
# mysql -uroot -p
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.000001', Binlog id
-> MASTER_LOG_POS=120; Binlog 目前位置是多少
7. 開啟slave同步功能
mysql> start slave;
8. 在master資料庫新增一個DB並且檢查slave是否也一樣新增了
9. 如果要加入第二台slave DB,只要將master DB資料庫完整打包匯入,並記錄下來目前bin log index
編輯/etc/my.cnf
vi /etc/my.cnf 加入以下
log_bin = slave1_bin
server_id = 3
在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;