宝塔面板MySQL主从复制配置:宝塔面板配置MySQL主从复
为什么你需要掌握MySQL主从复制
MySQL主从复制是数据库高可用和读写分离的基础技术。
简单说,一台服务器做主库记录所有写入操作,另一台或多台从库实时同步主库的数据。
这么做的好处很明显:主库挂了可以从库顶上,或者把查询请求分流到从库减轻主库压力。
在宝塔面板环境下配置这个功能并不复杂,只要理解几个核心步骤,新手也能顺利跑通。
准备工作:两台服务器与宝塔面板环境
你需要准备两台安装了宝塔面板的Linux服务器(CentOS或Ubuntu均可)。
主库服务器(假设IP为192.168.1.10)和从库服务器(192.168.1.20)。
确保两台服务器的MySQL版本一致(推荐5.7或8.0),并且在宝塔面板的安全组中放行MySQL端口3306。
另外,从库需要能通过网络访问主库的3306端口,简单测试方法是在从库服务器上用 telnet 验证:
telnet 192.168.1.10 3306
如果连接成功,说明网络没问题。
如果失败,请检查主库的防火墙和云服务商的安全组规则。
主库配置:开启二进制日志并创建复制用户
登录主库的宝塔面板,在左侧菜单找到“软件商店”-> 点击MySQL的“设置” -> 选择“配置修改”。
找到下面几项,修改成对应的值:
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
- server-id 在主从复制中必须唯一,主库设为1,后面从库要设为其他数字(如2)。
- log-bin 开启二进制日志,这是主从复制的基础。
- binlog-format 建议用ROW模式,兼容性最好。
修改完成后重启MySQL。
然后通过宝塔面板的“数据库”菜单或直接使用phpMyAdmin创建一个用于复制的用户。
推荐用命令行操作(在宝塔面板的“终端”中执行):
CREATE USER 'repl'@'%' IDENTIFIED BY '你的强密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
注意:生产环境建议限制从库IP,把%换成从库的具体IP,更安全。
从库配置:设置Server ID并执行CHANGE MASTER
在从库的宝塔面板中,同样进入MySQL配置修改,找到server-id项,改为2:
server-id = 2
保存并重启MySQL。
这时候需要获取主库当前的二进制日志位置。
在主库服务器上执行:
SHOW MASTER STATUS;
记下File和Position字段的值,例如File为mysql-bin.000001,Position为154。
然后登录从库的MySQL(同样可以宝塔面板的数据库管理或命令行),执行以下命令:
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='repl',
MASTER_PASSWORD='你的强密码',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
启动从库同步:
START SLAVE;
查看同步状态:
SHOW SLAVE STATUS\G;
重点看两个字段:Slave_IO_Running 和 Slave_SQL_Running,必须都是 Yes。
如果出现 No 或 Connecting,后面避坑部分会解答常见原因。
验证同步效果与高频问题解答
验证方法很简单:在主库上创建一个测试数据库或表,插入一条数据,然后在从库上查询,如果能查到同样的数据,说明同步成功。
高频问题一:Slave_IO_Running: Connecting。
原因:从库无法连接到主库的3306端口。检查防火墙、安全组,以及主库是否开启了跳板?或者MASTER_HOST写成了域名导致DNS解析失败。直接用IP最稳妥。
高频问题二:Slave_SQL_Running: No。
原因:从库上执行了写入操作导致数据冲突,或者主库的binlog被清除。解决办法:先停掉从库同步(STOP SLAVE),然后重新设置MASTER_LOG_FILE和MASTER_LOG_POS为当前主库的状态。如果数据差异大,考虑备份主库后导入从库再配置同步。
避坑提醒:配置完成后,不要在从库上手动写入数据,否则会导致同步中断。
如果需要读写分离,请通过程序区分读写连接。
另外,如果主从服务器时间不同步,也可能引发奇怪错误。
建议在宝塔面板中安装NTP服务或使用系统自带的chronyd同步时间。
按照以上步骤操作,宝塔面板MySQL主从复制配置基本就能跑通。
遇到异常时优先回看避坑和高频问题部分,一般都能解决。
祝你在数据库高可用的路上顺利起步!