Mysql数据多服务器同步——mysql主从服务器配置教程

Mysql数据多服务器同步——mysql主从服务器配置教程

V+变量
2025-02-18 / 0 评论 / 9 阅读 / 正在检测是否收录...

0 前言

针对网站采取多服务器配置和负载均衡的情况,网站文件可以采用syncthing、verysync之类的同步软件实现同步更新,但针对mysql如果直接采用直接复制数据库文件则会存在权限和报错问题,这个时候就需要配置主从mysql服务器了,让从服务器复制主服务器的数据。

首先我们针对该问题咨询了deepseek,deepseek给出如下提示:    

嗯,用户想要配置MySQL的主从服务器,我得先理清楚步骤。主从复制通常用于数据备份、负载均衡或者高可用性,对吧?首先需要确认用户使用的是哪个MySQL版本,不过可能不同版本的步骤类似,但最好还是提一下版本兼容性。

接下来,主服务器的配置。用户可能需要修改my.cnf或者my.ini文件,启用二进制日志,设置唯一的server-id。然后创建用于复制的账户,赋予REPLICATION SLAVE权限。之后需要锁定数据库,导出数据,记录当前的二进制日志位置。这部分可能会遇到问题,比如用户可能不知道如何找到正确的日志文件和位置,或者忘记锁定导致数据不一致。

然后是配置从服务器。同样需要修改配置文件,设置不同的server-id,可能还要配置中继日志的位置。用户可能在这里出错,比如server-id和主服务器重复,或者路径配置不正确。之后需要导入主服务器的数据备份,这一步如果备份文件很大,可能需要较长时间,或者导入时出现权限问题。

设置主从连接的时候,用户需要在从服务器上执行CHANGE MASTER TO命令,输入正确的主库IP、端口、用户名、密码以及日志文件和位置。这里常见的错误是输入信息错误,比如密码不对,或者主服务器的防火墙阻止了连接。启动从服务器复制后,需要检查Slave_IO_Running和Slave_SQL_Running的状态是否为Yes,如果有错误,可能需要查看错误日志来排查。

可能的故障点包括网络问题导致主从无法通信,主库的二进制日志没有开启,server-id冲突,或者时间不同步。用户可能还会遇到复制延迟的问题,或者主库有写操作而没使用事务导致数据不一致。需要提醒用户定期检查复制状态,处理可能出现的错误。

此外,用户可能需要配置更复杂的拓扑结构,比如链式复制或者多主复制,但基础的主从配置是这些的基础。安全方面也要注意,复制账户的权限应该仅限于复制,避免使用高权限账户。另外,备份和恢复策略也是必要的,以防配置过程中出现数据丢失。

最后,应该总结一下步骤,确保用户能一步步跟随操作,并提醒常见问题和解决方法。可能还需要给出一些常用的SQL命令示例,比如SHOW MASTER STATUS和SHOW SLAVE STATUS,这样用户可以直接复制粘贴使用。如果用户的环境有特殊需求,比如云服务器或者不同操作系统,可能还需要调整部分步骤,比如配置文件的位置或者服务的重启命令。

1 环境配置

1)主服务器(Master):IP 地址 192.168.1.100
2)从服务器(Slave):IP 地址 192.168.1.200
3)MySQL 版本:建议主从服务器版本一致(如 MySQL 5.7/8.0)
4)确保主从网络互通,防火墙开放 3306 端口。

2 主服务器(Master)配置

1) 修改 MySQL 配置文件

(1)编辑 my.cnf(路径一般为 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf):

[mysqld]
server-id = 1               # 唯一ID,主从不能重复
log-bin = mysql-bin         # 开启二进制日志
binlog_format = ROW         # 推荐使用ROW格式
expire_logs_days = 7        # 日志保留天数
max_binlog_size = 100M      # 单个日志文件大小
# 可选:指定同步的数据库(不配置则默认同步所有)
# binlog_do_db = db_name

(2)重启 MySQL 服务

service mysql restart

systemctl restart mysqld

用lnmp的也可以用lnmp mysql restart来启动

2) 创建复制专用账号

登录 MySQL,创建用于复制的用户:

CREATE USER 'repl'@'192.168.1.200' IDENTIFIED BY 'Repl_Password123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.200';
FLUSH PRIVILEGES;

3)备份主库数据并记录日志位置

(1)锁定数据库(防止写入变动):

FLUSH TABLES WITH READ LOCK;

(2)查看二进制日志状态(记录 File 和 Position)

SHOW MASTER STATUS;

(3)输出示例

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107      |              |                  |
+------------------+----------+--------------+------------------+

(4)保持当前窗口不关闭,新开终端备份数据

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

(5)解锁数据库

UNLOCK TABLES;

3 从服务器(Slave)配置

1)修改 MySQL 配置文件

(1)编辑 my.cnf:

[mysqld]
server-id = 2               # 唯一ID,不能与主服务器相同
relay-log = mysql-relay-bin # 中继日志
read_only = 1               # 从库只读(确保数据安全)

(2)重启 MySQL 服务

systemctl restart mysqld

2)导入主库备份数据

将 master_db.sql 复制到从服务器,并导入

mysql -u root -p < master_db.sql

3)配置主从复制连接

登录从服务器 MySQL,执行

CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Repl_Password123!',
MASTER_LOG_FILE='mysql-bin.000001',  -- 主库记录的File
MASTER_LOG_POS=107;                  -- 主库记录的Position

启动复制:

START SLAVE;

4 验证主从同步

1)检查从服务器状态

SHOW SLAVE STATUS\G

关注以下字段:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0(表示无延迟)

2)测试数据同步

在主库创建表或插入数据,观察从库是否同步。

5 常见问题解决

1)主从连接失败

检查网络:确保主从 3306 端口互通。
验证账号权限:确认 repl 用户权限和密码正确。
查看错误日志:tail -f /var/log/mysqld.log

2)主从数据不一致

重新初始化:从库停止复制,重新导入主库完整备份。
跳过错误(谨慎使用):

STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;

3)二进制日志问题

主库未开启 log-bin,或 server-id 重复。

6 扩展配置

GTID 复制:在 MySQL 5.6+ 启用 GTID 简化故障转移。
半同步复制:确保主库事务至少传输到一个从库。
多主复制:配置双主架构(需处理冲突)。

完成上述操作后,主从服务器已配置成功。还需要定期监控 SHOW SLAVE STATUS 确保复制健康。

0

评论 (0)

取消