centos7下配置mysql5.7.24主從複製
前置條件
準備兩臺伺服器(可以是虛擬機器),系統為centos7
此處演示的兩臺伺服器:192.168.8.134、192.168.8.135
第一步:安裝mysql5.7.24
先在兩臺伺服器上安裝mysql5.7.24,安裝可參考:
安裝成功後,啟動mysql。如果是虛擬機器的話,在一臺安裝好之後,可以使用克隆功能,克隆後的虛擬機器也會有安裝好的mysql。
第二步:配置主從複製
配置之前,先在兩臺伺服器上開啟mysql。
master:192.168.8.134
slave: 192.168.8.135
配置master
建立一個名為repl的使用者
CREATE USER repl IDENTIFIED BY '
授權slave資料庫REPLICATION 許可權
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY '[email protected]';
授權slave伺服器可以通過repl使用者可以遠端訪問master,來讀取binlog中資料,實現資料同步。
修改my.cnf配置檔案
sudo vim /etc/my.cnf
在/etc/my.cnf的[mysqld]下加入如下配置:
# 啟用二進位制日誌檔案 log-bin=mysql-bin # 伺服器唯一ID server-id=1
log-bin: 開啟binlog
server-id:指定伺服器id(唯一,不能與slave伺服器server-id相同)
重啟mysql
sudo systemctl restart mysqld
檢視master二進位制檔名稱和偏移量
show master status;
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+
此處二進位制檔名稱為:mysql-bin.000002,偏移量為:154
配置slave
修改my.cnf配置檔案
sudo vim /etc/my.cnf
在/etc/my.cnf的[mysqld]下加入如下配置:
# 伺服器唯一ID server-id=2 # 開啟中繼日誌 relay-log=slave-relay-bin # 開啟中繼日誌索引 relay-log-index=slave-relay-bin.index # 設定只讀 read_only=1
此處設定只讀是因為,在主從複製的情況下,通常資料寫入master,從slave中讀取資料。
重啟mysql
sudo systemctl restart mysqld
建立同步連線
CHANGE MASTER TO master_host = '192.168.8.134', master_port = 3306, master_user = 'repl', master_password = '[email protected]', master_log_file = 'mysql-bin.000002', master_log_pos = 154;
master_host: master伺服器ip
master_port: master上mysql服務埠
master_user: 配置master時建立的repl使用者
master_password: master上repl使用者密碼
master_log_file: 配置master第5步查詢到的二進位制日誌檔名稱
master_log_pos: 配置master第5步查詢到的偏移量
啟動slave
start slave;
檢視slave狀態
show slave status \G
此時Slave_IO_Running、Slave_SQL_Running值都是Yes,說明主從複製配置成功
測試
在master上新建一個名為test的資料庫
create database test;
在slave上檢視
show databases;
可以看到test資料庫已經同步到slave上了
可能出現的錯誤
- [ERROR] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593
我在檢視slave狀態時,發現 Slave_IO_Running: No
檢視日誌
tail -f /var/log/mysqld.log
發現上面的錯誤。
原因:我在master: 192.168.8.134 上安裝好mysql之後,使用克隆功能,建立了slave:192.168.8.135,導致master和slave上的server-uuid相同。
在master和slave上分別檢視server-uuid
sudo cat /var/lib/mysql/auto.cnf
發現值都是:server-uuid=a1ae101b-13e3-11e9-8f07-000c29b2fc93
解決方法:
先重新命名slave上的auto.cnf
sudo mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bk
然後重啟slave上的mysql
sudo systemctl restart mysqld
檢視slave狀態
show slave status \G
此時Slave_IO_Running、Slave_SQL_Running值都是Yes,說明主從複製配置成功