跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

宝塔面板如何实现数据库读写分离_使用Atlas或MyCat中间件配置

宝塔面板本身不提供读写分离功能,必须依赖Atlas或MyCat等中间件实现;所有关键配置均在中间件侧,主从复制需手动配置,应用连接须指向中间件端口而非直连MySQL。 宝塔面板本身不提供读写分离功能,必须靠 Atlas 或 MyCat 这类中间件实现;直接在宝塔里点几下是没用的,所有关键配置都在中间件侧。 Atlas 启动失败或连接被拒绝的常见原因 Atlas 是轻量级代理,但默认配置极容易出问题。它不兼容 MySQL 8.0+ 的默认认证插件
caching_sha2_password
,启动时日志里常出现
ERROR 1045 (28000): Access denied for user
或直接静默退出。 主库用户必须显式指定为
mysql_native_password
认证:执行
ALTER USER 'atlas_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_pass'; FLUSH PRIVILEGES;
配置文件
/usr/local/mysql-proxy/conf/test.cnf
中的
pwds
字段必须 Base64 编码密码,不能明文写;可用
echo -n "your_pass" | base64
生成 Atlas 默认监听
127.0.0.1:1234
,应用连不上——得改成
0.0.0.0:1234
,且宝塔防火墙要放行该端口 启动命令必须带完整路径:
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/test.cnf
,直接运行
mysql-proxy
会加载错配置 MyCat 配置中 writeHost/readHost 不生效的典型场景 很多人照着文档填了
schema.xml
,但所有 SELECT 请求仍打到主库,
balance="1"
像摆设。根本原因是路由规则未触发或数据源未激活。 宝塔Windows面板8.5.2 宝塔Windows面板8.5.2专为Windows Server设计,提供可视化服务器管理界面。支持一键部署IIS/Nginx、PHP、MySQL等环境,集成文件管理、数据库操作、实时监控及安全防护功能,大幅降低Windows服务器运维门槛,提升管理效率。 下载
节点里的
writeHost
必须指向主库真实 IP 和端口(如
192.168.1.10:3306
),不能写
localhost
或
127.0.0.1
(MyCat 容器或远程部署时会连不通)
readHost
必须和
writeHost
在同一
下,且不能只配一个——哪怕只有一个从库,也要写成
检查
server.xml
中
段是否启用了
readOnly="false"
(写用户)和
readOnly="true"
(读用户),否则 MyCat 会把所有请求都当写处理 应用连接字符串必须用 MyCat 的端口(如
127.0.0.1:8066
),且数据库名必须匹配
schema.xml
中定义的
logicalTable
名,大小写敏感 为什么 SHOW SLAVE STATUS 显示正常,但 MyCat/Atlas 仍读不到从库数据 这不是中间件问题,而是主从复制本身存在隐性断点:比如主库开了
binlog_ignore_db
却漏配系统库,或从库 SQL 线程卡在某个 DDL 上(
Slave_SQL_Running_State
显示
Waiting for table metadata lock
)。 执行
SHOW SLAVE STATUS\G
后,重点看
Seconds_Behind_Master
是否持续 > 0,以及
Exec_Master_Log_Pos
是否停滞不动 检查从库错误日志:
tail -f /www/server/mysql/data/*.err
,常见报错如
Could not execute Write_rows_v1 event on table xxx; Error_code: 1032; handler error HA_ERR_END_OF_FILE
,说明主从表结构已不一致 MyCat 日志(
logs/mycat.log
)里搜
can't get connection
或
connection refused
,确认它是否真连上了从库的 IP:PORT 用
mysql -h 192.168.1.11 -P 3306 -u readonly -p
手动连从库测试 SELECT,排除网络和账号权限问题 真正难的不是配通,而是让读流量稳定落到从库、同时避开主从延迟导致的脏读。业务代码里“写完立刻查”的逻辑,必须绕过中间件走主库直连,这个控制点不在宝塔也不在 MyCat 配置里,而在你自己的 DAO 层。

相关文章