博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速搭建主从的脚本和问题排查
阅读量:7062 次
发布时间:2019-06-28

本文共 2521 字,大约阅读时间需要 8 分钟。

    今天写了一个快速搭建MySQL主从环境的脚本,思路和前几天发布的MGR快速搭建的有一点像,但是最根本的差别就是这个脚本支持5.6,5.7版本。其实sandbox本身也能够做这些事情,自己写这个只是想把这个过程自己记录下来,明白可能在哪些地方有一些注意的细节。

  本来以为写起来会很容易,结果在最后调试的时候发现MySQL 5.7版本没问题了,MySQL 5.6版本碰到了问题。提示的信息显示从库连接主库抓取binlog的时候连接有问题,换句话说,就是数据库连接失败,导致从库无法应用binlog.

  这就奇怪了,MySQL 5.7可以,到了MySQL 5.6怎么就不行了呢?

我看了下,涉及到复制用户的语句就两行:

CREATE USER rpl_usersss@'%';

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';

仔细看也没什么特别之处啊。

难道是其他的地方的配置有问题?我们简单来对比一下。

MySQL 5.7中,使用如下的方式连接是没有问题的

# /usr/local/mysql_5.7/bin/mysql  -urpl_user -prpl_pass -h 127.0.0.1 -P33081mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 11Server version: 5.7.19-log MySQL Community Server (GPL)。。。Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL 5.6中,用户名密码不变的情况下,为什么使用127.0.0.1就不行了呢。

# /usr/local/mysql_5.6/bin/mysql  -urpl_user -prpl_pass -h 127.0.0.1 -P33091Warning: Using a password on the command line interface can be insecure.ERROR 1045 (28000): Access denied for user 'rpl_user'@'localhost' (using password: YES)
我前前后后花了不少的时间去对比,发现始终是提示用户名密码错误,但是我确认用户名密码是相同的。带着疑问我查看了mysql.user表,看看里面的一些基本信息。mysql> select user,host from mysql.user;+----------+------------------+| user     | host             |+----------+------------------+| rpl_user | %                || root     | 127.0.0.1        || root     | ::1              ||          | localhost        || root     | localhost        ||          | oel64.oracle.com || root     | oel64.oracle.com |+----------+------------------+7 rows in set (0.00 sec)这样一个配置,用户rpl_user是使用域名解析的方式,%的范围很广,所以倒不存在特殊的映射关系。带着疑问,从安全的角度来看,MySQL 5.6中有一些匿名用户,还有默认的test库,这些是应该改进的。而确实在MySQL 5.7中已经做了相应的修复,或者说是改进吧。5.7 默认就删除了匿名用户,mysql.user默认的情况如下。mysql> select user,host from mysql.user;+---------------+-----------+| user          | host      |+---------------+-----------+| rpl_user      | %         || mysql.session | localhost || mysql.sys     | localhost || root          | localhost |+---------------+-----------+4 rows in set (0.04 sec)所以我在MySQL 5.6中删除了匿名用户。mysql> delete from mysql.user where user='';Query OK, 2 rows affected (0.03 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)没想到这个操作完成后,原本提示密码错误的连接问题就引刃而解了。我修改了脚本,反反复复模拟了多次,能够复现这类问题,也就暂时宣告了这个问题的一个基本解决。如果回过头来看这个问题,可能会有更多的收获,比如从安全性方面的这些考虑,可能有些问题暂时不会成为问题,但是会是潜在问题,有些问题虽然暂时不会有明显的影响,但是在一些特定的场景下,可能表现形式会更加复杂,而解法其实就很简单了。新写的脚本放在了github上,地址是:https://github.com/jeanron100/mysql_slaves因为刚写好,所以很多注释,细节还没有改进,稍后继续补充吧。

转载地址:http://nkbll.baihongyu.com/

你可能感兴趣的文章
安装win7系统后不小心重新分区了,别的盘的数据怎么找回
查看>>
Spring学习-day13
查看>>
一看就能学会的H5视频推流方案
查看>>
Spring和SpringMVC的区别
查看>>
学生登录管理系统
查看>>
Linux的浏览器中等宽字体显示不正常的问题
查看>>
【Ansible】 Playbook 中的变量和引用
查看>>
仓库常需要对货品和数据记录
查看>>
使用c++实现乘法表输出
查看>>
100个常用的linux命令
查看>>
我的友情链接
查看>>
每天laravel-20160817| Container -20
查看>>
通用权限管理框架
查看>>
我的友情链接
查看>>
申请SSL证书怎样验证域名所有权
查看>>
Java开发在线打开编辑保存Word文件
查看>>
将学习进行到底!为普通人的奋斗送福
查看>>
常用十大python机器学习库
查看>>
TCP/IP三次握手四次挥手
查看>>
Systemstate Dump分析经典案例(下)
查看>>