mysql安装完成后如何配置复制账号_mysql主从权限设置

1次阅读

主库创建复制账号必须授予REPLICATION SLAVE权限,且需开启binlog、设置唯一server-id;从库CHANGE MASTER TO参数须严格匹配主库SHOW MASTER STATUS输出,并验证Slave_IO_Running、Slave_sql_Running和Seconds_Behind_Master状态。

mysql安装完成后如何配置复制账号_mysql主从权限设置

主库上创建复制账号必须用 REPLICATION SLAVE 权限

mysql 主从复制依赖 binlog,从库通过 I/O 线程连接主库并拉取日志,这个连接必须由一个专用账号完成。该账号不能只给 selectALL PRIVILEGES,否则从库启动时会报错:Error 2003 (HY000): Can't connect to MySQL server 或更隐蔽的 Slave_IO_Running: NoSeconds_Behind_Master: NULL

正确做法是显式授予 REPLICATION SLAVE 权限(MySQL 5.7+)或 REPLICATION CLIENT, REPLICATION SLAVE(旧版本兼容):

CREATE USER 'repl'@'%' IDENTIFIED BY 'your_strong_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
  • 账号主机名建议用具体从库 IP(如 'repl'@'192.168.1.10'),避免开放 'repl'@'%' 增加攻击面
  • 密码必须满足当前 MySQL 的密码策略(如 validate_password.Length),否则 CREATE USER 会失败
  • 执行后务必运行 FLUSH PRIVILEGES,否则权限不生效

配置前先确认主库已开启 binlog 并设好 server-id

复制账号只是“钥匙”,主库本身得是“可复制状态”。如果 my.cnf 中没启用 binlog 或 server-id 为 0/未设置,从库即使连上也拿不到任何日志。

检查并修改主库配置文件(通常是 /etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf):

[mysqld] server-id = 1 log-bin = mysql-bin binlog-format = ROW expire_logs_days = 7
  • server-id 必须是唯一正整数,主从不能相同;若为 0,SHOW MASTER STATUS 将返回空
  • log-bin 名称可自定义,但后续 CHANGE MASTER TO 中的 MASTER_LOG_FILE 必须严格匹配
  • binlog-format = ROW 是推荐值,避免语句级复制在函数、时间函数等场景下的不一致
  • 改完配置需重启 MySQL(systemctl restart mysql),不是 reload

从库 CHANGE MASTER TO 的关键参数不能抄错

从库执行 CHANGE MASTER TO 是把复制关系“绑定”到主库账号和日志位置。参数写错一个字符(比如端口漏写、密码多空格),都会导致 START SLAVE 后立刻失败。

典型命令(假设主库 IP 是 192.168.1.5,复制账号为 repl,密码为 abc123):

CHANGE MASTER TO   MASTER_HOST='192.168.1.5',   MASTER_USER='repl',   MASTER_PASSWORD='abc123',   MASTER_PORT=3306,   MASTER_LOG_FILE='mysql-bin.000001',   MASTER_LOG_POS=154;
  • MASTER_LOG_FILEMASTER_LOG_POS 必须来自主库执行 SHOW MASTER STATUS 的输出,不能凭空猜测或沿用旧值
  • MASTER_PASSWORD 在 MySQL 8.0.23+ 默认被弃用,应改用 MASTER_AUTO_POSITION = 1 + GTID 模式(需主从都开启 gtid_mode=ON
  • 如果主库启用了 ssl,还需加上 MASTER_SSL=1 及对应证书参数,否则连接被拒绝

验证复制状态时重点看两个 Running 和 Seconds_Behind_Master

执行 START SLAVE 后,不能只看有没有报错,必须查状态:

SHOW SLAVE STATUSG

重点关注三行:

  • Slave_IO_Running: Yes —— 表示从库能连上主库并读取 binlog;如果是 No,先查 Last_IO_Error
  • Slave_SQL_Running: Yes —— 表示从库能正常解析并执行 relay log;如果是 No,看 Last_SQL_Error,常见于主从表结构不一致或重复键冲突
  • Seconds_Behind_Master: 0(或稳定小数值)—— 表示复制延迟低;若为 NULL,说明 SQL 线程没跑起来;若持续增大,可能是从库负载高或大事务阻塞

真正容易被忽略的是:即使两个 Running 都是 Yes,如果 Seconds_Behind_Master 长期 > 0,复制其实已经“假活”——它在同步,但永远追不上。

text=ZqhQzanResources