温馨提示×

debian mysql怎样设主从

小樊
53
2026-09-01 21:28:41
栏目: 云计算

下面以 Debian + MySQL / MariaDB 为例,一步一步说明如何配置 主从复制(Master–Slave Replication)。示例基于 MySQL 8.0 / MariaDB 10+,原理通用。


一、环境准备

假设:

  • 主库(Master):192.168.1.10
  • 从库(Slave):192.168.1.20
  • 数据库版本一致(建议)

二、主库(Master)配置

1. 修改配置文件

编辑 MySQL 配置文件(Debian 通常为):

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

添加或修改:

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
expire_logs_days = 7

server-id 必须唯一

2. 重启 MySQL

sudo systemctl restart mysql

3. 创建复制账号

CREATE USER 'repl'@'192.168.1.20' IDENTIFIED WITH mysql_native_password BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.20';
FLUSH PRIVILEGES;

4. 查看主库状态

SHOW MASTER STATUS;

记录:

  • File(如 mysql-bin.000001)
  • Position(如 154)

三、从库(Slave)配置

1. 修改配置文件

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
server-id = 2
relay_log = /var/log/mysql/relay-bin
read_only = 1

2. 重启 MySQL

sudo systemctl restart mysql

四、导入主库数据(可选但推荐)

如果是新库可跳过;如果是已有数据:

主库导出

mysqldump -u root -p --all-databases --master-data > db.sql

从库导入

mysql -u root -p < db.sql

五、配置从库连接主库

在从库执行:

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

使用前面 SHOW MASTER STATUS 的值

启动复制

START SLAVE;

六、检查复制状态

SHOW SLAVE STATUS\G

重点确认:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

只要这两个是 Yes,主从配置成功 ✅


七、常见问题

1. 防火墙

确保主库 3306 端口可访问:

sudo ufw allow from 192.168.1.20 to any port 3306

2. UUID 冲突(克隆虚拟机常见)

从库报错:

The slave I/O thread stops because master and slave have equal MySQL server UUIDs

解决:

sudo rm /var/lib/mysql/auto.cnf
sudo systemctl restart mysql

八、可选增强

  • GTID 复制(更现代)
  • 半同步复制
  • 多从库
  • 主主复制(不推荐新手)

如果你告诉我:

  • 是 MySQL 还是 MariaDB
  • 版本号
  • 是否已有数据

我可以给你完全对应的命令版本。

0 踩