设为首页 收藏本站
查看: 595|回复: 0

[经验分享] MaxScale2.2如何自动加载MySQL用户

[复制链接]

尚未签到

发表于 2018-10-6 10:13:26 | 显示全部楼层 |阅读模式
之前在[《MySQL性能管理及架构设计》请添加链接描述](https://coding.imooc.com/class/49.html)课程中为大家讲解了如何使用Maxscale来实现数据库的读写分离的方案。近期在课程交流群中有同学提出在使用Maxscale2.2版本时,无法自动加载MySQL5.7中的用户信息。  所以我就研究了一下新版本的Maxscale,发现确实如此,这是什么原因呢?由如何解决这个问题呢?
  

  我们先来说一说原因,我们来看一下下面的SQL
  SELECT u.user, u.host, d.db, u.select_priv, u.authentication_string
  FROM mysql.user AS u LEFT JOIN
  mysql.db AS d ON (u.user = d.user AND u.host =
  d.host)
  WHERE u.plugin = '' AND u.user NOT IN ('root')
  UNION
  SELECT u.user, u.host, t.db, u.select_priv, u.authentication_string
  FROM mysql.user AS u LEFT JOIN
  mysql.tables_priv AS t ON (u.user = t.user AND u.host = t.host)
  WHERE u.plugin = '' AND u.user NOT IN ('root')
  这个是MaxScale为了加载MySQL的用户,所执行的SQL,大家注意一下u.plugin=''这个过滤条件,这个plugin列来自于mysql.user用户,用于表示MySQL认证用户的方式,在Mysql5.6之前的版本中默认为'',而在MySQL5.6之后的版本默认值为mysql_native_password.所以在新版本的MySQL中执行这个SQL是查询不出任何数据,这也就是为什么MaxScale不能加载MySQL用户的原因了。不过有意思的是,在mariadb中plugin这一列目前还是一直保持默认为''的状态,所以如果maxscale的端连接的是Mariadb则不会出现问题。
  原因找到了,那么我们怎么解决呢?
  当然是修改maxscale中的这条SQL了,好在我们可以方便的获得maxscale的源代码。我们可以通过下面的方式获得maxscale的源代码
  git clone https://github.com/mariadb-corporation/MaxScale.git
  然后对
  server/modules/authenticator/MySQLAuth/dbusers.c文件进行修改,把从第45行到51行的SQL,修改为:
  define NEW_LOAD_DBUSERS_QUERY "
  SELECT u.user, u.host, d.db, u.select_priv, u.%s \
  FROM mysql.user AS u LEFT JOIN mysql.db AS d \
  ON (u.user = d.user AND u.host = d.host) WHERE u.plugin = 'mysql_native_password' %s \
  UNION \
  SELECT u.user, u.host, t.db, u.select_priv, u.%s \
  FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t \
  ON (u.user = t.user AND u.host = t.host) WHERE u.plugin = 'mysql_native_password' %s"
  然后再对修改后的源码进行编译安装就可以了。最后如果大家对MySQL感兴趣的话可以关注一下我之前所发布的MySQL两门实战课程。
  《MySQL性能管理及架构设计》
  《高性能可扩展MySQL数据库设计及架构优化 电商项目》



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-613569-1-1.html 上篇帖子: MySQL在线大表DDL操作 下篇帖子: Mysql的varchar排序按照数字顺序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表