準備兩臺服務器(能夠是虛擬機),系統爲centos7mysql
此處演示的兩臺服務器:192.168.8.13四、192.168.8.135sql
先在兩臺服務器上安裝mysql5.7.24,安裝可參考:shell
安裝成功後,啓動mysql。若是是虛擬機的話,在一臺安裝好以後,可使用克隆功能,克隆後的虛擬機也會有安裝好的mysql。數據庫
配置以前,先在兩臺服務器上開啓mysql。vim
master:192.168.8.134centos
slave: 192.168.8.135服務器
建立一個名爲repl的用戶測試
CREATE USER repl IDENTIFIED BY 'L2019Mysql@';
受權slave數據庫REPLICATION 權限ui
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'L2019Mysql@';
受權slave服務器能夠經過repl用戶能夠遠程訪問master,來讀取binlog中數據,實現數據同步。centos7
修改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
修改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 = 'L2019Mysql@', 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上了
我在查看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,說明主從複製配置成功