Mysql 一主一從配置

litayun發表於2024-12-04

Mysql 一主一從配置

環境資訊

ip地址 主機資訊 角色 mysql版本
192.168.1.19 S600 8.0.40-0ubuntu0.20.04.1
192.168.1.20 H840 8.0.40-0ubuntu0.20.04.1

本環境已完成2臺Mysql單機安裝,Mysql單機安裝操作文件

具體操作

Mysql主機配置

配置檔案修改
  • 修改配置Master

配置/etc/mysql/mysql.cnf, mysql的檔案/etc/mysql/my.cnf最終指向/etc/mysql/mysql.cnf

增加配置

[mysqld]
server_id=1
log_bin=master
binlog-format=ROW

binlog-format=ROW:採用行級日誌格式,減少資料不一致的可能性

image-20241202145132163

  • 重啟主mysql
systemctl restart mysql
配置主從複製使用者及許可權
  • 以root使用者登入主機mysql,並配置複製使用者許可權
create user 'repluser'@'%' IDENTIFIED by '123456';
grant replication slave on *.* to 'repluser'@'%';
FLUSH PRIVILEGES;
  • 驗證repluser使用者許可權

image-20241202112606713

匯出主庫資料
  • 鎖定Master機器主庫的表
FLUSH TABLES WITH READ LOCK;
  • 將主庫資料同步到從庫
sudo mysqldump -uroot -p123456 --all-databases > /data01/tmp/all.sql

image-20241202143002344

  • 解鎖表
UNLOCK TABLES;
  • 將sql檔案傳到從庫機器
scp ./all.sql lichao@192.168.1.20:/data01/tmp

Mysql從機配

初始化從庫資料

將Msql主機匯出的資料指令碼放到從庫執行,會同步主機的資料庫,但從機原來不同名的資料庫會保留,所以需要將從庫多餘的資料庫同步到主庫或者刪除。保證主從資料庫一致

lichao@HP-840G5:/data01/tmp$ mysql -u root -p < ./all.sql
修改配置檔案
  • 增加配置
[mysqld]
server_id=2
read_only=ON
super_read_only=ON

read-only=ON:限制除複製執行緒和具有 SUPER 許可權使用者外的所有寫操作。

super_read_only=ON:進一步限制具有 SUPER 許可權的使用者寫入操作,確保從庫真正只讀。

  • 重啟mysql
systemctl restart mysql
在Myql從庫指定主庫資訊
  • 在Mysql主機查詢Master機器的File和Position的值

image-20241202150123990

  • 進入MySQL服務,指定主伺服器資訊
    • MASTER_LOG_FILE和MASTER_LOG_POS的值按照Msql主機查詢到的值填寫
CHANGE MASTER TO
  MASTER_HOST='192.168.1.19',
  MASTER_USER='repluser',
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='master.000002',
  MASTER_LOG_POS=157;
  • 配置主從複製完成後,啟動複製流程
start slave;
檢查複製狀態
  • 在執行 START SLAVE 後,可以使用以下命令檢查從庫的複製狀態:

    • Slave_IO_Running:顯示 I/O 執行緒是否正在執行(Yes 表示執行)。

    • Slave_SQL_Running:顯示 SQL 執行緒是否正在執行。

    • Seconds_Behind_Master:從庫滯後主庫的時間(以秒為單位)。

SHOW SLAVE STATUS\G

image-20241202153023797

FAQ

1.Error connecting to source 'repluser@192.168.1.19:3306'. This was attempt 5/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

表示 MySQL 使用者使用了 caching_sha2_password 外掛,但當前連線未使用安全連線(如 SSL/TLS),因此無法完成身份驗證。

在Mysql主機使用者repluser的使用者外掛修改為mysql_native_password臨時規避

ALTER USER 'repluser'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;

2.Got fatal error 1236 from source when reading data from binary log: 'Could not find first log file name in binary log index file'

經檢查,從庫配置主庫資訊時,二進位制檔名配置錯誤,經修改後重新保證主從庫一致性後,再進行同步操作。

停止同步命令:STOP SLAVE;

參考

  • MySql一主多從同步結構配置

相關文章