- 注册时间
- 2008-5-19
- 最后登录
- 2012-5-3
- 在线时间
- 1762 小时
- 阅读权限
- 200
- 积分
- 14979
- 帖子
- 2524
- 主题
- 1200
- 精华
- 25
- UID
- 1
  
 - 签到
- 81
- 注册时间
- 2008-5-19
- 最后登录
- 2012-5-3
- 在线时间
- 1762 小时
- 阅读权限
- 200
- 积分
- 14979
- 帖子
- 2524
- 主题
- 1200
- 精华
- 25
- UID
- 1
|
来自:http://www.hiadmin.com/mysql-pro ... %E6%96%B9%E6%A1%88/
前段时间和网友jabincn探讨关于mysql proxy部署了读写分离后,无法用ems等工具连接到slave db的问题;
测试的结果:
mysql> show databases;
ERROR 1105 (07000): can't change DB to on slave 192.168.0.9:3306
mysql> select count(*) from cjhjd.t_plan; ERROR 1105 (07000):
can't change DB to on slave 192.168.0.9:3306
mysql> use cjhjd;
Database changed mysql> select count(*) from cjhjd.t_plan;
+----------+
| count(*) |
+----------+
| 1440 |
+----------+
1 row in set (1.10 sec)
必须先键入指令,use dbname;后才能正常进行数据库操作;
发现问题:
发生的原因和rw-splitting.lua脚本中无法定义到slave DB库名称有关;
日志表现为:
server default db: cjhjd
client default db:
syncronizing
client default db未正确定义。
询问mysql官方得到解决方案,在rw-splitting.lua的脚本中增加代码如下:
-- if client and server db don't match, adjust the server-side
--
-- skip it if we send a INIT_DB anyway
if cmd.type ~= proxy.COM_INIT_DB and c.default_db and c.default_db ~= "" and c.default_db ~= s.default_db then
print(" server default db: '" .. s.default_db .. "'")
print(" client default db: '" .. c.default_db .. "'")
print(" syncronizing")
proxy.queries:prepend(2, string.char(proxy.COM_INIT_DB) .. c.default_db)
end
修改完后,根据测试结果一切顺利。
感谢jabincn对以上问题的不断追踪和到最后圆满的解决,并提供该方案给我们,使我们共同学习和提高。 |
|