主从复制配置
2026/10/1OpsOpsmysql大约 2 分钟约 613 字
先说背景
两台机器,主库 CentOS 7,从库 Ubuntu,配 MySQL 主从复制。这篇是实际操作记录,方便下次复用。
主库配置(CentOS)
改配置文件
sudo vi /etc/my.cnf在 [mysqld] 段加这些:
[mysqld]
server-id = 1 # 主库 id,随便填,唯一就行
log_bin = /var/log/mysql/mysql-bin.log
read-only = 0 # 0 表示读写(主库)
binlog_expire_logs_seconds = 2592000 # 日志保留 30 天
max_binlog_size = 100M
# binlog_do_db = astro_code # 只同步指定库
# binlog_ignore_db = mysql,sys # 不同步的库创建日志目录
sudo mkdir -p /var/log/mysql
sudo chown mysql:mysql /var/log/mysql
sudo chmod 755 /var/log/mysql重启主库
sudo systemctl restart mysqld创建复制专用用户
主库上创建个用户给从库用:
mysql -u root -pCREATE USER 'copyuser'@'120.26.180.149' IDENTIFIED WITH mysql_native_password BY 'MySql@123456';
GRANT replication slave ON *.* TO 'copyuser'@'120.26.180.149';查看主库状态
SHOW MASTER STATUS;记下返回的 File 和 Position,从库配置的时候要用。
从库配置(Ubuntu)
改配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
read-only = 1 # 从库只读
binlog_expire_logs_seconds = 2592000
max_binlog_size = 100M
replicate_do_db = astro_code # 只同步这个库
replicate_ignore_db = mysql,sys # 不同步系统库创建日志目录
sudo mkdir -p /var/log/mysql
sudo chown mysql:mysql /var/log/mysql
sudo chmod 755 /var/log/mysql重启从库
sudo systemctl restart mysql配置同步
mysql -u root -pSTOP SLAVE;
RESET SLAVE ALL;
CHANGE MASTER TO
MASTER_HOST='47.99.236.69', -- 主库 IP
MASTER_USER='copyuser', -- 刚才创建的复制用户
MASTER_PASSWORD='MySql@123456',
MASTER_LOG_FILE='mysql-bin.000004', -- 主库 SHOW MASTER STATUS 的 File
MASTER_LOG_POS=161383; -- 主库 SHOW MASTER STATUS 的 Position
START SLAVE;检查同步状态
SHOW SLAVE STATUS \G;重点关注两个字段:
Slave_IO_Running: YesSlave_SQL_Running: Yes
两个都是 Yes 就说明同步正常。
踩过的坑
日志位置对不上
主库换了配置或者重启过,binlog 文件和位置会变。重新跑一次 SHOW MASTER STATUS,拿到新的 File 和 Position,在从库重新 CHANGE MASTER TO。
主从数据不一致
从库如果之前写过数据,跟主库对不上会导致同步中断。先 STOP SLAVE,从库追上数据之后再 START SLAVE。
防火墙
主库 3306 端口要放行从库 IP:
# CentOS
sudo firewall-cmd --permanent --add-source=从库IP --add-port=3306/tcp
sudo firewall-cmd --reload总结
- 主库:开 binlog、建复制用户、记下 File 和 Position
- 从库:配 server-id、指向主库的 CHANGE MASTER TO、START SLAVE
- 验证:
SHOW SLAVE STATUS两个线程都是 Yes 就没问题
