一个因 SSL 配置导致的 MySQL 复制异常报错
在构建 MySQL 复制过程中,IO 线程始终连接不上主库,反复确认复制账号的权限、账号密码都没问题,最终定位为 SSL 配置的问题。
作者:木板。某全国性股份制银行 DBA。擅长 DB2,MySQL 和 Oracle 数据库的运行维护和调优、排错。
本文来源:原创投稿
- 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
故障背景
在做 MySQL 同构的数据迁移过程中,我们通常只需要按流程搭建主从保持数据同步即可。一般构建复制只要网络没问题,基本都能顺利构建成功。而这次踩了一个小坑,记录一下。
同事反馈做完 change master
后,IO 线程始终显示连接不上主库,已经反复确认该复制账号的权限、账号密码都没问题,且也验证了通过 MySQL 客户端的命令行输入相同的账号密码能正常连接到主库,已经做了以下场景的排除工作:
- 排除了账号密码错误的问题
- 排除了账号权限不足的问题
- 排除了网络不通的问题
故障分析
- 通过源端主库的错误日志也能持续观测到该复制用户频繁的尝试连接但都失败,错误日志的报错仅告知用了密码但访问受限,比较常规的报错信息。
2021-06-07T16:56:54.812721+08:00 121 [ERROR] [MY-010584] [Repl] Slave I/O for channel '': error connecting to master 'repl@10.186.61.27:3310' - retry-time: 60 retries: 1 message: Access denied for user 'repl'@'10.186.61.27' (using password: YES), Error_code: MY-001045 2021-06-07T16:57:54.817711+08:00 121 [ERROR] [MY-010584] [Repl] Slave I/O for channel '': error connecting to master 'repl@10.186.61.27:3310' - retry-time: 60 retries: 2 message: Access denied for user 'repl'@'10.186.61.27' (using password: YES), Error_code: MY-001045
通过 mysql.user
表观测复制用户的权限细节,观测到该用户有一个特殊的属性设置,ssl_type=ANY
该设置引起了注意。基于官方文档得知,该选项是用来控制用户是否开启 SSL 方式登录。如果为 ANY
则表示用该用户连接时,必须使用 SSL 方式,否则无法登录。
MySQL 客户端在 5.7 以后默认就开启 SSL,所以正常情况下无需明确指定即是 SSL 方式。
10.186.61.27:3310 SQL > select user,host,ssl_type from mysql.user; +------------------+-----------+----------+ | user | host | ssl_type | +------------------+-----------+----------+ | repl | % | ANY | | root | % | | | zhenxing | % | | | sysbench | 10.186.% | | | mysql.infoschema | localhost | | | mysql.session | localhost | | | mysql.sys | localhost | | | root | localhost | | +------------------+-----------+----------+ CHANGE MASTER TO MASTER_HOST='10.186.61.27', MASTER_USER='repl', MASTER_PASSWORD='xxxx', MASTER_PORT=3310, MASTER_AUTO_POSITION=1; Last_IO_Errno: 1045 Last_IO_Error: error connecting to master 'repl@10.186.61.27:3310' - retry-time: 60 retries: 1 message: Access denied for user 'repl'@'10.186.61.27' (using password: YES)
问题复现
尝试复现验证是否为该属性导致,在用 MySQL 登录数据库时明确的关闭 SSL 尝试 mysql --ssl-mode=disable
,结果如预期的一样,报错无法连接,但并没有报错是因为 SSL 的原因。
[root@10-186-61-27 ~]# mysql -h10.186.61.27 -urepl -p -P3310 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 29 Server version: 8.0.22-commercial MySQL Enterprise Server - Commercial Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. repl@10.186.61.27[(none)]> -- --ssl-mode=disable [root@10-186-61-27 ~]# mysql -h10.186.61.27 -urepl -p -P3310 --ssl-mode=disable ERROR 1045 (28000): Access denied for user 'repl'@'10.186.61.27' (using password: YES)
问题总结
-
默认情况下,复制构建是不使用 SSL 的,除非明确的指定 SSL 相关的参数。具体配置方式可参考官方文档。
-
用户连接异常的情况,不仅涉及权限、密码等问题,对于用户的连接控制属性也需要进行观测,如
mysql.user
表的以下字段 :- ssl_type
- max_questions
- max_updates
- max_connections
- max_user_connections
- plugin
- password_expired
- password_lifetime
- account_locked
-
1045
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
常见报错场景:- 用户名不正确
- 数据库用户受到连接主机限制,当前主机不允许连接
- 密码错误
- 密码填写错误
- 当密码出现在 Shell 脚本中,并且包含特殊字符如
$
,#
,!
等时 - 当密码出现在配置文件中,并且包含特殊字符
#
时,需要用双引号将密码括起来
- 开启了 SSL 连接属性
- DNS 服务器解析主机名异常
- 指定的数据库 IP 错误
- 使用了外部的认证方式,(如 AD、PAM、LDAP 等),但配置不正确
解决办法
-
关闭该用户强制需要 SSL 连接的属性
alter user xxx REQUIRE NONE;
-
change master
操作时,明确指定MASTER_SSL
等 SSL 参数配置
CHANGE MASTER TO MASTER_HOST='10.186.61.27', MASTER_USER='repl', MASTER_PASSWORD='xxxx', MASTER_PORT=3310, MASTER_AUTO_POSITION=1, MASTER_SSL=1;
关于 SQLE
爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。
SQLE 获取

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
思科发布纯 Rust 编写的 PuzzleFS 文件系统 Linux 驱动程序
PuzzleFS 是使用Rust 编写的 Linux 下一代容器文件系统,具有快速映像构建、支持直接安装和思科工程师正在开发的其他容器优化功能。 思科工程师 Ariel Miculas 在 Linux PuzzleFS 文件系统上发布了一个初始的补丁系列,其内核驱动程序完全使用 Rust 编写,这是在 Linux 正式引入 Rust 支持后的首批重要的Rust 文件系统内核驱动程序。 目前,这个PuzzleFS for Linux 的 Rust 驱动程序被认为是概念验证阶段,还处于对社区“征求意见”的状态。 补丁系列对 PuzzleFS 进行了详细的描述: Puzzlefs 是一个容器文件系统,旨在解决现有 OCI 格式的局限性。 该项目的主要目标是减少重复、可重现的图像构建、直接安装支持和内存安全保证,其中一些灵感来自 OCIv2 设计文档。另一个目标是可复制的图像构建,这是通过定义图像格式的规范表示来实现的。 puzzlefs 的一个关键特性是支持直接安装,它与 fs-verity 一起提供数据完整性。目前,puzzlefs 作为用户空间文件系统 (FUSE) 实现。只读内核文件...
- 下一篇
短视频云端批量混剪实操指南
本文为阿里云智能媒体服务 IMS「智能内容创作」实践指南第一期,讲述围绕新媒体广告营销场景,通过“去重策略”全自动批量混剪短视频,助力更高效、更快速地创作优质短视频内容。 欧叔|作者 5G 时代,越来越多的企业把短视频营销从“尝试”演变为“需求”。视频素材更直观、更形象的展现形式,往往能直击用户痛点,带来更好的广告投放效果。 由于各大短视频平台采用了“去重机制”以防视频盗用,内容完全相同的视频会采取“屏蔽”、“限流”处理,这就要求投放于不同账号的视频需要在内容、结构上有所差别。因此,基于有限数量的基础素材,智能化生成指定数量的新视频,是营销短视频创作的常见思路。 本文从实际场景案例入手实践阿里云智能内容创作的“批量混剪”功能,通过提交剪辑需要的数据结构 Timeline 对云端的音视频内容进行二次剪辑生产,将有限个数的素材,通过不同的排列组合、添加不同的转场、特效、字幕、音乐,最终合成出多个不同的成片视频。 01 Timeline 概念说明 如何配置Timeline? 在 iMovie 和 Premiere 等视频编辑软件中,一次剪辑会包含多个轨道以及相应素材的位置、时长等信息,而在阿...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8