【實操記錄】MySQL主從配置

likingzi發表於2024-07-12

本文使用MySQL原生支援的主從同步機制,詳細記錄了配置步驟及運維操作方法,可供大家直接參考、使用。
本文假設已經部署了兩臺主機的MySQL軟體,且資料庫服務正常,詳細部署步驟可本站搜尋:"mysql二進位制安裝包部署"

■■ 主從配置

■ master 授權同步賬戶

CREATE USER 'repl'@'10.19.238.241' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD by 'passwd';
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'10.19.238.241';
FLUSH PRIVILEGES;

■ master 修改配置檔案

vim /etc/my.cnf

# 配置server id,建議採用ip地址最後一段以便於區分
server_id = 240
log_bin = master-bin
binlog_format = ROW

# 作為從庫時使用
relay_log = master-relay-bin

# 作為從庫時,來自主庫的更新操作是否寫入日誌,預設值為OFF,配置 on 時,其他節點以此節點做主庫時才能進行同步
log_slave_updates = on

# 以下兩個為可選選項,見字可知意
expire_logs_days = 7
max_binlog_size = 1G

# 設定系統庫的日誌不計入binlog
# 注:Binlog_Do_DB/Binlog_Ignore_DB 兩個引數互斥,一般只選擇其一設定,只能在啟動命令列中或配置檔案中設定
binlog_ignore_db = mysql
binlog_ignore_db = sys
binlog_ignore_db = information_schema
binlog_ignore_db = performance_schema

# 同步時忽略系統庫,但 create user 時資料還是會同步的
replicate_ignore_db = mysql
replicate_ignore_db = sys
replicate_ignore_db = information_schema
replicate_ignore_db = performance_schema

# 同步時忽略系統庫的表,這樣在 create user 時也不會進行同步了
replicate_wild_ignore_table = mysql.%
replicate_wild_ignore_table = sys.%
replicate_wild_ignore_table = information_schema.%
replicate_wild_ignore_table = performance_schema.%

■ master 服務重啟

參見前文:"mysql二進位制安裝包部署"

■ slave 修改配置檔案

vim /etc/my.cnf
同 master,只修改如下3項:

server_id = 25
log_bin = slave-bin
relay_log = slave-relay-bin

■ slave 服務重啟

參見前文:"mysql二進位制安裝包部署"

■ master 檢視 binlog 資訊

show master status;
執行之後,可獲取目前主庫 binlog 使用的 File 及 Position 點,類似如下:

+-------------------+----------+--------------+-------------------------------------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+-------------------+----------+--------------+-------------------------------------------------+-------------------+
| master-bin.000007 |      157 |              | mysql,sys,information_schema,performance_schema |                   |
+-------------------+----------+--------------+-------------------------------------------------+-------------------+

■ slave 設定複製資訊

根據上一步獲取到的資訊(File 及 Position)配置從庫的複製資訊,在從庫上執行如下命令

CHANGE MASTER TO MASTER_HOST='10.19.238.240',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='passwd',MASTER_LOG_FILE='master-bin.000006',MASTER_LOG_POS=1195;

■ slave 開啟複製

start slave;

■■ 常用操作

■ 檢視主從複製狀態

show slave status \G
主要檢視下面兩個引數狀態,只要都是yes,表示主從通訊正常:
Slave_IO_Running=Yes
Slave_SQL_Running=Yes

■ 啟動/停止複製

start slave;
stop slave;

■ reset master;

在master上執行,作用:
刪除binlog索引檔案中列出的所有binlog檔案
清空binlog索引檔案
建立一個新的binlog檔案
清空系統變數gtid_purged和gtid_executed
在MySQL 5.7.5 及後續版本中, RESET MASTER還會會清空 mysql.gtid_executed 資料表

■ reset slave;

在slave上執行,作用:
清除slave 複製時的master binlog的位置
清空master info, relay log info
刪除所有的relay log檔案,並建立一個新的relay log檔案。
重置複製延遲(CHANGE MASTER TO 的 MASTER_DELAY引數指定的)為0

注:
RESET SLAVE 不會改變 gtid_executed or gtid_purged.
RESET SLAVE 不會改變複製連線使用的引數,例如 master host, master port, master user, or master password
如果要重置這些連線引數,需要使用命令:
RESET SLAVE ALL
重置操作之後,就需要使用 CHANGE MASTER TO 重新指定複製連線引數。

■ 注意事項

如果出現同步失敗,可以根據提示處理錯誤,處理完成後,需要重新整理同步配置:
先停止同步
stop slave sql_thread;
stop slave;
清理掉之前的配置,防止同步已經同步了的資料
reset slave all;
然後重新連線主庫,進行同步。

■ 主從節點的重啟步驟

停應用 ->停資料庫(先備後主)-> 啟資料庫(先主後備)-> 啟應用

1、關閉從庫,在從庫操作
a.先檢視當前的主從同步狀態 show slave status\G; 看是否雙yes
b.執行stop slave
c.停止從庫服務
d.檢視是否還有mysql的程序ps -ef | grep mysql

2、關閉主庫,在主庫操作
a.停止主庫服務
b.檢視是否還有mysql的程序ps -ef | grep mysql

3、啟動主庫,在主庫操作
a.啟動主庫服務
b.檢視mysql的程序ps -ef | grep mysql

4、啟動從庫,在從庫操作
a.啟動從庫服務
b.啟動複製start slave;
c.檢查同步狀態 show slave status\G; 是否雙yes
d.檢視mysql的程序ps -ef | grep mysql

相關文章