0 前言
这几天趁着休息把几个VPS上的LNMP都升级了下,全部换成LNMP2.2,PHP和MYSQL也升级了,PHP升级为8.3,Mysql升级为MariaDB10.11,升级后发现主从同步又要重新配置了,折腾了七八个小时总算弄好了,为避免以后少走坑,记录一下出现的问题。
1 主服务器连不上
如果从服务器 telnet 主服务器IP 3306 连不上,大概率是主服务器的防火墙问题,Debian系统可以按如下操作:
1修改/etc/iptables的v4.rule
将第15行的(有的系统可能不在第15行,按代码查找)
-A INPUT -p tcp -m tcp --dport 3306 -j DROP
中的DROP改为ACCEPT,改后:
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
然后重启防火墙:
service iptables restart
2 主从数据库不同步
如果主服务器已有数据,需先手动同步数据到从服务器,重新导入一次:
# 在主服务器导出数据(包含日志位置信息)
mysqldump -u root -p --all-databases --master-data=2 > db_dump.sql
# 在从服务器导入数据
mysql -u root -p < db_dump.sql
3 检查主从服务器配置,确保ID、访问权限配置好
配置文件在/etc/my.cnf:
主服务器配置:
[mysqld]
server-id = 1
log_bin = mariadb-bin.log
bind-address = 0.0.0.0
从服务器配置:
[mysqld]
server-id = 2 -- 确保与主服务器不同
relay-log = mariadb-relay-bin.log
read_only = 1
注意lnmp一键包在在mysqld靠后的位置也有server-id = 1,不能重复
操作后分别重启:
lnmp mysql restart -- 修改配置后重启服务
重启后需要确认验证主库和从库的 binlog 和 server_id:
SHOW VARIABLES LIKE 'log_bin';
#应为 ON
SHOW VARIABLES LIKE 'server_id';
# 必须唯一且非零
4 CHANGE MASTER 命令参数有误
确保在从服务器上执行 CHANGE MASTER 命令时,参数完整且正确:
CHANGE MASTER TO
MASTER_HOST='主服务器IP',
MASTER_USER='replica_user',
MASTER_PASSWORD='your_password',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000001', -- 主服务器的二进制日志文件名
MASTER_LOG_POS=12345678; -- 主服务器的日志位置
关键点:
MASTER_LOG_FILE 和 MASTER_LOG_POS 必须与主服务器执行 SHOW MASTER STATUS 的结果完全一致。
如果主服务器未启用二进制日志(log_bin),需在主配置文件中启用并重启服务。
5 确保主服务器上的复制用户(如 replica_user)具有正确的权限:
在主服务器执行:
SHOW GRANTS FOR 'replica_user'@'从服务器IP或%';
正常显示权限如下:
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica_user'@'%';
如果有问题需要重新刷新权限:
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica_user'@'%' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
6 清除旧的复制配置
如果从服务器曾配置过主从复制,旧配置可能导致冲突。重置从服务器状态:
STOP SLAVE;
RESET SLAVE ALL; -- 清除所有旧的复制信息
然后重新执行 CHANGE MASTER 和 START SLAVE。
7 检查MariaDB错误日志
如果没找到原因,可以查看从服务器的错误日志(默认路径 /usr/local/mariadb/var/mariadb.err),定位具体错误原因:
tail -n 100 /usr/local/mariadb/var/mariadb.err
常见日志错误:
连接主服务器失败(检查防火墙、网络、端口)。
认证失败(用户名或密码错误)。
二进制日志文件不存在(MASTER_LOG_FILE 名称或位置错误)。
评论 (0)