首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 高可用複制實戰:CentOS 5.2 + MySQL 5.1.44 主從搭建全記錄(含坑點避雷)

     編輯:MySQL 資料庫相關知識

環境信息

項目數值
OSCentOS 5.2
MySQL5.1.44 (源碼編譯)
Master192.168.x.166
Slave192.168.x.172
同步庫shops

通用安裝步驟(雙節點同執行)

# 1. 創建用戶組
groupadd mysql
useradd -g mysql mysql

# 2. 解壓編譯安裝
tar -xzf mysql-5.1.44.tar.gz
cd mysql-5.1.44
./configure \
  --prefix=/usr/local/mysql \
  --enable-assembler \
  --with-mysqld-ldflags=-all-static \
  --with-client-ldflags=-all-static \
  --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock \
  --with-charset=utf8 \
  --with-collation=utf8_general_ci \
  --with-extra-charsets=all
make && make install

# 3. 初始化數據目錄
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var

# 4. 註冊服務
chmod +x support-files/mysql.server
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 345 mysqld on
service mysqld start

主從配置核心步驟

1. Master 配置 (/etc/my.cnf)

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = MIXED
binlog-do-db = shops
# 可選:binlog-ignore-db = mysql,test

2. 創建複制賬號(Master)

GRANT REPLICATION SLAVE ON *.* TO 'repbadboy'@'192.168.x.172' IDENTIFIED BY '111111';
FLUSH PRIVILEGES;

3. Master 全量備份並記錄位點(關鍵:--master-data)

# 1. 全局讀鎖
FLUSH TABLES WITH READ LOCK;
# 2. 記錄位點
SHOW MASTER STATUS\G;
-- 假設 File=mysql-bin.000001, Position=199
# 3. 導出數據(含 CHANGE MASTER TO 註釋)
bin/mysqldump --master-data shops > /tmp/shops.sql
# 4. 解鎖
UNLOCK TABLES;

--master-data 作用:導出文件中自動包含 CHANGE MASTER TO MASTER_LOG_FILE='...', MASTER_LOG_POS=...;,Slave 恢復後直接 START SLAVE 無需手動對位點。

4. Slave 配置 (/etc/my.cnf)

[mysqld]
server-id = 2
replicate-do-db = shops
# replicate-ignore-db = mysql
# log-bin 可選(若 Slave 也需做其他 Slave 的 Master)

5. Slave 恢復數據並啟動複制

# 1. 創建庫並導入
mysqladmin create shops
mysql shops < /tmp/shops.sql

# 2. 指定 Master 位點(若導出文件已含 CHANGE MASTER 可跳過)
CHANGE MASTER TO
  MASTER_HOST='192.168.x.166',
  MASTER_USER='repbadboy',
  MASTER_PASSWORD='111111',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=199;

# 3. 啟動
START SLAVE;

# 4. 驗證
SHOW SLAVE STATUS\G;
-- 關鍵:Slave_IO_Running: Yes, Slave_SQL_Running: Yes

模擬業務寫入驗證同步鏈路

# Master 初始數據
SELECT * FROM user;  -- badboy01~05

# 重啟 Master 後新增
INSERT INTO user VALUES ('badboy06'), ('badboy07');

# 加鎖備份時刻位點 Position=304

# 解鎖後再新增
INSERT INTO user VALUES ('badboy08'), ('badboy09'), ('badboy10');

# Slave 恢復後查詢
SELECT * FROM user;  -- 應見 01~10 全量

# Master 再新增
INSERT INTO user VALUES ('badboy11'), ('badboy12');
# Slave 實時同步
SELECT * FROM user;  -- 見 01~12

生產環境避坑指南(針對 5.1 老版本)

  1. binlog-format 必須 MIXED 或 ROW:STATEMENT 模式下非確定性函數(UUID、NOW())導致主從數據不一致。
  2. 同步賬號 Host 精確到 IP:避免 '%' 暴露風險。
  3. 防火牆/SELinux:雙向放行 3306,或關閉測試。
  4. Slave 唯讀保護:read_only=1(超級用戶除外),防止誤寫入導致同步中斷。
  5. 監控腳本:每分鐘檢查 Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running,異常即時告警。
  6. 定期一致性校驗:pt-table-checksum --databases shops(需 Percona Toolkit)。
  7. 升級路徑:5.1 已 EOL,強烈建議遷移至 5.7/8.0,獲得 GTID、MTS、Crash-safe Slave、Online DDL 等關鍵特性。

總結

本文通過完整命令記錄了 MySQL 5.1 時代的經典主從搭建流程:編譯安裝 → Binlog 開啟 → 專用賬號 → 全局鎖備份+位點記錄 → Slave 恢復 → CHANGE MASTER → START SLAVE → 驗證。雖版本老舊,但核心邏輯與現代 GTID 模式一脈相承。生產環境請直接使用 MySQL 8.0 + GTID + 半同步 + MHA/Orchestrator,避免手動位點管理的痛苦。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved