1. 程式人生 > 其它 >MySQL主從複製搭建

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 主從節點

本例中共涉及到兩臺伺服器

  1. 10.10.2.231:主機名node1,作為主節點
  2. 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

注意:後續root密碼我們將使用Root@123。

3. 配置主從複製

3.1 配置server_id

3.1.1 配置主節點的server_id=1

  1. 修改/etc/my.cnf,在[mysqld]節點下新增server_id=1

    # vi /etc/my.cnf
    [mysqld]
    (省略部分內容...)
    server_id=1

  2. 重啟MySQL伺服器:service mysqld restart

  3. 確認修改結果:

    # 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

  • MySQL8.0之後版本Binary Log預設開啟

  • MySQL8.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

注意:記錄FilePosition的值,後面會用到,並且不要退出當前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。筆者感激各位的討論和指正,並在此不勝感激!拜謝!