mysql如何搭建主从复制_mysql部署实战指南

来源:这里教程网 时间:2026-02-28 20:52:04 作者:

主库必须开启 binlog 且设置唯一 server-id

MySQL 主从复制依赖 binlog 记录写操作,如果主库没开 binlog,从库根本收不到任何事件。检查

my.cnf
my.ini
中是否包含:

log-bin = mysql-bin
server-id = 1

注意:

server-id
必须是正整数,主从不能相同;
log-bin
路径默认在 datadir 下,不建议用绝对路径(易因权限或 SELinux 失败);若已运行的实例首次启用 binlog,需重启 mysqld。

从库执行 CHANGE MASTER TO 时 host 和 port 要指向主库真实地址

常见错误是填了

127.0.0.1
localhost
,导致从库连自己而不是主库。务必确认网络可达,并用主库实际 IP 和开放端口(默认 3306):

CHANGE MASTER TO
  MASTER_HOST = '192.168.1.10',
  MASTER_PORT = 3306,
  MASTER_USER = 'repl',
  MASTER_PASSWORD = 'xxx',
  MASTER_LOG_FILE = 'mysql-bin.000001',
  MASTER_LOG_POS = 154;

其中

MASTER_LOG_FILE
MASTER_LOG_POS
来自主库执行
SHOW MASTER STATUS
的输出;用户
repl
需提前在主库创建并授予
REPLICATION SLAVE
权限。

START SLAVE 后立刻检查 Seconds_Behind_Master 是否为 NULL

Seconds_Behind_Master: NULL
表示复制线程未正常启动,不是“追上了”,而是出错了。此时必须查:

SHOW SLAVE STATUS\G
中的
Slave_IO_Running
Slave_SQL_Running
是否都为
Yes
IO_Running
No
:大概率是网络不通、账号密码错、主库没开远程访问(
bind-address
配置为
127.0.0.1
)、防火墙拦截
SQL_Running
No
:常见于主从表结构不一致、从库有写入冲突、遇到重复键或缺失外键约束

错误日志在

SHOW SLAVE STATUS
Last_IO_Error
Last_SQL_Error
字段里,别跳过这一步直接重试。

从库只读模式不能靠 set global read_only=1 一劳永逸

read_only=1
对 super 用户无效,而 MySQL 系统账户(如
root@localhost
)默认是 super,所以该设置形同虚设。真正防写入要组合两步:

执行
SET PERSIST read_only = ON
(MySQL 8.0+)或写入配置文件并重启,确保持久生效
回收从库上所有非复制账号的
SUPER
权限:
REVOKE SUPER ON *.* FROM 'app_user'@'%';

否则运维误操作或应用配置错账号,仍可能往从库写数据,后续主从数据就不可逆地不一致了。

相关推荐