快速搭建主从的脚本和问题排查
今天写了一个快速搭建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 因为刚写好,所以很多注释,细节还没有改进,稍后继续补充吧。
- Docker Compose 1.16.1 安装
- 教你如何用 RecyclerView 做一个好用的轮播图
- Docker-17.06.2 环境搭建
- 我所理解的Intent 和Intent-filter
- 基于 CentOS 搭建微信小程序服务
- 离线部署 CDH 5.12.1 及使用 CDH 部署 Hadoop 大数据平台集群服务
- 在开发中实现点击 WebView 中的图片,调用原生控件放大展示
- 大数据平台搭建 Hadoop-2.7.4 + Spark-2.2.0 快速搭建
- ajax 设置Access-Control-Allow-Origin实现跨域访问
- gradle新建工程,多项目依赖,聚合工程
- Apache Hive-2.3.0 快速搭建与使用
- HBase-1.3.1 集群搭建 - 报错整理
- 分布式唯一ID生成器Twitter 的 Snowflake idworker java版本
- 使用 Phoenix-4.11.0连接 Hbase 集群 ,并使用 JDBC 查询测试
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于Vue SEO的四种方案
- 一道SQL问题,你来试试的?
- 利用DNSLOG测试Fastjson远程命令执行漏洞
- goldengate classic模式在空闲数据库上抽取和应用数据延迟问题
- gorm jion查询映射(扫描scan)到新的结构体,必须使用select规定字段,与xorm的jion对比
- Spark UDF1 返回复杂结构
- Docker 部署Registry私有仓库+Harbor私有仓库
- goldengate同步无主键无唯一索引表的问题以及解决方案
- goldengate同步无主键无唯一索引表的问题以及解决方案--更新关于附加日志
- 分布式任务调度平台 → XXL-JOB 实战
- PyTorch2:张量的运算
- Django+Vue开发生鲜电商平台之11.首页、商品数量、缓存和限速功能开发
- Oracle私网mtu滚动修改实施方案
- 如何使用GOLDENGATE构建数据库的审计表之一
- [java][Servlet]Servlet 简介-Servlet 到 Spring MVC 的简化之路-Servlet/Tomcat/ Spring 之间的关系