快速搭建主从的脚本和问题排查

    今天写了一个快速搭建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 -P33081
mysql: [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 11
Server 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 -P33091
Warning: 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
因为刚写好,所以很多注释,细节还没有改进,稍后继续补充吧。





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-2144422/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-2144422/

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值