記錄 RHEL 6.4 + MySQL 5.6.26 雙主熱備生產級部署全過程,作為運維團隊標準作業程序 (SOP) 存檔。
ntpdate/chrony)。/etc/hosts 互寫 IP/hostname)。iptables -F)。setenforce 0 + /etc/selinux/config disabled。# 解壓
tar xf mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz
# 部署
mv mysql-5.6.26-linux-glibc2.5-x86_64 /usr/local/mysql
# 用戶
useradd -M -s /sbin/nologin mysql
# 權限
chown -R root:root /usr/local/mysql/*
chown -R mysql:mysql /usr/local/mysql/data/
# 依賴
yum -y install libaio
# 初始化系統表
cd /usr/local/mysql/scripts/
./mysql_install_db --datadir=/usr/local/mysql/data/ --user=mysql --basedir=/usr/local/mysql/
# 服務腳本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig mysqld on
# 環境變量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile && source /etc/profile
# 啟動
service mysqld start
# 設置 root 密碼
mysqladmin -uroot password '123456'
# 驗證端口
ss -tunlp | grep 3306
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
server-id=20
log-bin=mysql-bin
log-bin-index=mysql-bin.index
binlog-format=ROW
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
replicate-ignore-db=test
auto-increment-increment=2
auto-increment-offset=1
# 性能優化建議
innodb_buffer_pool_size=4G
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=1
sync_binlog=1
max_connections=1000
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysqld]
... (基礎項同 Node A)
server-id=21
log-bin=mysql-bin
log-bin-index=mysql-bin.index
binlog-format=ROW
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
replicate-do-db=test
auto-increment-increment=2
auto-increment-offset=2
innodb_buffer_pool_size=4G
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=1
sync_binlog=1
max_connections=1000
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
重啟生效:service mysqld restart (雙機)。
mysql -uroot -p123456
mysql> FLUSH TABLES WITH READ LOCK;
# 保持會話不斷開,新開終端
mysqldump -uroot -p123456 -B test --master-data=2 --single-transaction --routines --triggers > /root/test_full.sql
# 記錄 SHOW MASTER STATUS 輸出的 File/Position (備用)
mysql> UNLOCK TABLES;
--master-data=2:導出文件含 CHANGE MASTER TO 註釋,便於從庫定位。
scp /root/test_full.sql 192.168.131.130:/root/
# Node B
mysql -uroot -p123456 < /root/test_full.sql
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.131.130' IDENTIFIED BY 'Repl@2023';
mysql> FLUSH PRIVILEGES;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.131.129' IDENTIFIED BY 'Repl@2023';
mysql> FLUSH PRIVILEGES;
# Node B 查看主庫位點
mysql -uroot -p123456 -h 192.168.131.130 -e "SHOW MASTER STATUS;"
# 假設 File=mysql-bin.000002, Pos=420
mysql -uroot -p123456 -h 192.168.131.129
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.131.130',
MASTER_USER='repl_user',
MASTER_PASSWORD='Repl@2023',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=420;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
# 驗證 Slave_IO_Running=Yes, Slave_SQL_Running=Yes
# Node A 查看主庫位點
mysql -uroot -p123456 -h 192.168.131.129 -e "SHOW MASTER STATUS;"
# 假設 File=mysql-bin.000002, Pos=689
mysql -uroot -p123456 -h 192.168.131.130
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.131.129',
MASTER_USER='repl_user',
MASTER_PASSWORD='Repl@2023',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=689;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
# Node A
mysql> USE test;
mysql> CREATE TABLE t_a (id INT AUTO_INCREMENT PRIMARY KEY, val VARCHAR(20));
mysql> INSERT INTO t_a (val) VALUES ('A-1'), ('A-2');
# Node B
mysql> USE test;
mysql> SHOW TABLES; -- 見 t_a
mysql> SELECT * FROM t_a; -- 見 A-1(id=1), A-2(id=3) 奇數
mysql> CREATE TABLE t_b (id INT AUTO_INCREMENT PRIMARY KEY, val VARCHAR(20));
mysql> INSERT INTO t_b (val) VALUES ('B-1'), ('B-2');
# Node A
mysql> SHOW TABLES; -- 見 t_a, t_b
mysql> SELECT * FROM t_b; -- 見 B-1(id=2), B-2(id=4) 偶數
mysql> INSERT INTO t_a (val) VALUES ('A-3'); -- id=5
mysql> INSERT INTO t_b (val) VALUES ('A-on-B'); -- id=6 (在 Node B 創建的表上插入,自增由 Node B 控制產生偶數)
驗證點:表結構同步、數據雙向同步、自增 ID 奇偶分離無衝突。
SHOW SLAVE STATUS\G 關注 Slave_IO_Running, Slave_SQL_Running, Seconds_Behind_Master。pt-table-checksum --databases=test --recurse=1 --recursion-method=hosts。mysqlbinlog --read-from-remote-server --host=... --raw --stop-never 遠程備份 Binlog。STOP SLAVE、提升從庫為主、應用切換連接串、重建雙主鏈路。MySQL 5.7+ 引入 Group Replication (MGR),基於 Paxos 協議提供:
mysqlsh / MySQL Router 實現透明路由。新架構**首選 MGR**,傳統雙主僅作存量系統維護。