首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 主從復制極簡部署指南:從配置到驗證、監控腳本一條龍

     編輯:MySQL 綜合教學

架構圖

Master(寫入) → Binlog → Slave(中継日誌 → SQL 線程重放)

環境假設

  • Master IP:192.168.145.222,Server ID:222
  • Slave IP:192.168.145.226,Server ID:226
  • 版本一致、已初始化、root 密碼已修改

步驟 1:Master 配置 /etc/my.cnf

[mysqld]
log-bin=mysql-bin
server-id=222

重啟:service mysqld restart

步驟 2:Slave 配置 /etc/my.cnf

[mysqld]
log-bin=mysql-bin
server-id=226

重啟。

步驟 3:Master 建立同步賬號

GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'%' IDENTIFIED BY 'q123456';
FLUSH PRIVILEGES;

建議: @'192.168.145.226' 限定 Slave IP,提升安全性。

步驟 4:Master 獲取同步坐標

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      308 |              |                  |
+------------------+----------+--------------+------------------+

關鍵: 此後**不要在 Master 執行任何寫操作**,直到 Slave 同步啟動,防止坐標漂移。

步驟 5:Slave 配置同步參數並啟動

CHANGE MASTER TO
  MASTER_HOST='192.168.145.222',
  MASTER_USER='mysync',
  MASTER_PASSWORD='q123456',
  MASTER_LOG_FILE='mysql-bin.000004',
  MASTER_LOG_POS=308;

START SLAVE;

步驟 6:驗證同步狀態

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.145.222
Master_User: mysync
Master_Port: 3306
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600
Relay_Log_File: slave-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

核心判斷: Slave_IO_Running=Yes 且 Slave_SQL_Running=Yes → **同步正常**。任一 No 需檢查 Last_IO_Error/Last_SQL_Error。

步驟 7:功能測試

-- Master
CREATE DATABASE hi_db;
USE hi_db;
CREATE TABLE hi_tb(id INT, name CHAR(10));
INSERT INTO hi_tb VALUES(1, 'bobu');

-- Slave
SHOW DATABASES;  -- 見 hi_db
USE hi_db; SELECT * FROM hi_tb;  -- 見 (1, 'bobu')

步驟 8:監控腳本(Nagios/Zabbix 適用)

#!/bin/bash
# check_mysql_slave.sh
STATUS=$(mysql -uroot -p'xxx' -e "SHOW SLAVE STATUS\G" | grep -E "Slave_IO_Running|Slave_SQL_Running" | awk '{print $2}')
IO=$(echo "$STATUS" | sed -n 1p)
SQL=$(echo "$STATUS" | sed -n 2p)
if [ "$IO" = "Yes" ] && [ "$SQL" = "Yes" ]; then
    echo "OK - Slave running"
    exit 0
else
    echo "CRITICAL - IO:$IO SQL:$SQL"
    exit 2
fi

加入 Cron 每分鐘執行,異常發送告警。

常見故障速查

現象可能原因處理
IO_Running=No網絡不通/賬號密碼錯/MASTER_LOG_FILE/POS 錯檢查防火牆、CHANGE MASTER TO 重新指定坐標
SQL_Running=No主從表結構不一致/主鍵衝突/觸發器報錯查 Last_SQL_Error,手動修正數據後 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
Seconds_Behind_Master 偏大Slave 機器性能弱/大事務/長 SQL/並行複寫未開開啟 slave_parallel_workers(5.7+)、優化慢 SQL、升級硬件
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved