| 項目 | 數值 |
|---|---|
| OS | CentOS 5.2 |
| MySQL | 5.1.44 (源碼編譯) |
| Master | 192.168.x.166 |
| Slave | 192.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
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = MIXED
binlog-do-db = shops
# 可選:binlog-ignore-db = mysql,test
GRANT REPLICATION SLAVE ON *.* TO 'repbadboy'@'192.168.x.172' IDENTIFIED BY '111111';
FLUSH PRIVILEGES;
# 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無需手動對位點。
[mysqld]
server-id = 2
replicate-do-db = shops
# replicate-ignore-db = mysql
# log-bin 可選(若 Slave 也需做其他 Slave 的 Master)
# 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
'%' 暴露風險。read_only=1(超級用戶除外),防止誤寫入導致同步中斷。Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running,異常即時告警。pt-table-checksum --databases shops(需 Percona Toolkit)。本文通過完整命令記錄了 MySQL 5.1 時代的經典主從搭建流程:編譯安裝 → Binlog 開啟 → 專用賬號 → 全局鎖備份+位點記錄 → Slave 恢復 → CHANGE MASTER → START SLAVE → 驗證。雖版本老舊,但核心邏輯與現代 GTID 模式一脈相承。生產環境請直接使用 MySQL 8.0 + GTID + 半同步 + MHA/Orchestrator,避免手動位點管理的痛苦。