MySQL主從複製搭建
1. 環境
1.1 作業系統
CentOS7最小化安裝
# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
1.2 主從節點
本例中共涉及到兩臺伺服器
- 10.10.2.231:主機名node1,作為主節點
- 10.10.2.232:主機名node2,作為從節點
1.3 MySQL版本
# mysql -pRoot@123 -e "select version()\G;"
version(): 8.0.26# rpm -qa |grep mysql
mysql-community-client-plugins-8.0.26-1.el7.x86_64
mysql-community-client-8.0.26-1.el7.x86_64
mysql-community-server-8.0.26-1.el7.x86_64
mysql-community-common-8.0.26-1.el7.x86_64
mysql-community-libs-8.0.26-1.el7.x86_64
mysql-community-libs-compat-8.0.26-1.el7.x86_64
2. 安裝MySQL
可參考另一個博文:CentOS7用yum安裝MySQL8
3. 配置主從複製
3.1 配置server_id
3.1.1 配置主節點的server_id=1
-
修改
/etc/my.cnf
,在[mysqld]
節點下新增server_id=1
# vi /etc/my.cnf
[mysqld]
(省略部分內容...)
server_id=1 -
重啟MySQL伺服器:
service mysqld restart
-
確認修改結果:
# mysql -pRoot@123 -e "show variables like 'server_id\G'"
********************** 1. row **********************
Variable_name: server_id
Value: 1
3.1.2 配置從節點的server_id=2
參照主節點配置
3.2 主節點開啟Binary Log
3.2.1 檢視Binary Log狀態
# mysql -pRoot@123 -e "show variables like 'log_bin'\G"
********************** 1. row **********************
Variable_name: log_bin
Value: ON
3.2.2 開啟Binary Log
-
MySQL
8.0
之後版本Binary Log預設開啟 -
MySQL
8.0
之前版本,修改/etc/my.cnf
,在[mysqld]
節點下新增log-bin=mysql-bin
,開啟Binary Log。修改完成後重啟MySQL服務:service mysqld restart
。# vi /etc/my.cnf
[mysqld]
(省略部分內容...)
log-bin=mysql-bin
3.3 主節點建立MySQL使用者
登入主節點MySQL mysql -h10.10.2.231 -pRoot@123
執行:
mysql> CREATE USER 'reply'@'%' IDENTIFIED BY 'Reply@123' PASSWORD EXPIRE NEVER;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'reply'@'%';
mysql> FLUSH PRIVILEGES;
3.3 獲取主節點二進位制日誌座標
登入主節點MySQL mysql -h10.10.2.231 -pRoot@123
執行:
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS\G;
********************** 1. row **********************
File: binlog.000003
Position: 1540
注意:記錄File
和Position
的值,後面會用到,並且不要退出當前MySQL連線,保證所有庫表的鎖定狀態。
3.4 從節點設定主從複製
登入從節點MySQL mysql -h10.10.2.232 -pRoot@123
執行:
mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.10.2.231',SOURCE_USER='reply',SOURCE_PASSWORD='Reply@123',SOURCE_LOG_FILE='binlog.000003',SOURCE_LOG_POS=1540;
mysql> START SLAVE;
執行完成後可通過SHOW SLAVE STATUS;
確認從節點的同步狀態:
mysql> SHOW SLAVE STATUS;
********************** 1. row **********************
(省略部分內容...)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(省略部分內容...)
最後還要記得之前尚未關閉的主節點的MySQL連線,把它關閉掉
4. 驗證主從複製效果
在主節點中建立資料庫:mysql -h10.10.2.231 -pRoot@123 -e 'create database test;'
在從節點中確認新建立的資料庫已經同步到從節點:mysql -h10.10.2.232 -pRoot@123 -e 'show databases;'
如果您發現筆者措辭不嚴謹、邏輯不合理,甚至程式碼有錯誤、結論很偏頗等等問題,歡迎聯絡QQ:562759534。筆者感激各位的討論和指正,並在此不勝感激!拜謝!