準備
首先需要準備好,2臺MySQL。用虛擬機器或實體機器都可以。
如果沒有安裝,可以檢視安裝教程:
https://www.cnblogs.com/cqpanda/p/16365015.html
https://www.cnblogs.com/cqpanda/p/18044804
https://www.cnblogs.com/cqpanda/p/17299234.html
測試環境:MySQL 8.x Linux OpenEuler 2203Sp3.x86_64 2臺(用於1主,1從)
主資料庫配置
建立一個資料庫用於主從複製
create database test default character set utf8mb4 collate utf8mb4_general_ci;
主資料庫配置檔案進行修改
## 進入編輯配置檔案
vim /etc/my.cnf
編輯配置檔案
## 下面為配置檔案內容
# 配置編碼為utf8
character_set_server=utf8mb4
init_connect='SET NAMES utf8mb4'
# 啟用二進位制日誌
log-bin=mysql-bin
# 配置要給Slave同步的資料庫,可以設定多個
binlog-do-db=test
# 不用給Slave同步的資料庫,一般是Mysql自帶的資料庫就不用給Slave同步了
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# Master的id,這個要唯一,唯一是值,在主從中唯一
server-id=3
重啟服務
systemctl restart mysqld
檢視log_bin日誌是否啟動成功
show variables like '%log_bin%';
檢視Master狀態
show master status;
File和Position要記住,後面配置Slave的時候要使用到這兩個資料.
然後主資料庫建立一個用於同步使用的賬戶
create user 'backup'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO backup@"%" WITH GRANT OPTION;
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%';
FLUSH PRIVILEGES;
從資料庫配置
建立一個和主資料庫同名的資料庫:
create database test default character set utf8mb4 collate utf8mb4_general_ci;
編輯配置檔案:
vim /etc/my.cnf
配置檔案設定:
# 配置從伺服器的ID,唯一的
server-id=4
#加上以下引數可以避免更新不及時,SLAVE 重啟後導致的主從複製出錯。
read_only = 1
master_info_repository=TABLE
relay_log_info_repository=TABLE
配置完成後,重啟服務
systemctl restart mysqld
設定Master的資訊:
-- 注意:master_log_file、master_log_pos改為主資料庫對應的資料
change master to master_host='192.168.1.5',master_port=3306,
master_user='backup',master_password='123456',
master_log_file='mysql-bin.000001',master_log_pos=1690;
啟動從資料庫從服務
start slave;
檢視slave狀態
-- 檢視從資料庫狀態
show slave status
檢視Slave_IO_Running和Slave_SQL_Running是否都是yes
如果存在no,則關閉從服務,然後重啟伺服器
-- 停止從服務
stop slave;
-- 啟動從服務
start slave;
-- 注意:master_log_file='mysql-bin.000001',master_log_pos=1690; 是與主資料庫是同步的
其他命令
-- 檢視主的日誌
show master logs;
-- 重置從資料庫配置(注意!!!會清空從的配置資訊)
reset slave
常見錯誤處理
slave啟動後報錯1872
1872 - Replica failed to initialize applier metadata structure from the repository
reset slave;
從庫狀態 Slave_IO_Running: Connecting
檢查網路是否能連通,ping一下
ping 192.168.100.100
檢查主庫的防火牆是否開啟對應埠
firewall-cmd --query-port=3306/tcp
檢查提供給從庫的使用者名稱和密碼是否正確
在主庫用對應的使用者名稱和密碼登入一下就知道了
檢測對應的master_log_file='mysql-bin.000001',master_log_pos=1690; 是否主資料庫是同步的
show master status;
檢查虛擬機器MySQL庫uuid
如果是虛擬機器環境,是使用克隆出來的兩個虛擬機器
在資料夾/var/lib/mysql下面的auto.cnf檔案中
serveruuid=aaaaaaaaaaaaa是相同的,
將主從資料庫中的auto.cnf檔案刪除後重新啟動資料庫後可以解決
參考連結
https://cloud.tencent.com/developer/article/1662191
https://zhuanlan.zhihu.com/p/164518315
https://zhuanlan.zhihu.com/p/138420773
https://www.cnblogs.com/jialanyu/p/14074039.html
https://blog.csdn.net/weixin_43879261/article/details/111483712
https://zhuanlan.zhihu.com/p/261416799
https://developer.aliyun.com/article/43337