MySQL 主從配置-之-一主一從

重庆熊猫發表於2024-04-08

準備

首先需要準備好,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

image

檢視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

相關文章