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

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

确认主库是否开启 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
,从库建议用
2
3
等递增数字,不能为
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 STATUS\G

重点关注两个字段:

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

从库的

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

相关推荐