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
:採用行級日誌格式,減少資料不一致的可能性
- 重啟主mysql
systemctl restart mysql
配置主從複製使用者及許可權
- 以root使用者登入主機mysql,並配置複製使用者許可權
create user 'repluser'@'%' IDENTIFIED by '123456';
grant replication slave on *.* to 'repluser'@'%';
FLUSH PRIVILEGES;
- 驗證repluser使用者許可權
匯出主庫資料
- 鎖定Master機器主庫的表
FLUSH TABLES WITH READ LOCK;
- 將主庫資料同步到從庫
sudo mysqldump -uroot -p123456 --all-databases > /data01/tmp/all.sql
- 解鎖表
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的值
- 進入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
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一主多從同步結構配置