mysql如何配置主从复制环境_mysql部署步骤说明

1次阅读

主库必须开启binlog并设置唯一server-id;创建专用复制账号repl并授权replication slave;锁表获取binlog位置后导出数据;从库配置不同server-id并执行change master to启动复制;检查slave_io_running和slave_sql_running均为yes。

mysql如何配置主从复制环境_mysql部署步骤说明

确认主库是否开启 binlog 并设置唯一 server-id

mysql 主从复制依赖于主库的二进制日志(binlog),如果没开,从库根本收不到任何变更。先登录主库执行:

SHOW VARIABLES LIKE 'log_bin';

返回 ON 才算开启;否则需在主库配置文件(通常是 /etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf)的 [mysqld] 段落里加:

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

注意server-id 必须是正整数,且主从不能重复;主库设为 1,从库建议用 23 等递增数字,不能为 0(MySQL 5.7+ 默认是 0,不显式设置会导致复制失败)。

在主库创建用于复制的专用账号

不要复用 root 或应用账号——权限过大不安全,且 MySQL 8.0+ 默认要求复制账号必须有 REPLICATION SLAVE 权限,还必须启用 ssl 或显式禁用(视版本而定)。执行:

CREATE USER 'repl'@'%' IDENTIFIED BY 'your_secure_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

如果主库启用了 require_secure_transport=ON(推荐),则从库连接时需走加密通道;否则可临时加一句:

SET GLOBAL require_secure_transport = OFF;

但生产环境更建议配好 TLS,而不是关掉它。

获取主库当前 binlog 位置并导出数据

主从起始同步点必须一致,否则从库会漏数据或报错 Could not find first log file name in binary log index file。操作分两步:

  • 锁表并查位置:
    FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;

    记下输出中的 File(如 mysql-bin.000003)和 position(如 154

  • 另开终端,用 mysqldump 导出(不锁表也可用 --single-transaction,但需确保引擎是 InnoDB):
    mysqldump -u root -p --all-databases --master-data=2 > full_backup.sql

    --master-data=2 会把 CHANGE MASTER TO 语句注释写进 dump 文件,方便后续恢复

  • 导完立刻解锁:
    UNLOCK TABLES;

从库配置与启动复制链路

从库配置文件同样要设 server-id(不能和主库一样),且建议开启 read_only=1 防误写。导入主库 dump 后,执行:

CHANGE MASTER TO   MASTER_HOST='192.168.1.10',   MASTER_USER='repl',   MASTER_PASSWORD='your_secure_password',   MASTER_LOG_FILE='mysql-bin.000003',   MASTER_LOG_POS=154;

然后启动:

START SLAVE;

检查状态:

SHOW SLAVE STATUSG

重点关注两个字段:Slave_IO_RunningSlave_SQL_Running 都要是 Yes;如果其中一个是 No,看 Seconds_Behind_MasterLast_IO_Error / Last_SQL_Error 定位问题。常见坑包括:网络不通、账号密码错、主库 binlog 被删、从库已有同名表导致 SQL 线程卡住。

从库的 relay-log 默认存在数据目录下,名字形如 hostname-relay-bin.xxxxxx,不需要手动指定,除非磁盘空间紧张需挪位置。

text=ZqhQzanResources