技术分享 | mysql 客户端对配置文件的读取顺序

MySQL--关于my.cnf配置文件中的常见参数、参数值及参数说明 【学习背景】 本文主要分享一下MySQL日常开发运维当中,关于配置文件my.cnf中[client]、[mysqld]、[mysql]、[mysqld_safe]四个组下比较常见的参数、参数值以及参数值说明。 学习目录一、[client]组下参数二、[mysqld]组下参数三、[mysql]组下参数四、[mysqld_safe]组下参数 一、[client]组下参数 [client] #客户端端口号 port=3306 #套接字文件,本地连接使用 socket=/data/mysqldat 阅读详情

作者:余振兴

爱可生 DBA 团队成员,热衷技术分享、编写技术文档。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


我们都知道使用 mysql 客户端去访问 MySQL 数据库时,会以一定的顺序去读取不同位置的配置文件,但在一次做测试时,发现除了按照顺序读取默认的配置文件路径外,mysql 还有额外的读取配置文件的行为,以下是在我本地测试环境做测试时遇到的一个有意思的小知识点

一、场景现象

在本地做测试时,发现一个奇怪的现象,当我使用 socket 打算登录数据库,发现不指定用户时,默认并不是用的 root 用户登录,而是被修改为了 zhenxing 用户

[root@10-186-61-162 ~]# mysql -S /data/mysql/3306/data/mysqld.sock -p
Enter password:
ERROR 1045 (28000): Access denied for user 'zhenxing'@'127.0.0.1' (using password: NO)

通过观测当前mysql客户端的默认参数行为,可以看到与报错一致,默认用户确实是变为了zhenxing

[root@10-186-61-162 ~]# mysql --help|egrep "user|host|port"
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in
  -u, --user=name     User for login if not current user.
host                              127.0.0.1
port                              3306
user                              zhenxing

在这里作为 DBA ,我们的第一反应是肯定是查看 /etc/my.cnf 文件中是否对默认用户做了配置,于是查看该配置文件的客户端配置参数,如下

[client]
host            = 127.0.0.1
user            = root
port            = 3306

[mysql]
host            = 127.0.0.1
user            = root
port            = 3306
prompt          = '\U[\d]> '

发现配置文件中的反而配置值是 root 用户,并没有对 zhenxing 用户做配置,看来读取的还不是这个配置文件,那是不是读取了其他配置文件呢,继续排查其他的配置文件

二、排查思路

1、获取配置文件读取顺序

我们先打印出所有可能读取的配置文件及其读取的顺序做逐个排查

## 查看mysql客户端读取配置文件的顺序
[root@10-186-61-162 ~]# mysql --verbose --help|grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /data/mysql/3306/base/my.cnf ~/.my.cnf
2、排查 /etc/my.cnf

/etc/my.cnf 在前面已经确认没有做相关配置,这里直接跳过

3、排查 /etc/mysql/my.cnf

查看 /etc/mysql/my.cnf 配置,发现不存在相关配置,排除

[root@10-186-61-162 ~]# cat /etc/mysql/my.cnf
cat: /etc/mysql/my.cnf: 没有那个文件或目录
4、排查 /usr/local/mysql/etc/my.cnf

查看 /usr/local/mysql/etc/my.cnf 配置,发现不存在相关配置,排除

[root@10-186-61-162 ~]# cat /usr/local/mysql/etc/my.cnf
cat: /usr/local/mysql/etc/my.cnf: 没有那个文件或目录
5、排查 /data/mysql/3306/base/my.cnf

查看 /data/mysql/3306/base/my.cnf 配置,发现不存在相关配置,排除

[root@10-186-61-162 ~]# cat /data/mysql/3306/base/my.cnf
cat: /data/mysql/3306/base/my.cnf: 没有那个文件或目录
6、排查 ~/.my.cnf

查看 ~/.my.cnf 依旧不存在相关配置,排除

[root@10-186-61-162 ~]# cat ~/.my.cnf
cat: /root/.my.cnf: 没有那个文件或目录

至此按照 mysql --verbose --help|grep my.cnf 获取的配置文件读取路径都被排除,都未对用户 zhenxing 做配置

7、使用 no-defaults 排除配置文件干扰
  • 尝试用 --no-defaults 不读取任何配置文件排除配置文件的干扰,看是否会恢复正常
[root@10-186-61-162 ~]# mysql --help|grep no-defaults
--no-defaults           Don't read default options from any option file

## 查看不读取配置文件时,客户端的默认值
[root@10-186-61-162 ~]# mysql --no-defaults --help|egrep "user|host|port"
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in
  -u, --user=name     User for login if not current user.
host                              127.0.0.1
port                              3306
user                              zhenxing

## 查看读取的所有客户端配置文件参数设置
[root@10-186-61-162 ~]# mysql --print-defaults
mysql would have been started with the following arguments:
--host=127.0.0.1 --user=root --port=3306 --host=127.0.0.1 --user=root --port=3306 --prompt=\U[\d]>  --user=zhenxing --password=***** --host=127.0.0.1 --port=3306

从上面输出的结果来看,我们可以得到以下2个基本现象:

  • 即使指定--no-defaults不读取任何配置文件,这个user的默认值依旧是zhenxing用户
  • 当输出--print-defaults获取实际运行值时,可以看到/etc/my.cnf下的[client],和[mysql]标签下的属性配置从上到下被正确获取
  • 除了/etc/my.cnf外,在最后还有--user=zhenxing --password=***** --host=127.0.0.1 --port=3306这4个参数被额外添加到了命令最后

ps: mysql 客户端和服务端读取配置的原则都是文件读取从上到下,后面相同参数配置覆盖前面的参数

经过一系列的排除,依旧没找到这个默认值被修改的源头

8、打印 mysql 客户端的系统调用
  • 使用 strace 直接观测 mysql 客户端在执行时到底调用了哪些配置,以下是调用 my.cnf 相关配置的片段(对结果做了精简输出)
1. stat("/etc/my.cnf", {st_mode=S_IFREG|0644, st_size=195, ...}) = 0      = 3
2. stat("/etc/mysql/my.cnf", 0x7ffd56813180) = -1 ENOENT (No such file or directory)
3. stat("/usr/local/mysql/etc/my.cnf", 0x7ffd56813180) = -1 ENOENT (No such file or directory)
4. stat("/data/mysql/3306/base/my.cnf", 0x7ffd56813180) = -1 ENOENT (No such file or directory)
5. stat("/root/.my.cnf", 0x7ffd56813180)   = -1 ENOENT (No such file or directory)
6. stat("/root/.mylogin.cnf", {st_mode=S_IFREG|0600, st_size=336, ...}) = 0

通过以上调用顺序可以可到以下结论:

  • 1-5行的调用顺序与我们验证的逻辑基本一致
  • 2-5行显示为No such file or directory与我们的验证结果一致
  • 第6行输出,增加了一个对/root/.mylogin.cnf的读取操作,并且可以知道当前这个文件是确实存在的
9、排查 /root/.mylogin.cnf

看到这个文件我们一般都知道,这个是 mysql_config_editor 工具用来配置 login-path 的生成的文件,我们可以用以下方式查看当前的配置信息

[root@10-186-61-162 ~]# mysql_config_editor print --all
[client]
user = "zhenxing"
password = *****
host = "127.0.0.1"
port = 3306

这里可以看到配置中有一个 client 标签的连接参数配置,配置的内容正好是我们文章开头显示的异常默认值,到这我们基本定位了造成这个奇怪现象的原因,出现这个故障场景的原因也是刚好这台是测试环境曾经做过一些 mysql_config_editor 用法的测试,导致了该现象的发生

三、场景总结

1、mysql 客户端除了会按照命令 mysql --verbose --help|grep my.cnf输出的常规的顺序读取配置外,在最后还会额外的读取 .mylogin.cnf 文件中配置

2、即使指定了 --no-defaults ,依旧会去读取.mylogin.cnf中的[client] ,[mysql] 标签的配置值

其中官方文档也在以下链接中给到了明确的说明(以下是关键描述片段)

  • https://dev.mysql.com/doc/refman/8.0/en/option-file-options.html
The mysql client reads [client] and [mysql] from other option files, and [client], [mysql], and [mypath] from the login path file.

Client programs read the login path file even when the --no-defaults option is used. This permits passwords to be specified in a safer way than on the command line even if --no-defaults is present.
  • 个人猜测当时这么设计的目的是考虑如备份脚本等需要连接数据库时,为了防止非必要的参数文件的干扰,在指定了 --no-defaults 参数后依旧能使用到 .mylogin.cnf 文件中配置的加密密码,提升安全性
新手避坑指南:从GEO数据库下载单细胞测序数据的5个关键步骤(附实操截图) 本文为单细胞测序数据下载新手提供5个关键避坑步骤,涵盖数据搜索准备、样本量评估、文件选择决策、元数据诊断及高效下载技术。通过实操截图和代码示例,帮助研究者快速锁定GEO数据库中的优质单细胞测序数据,避免常见错误。 阅读详情

相关推荐

产品经理如何运用AI提升工作效率

AI技术的应用为产品经理的工作流程带来了显著的效率提升。从需求收集到产品上线,AI可以在多个阶段提供智能化支持,帮助产品经理更好地理解用户需求、优化产品设计、提高开发和测试效率。在未来,随着AI技术的不断发展,产品经理将能够更加高效地管理产品生命周期,为用户提供更优质的产品体验。应用 | AI + 千行百业欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

不想宅的冷同学 1336

MySQL安装 总是 No such file or directory

MySQL安装 总是 No such file or directory

weixin_44126629的博客 3500

【HDL系列】除法器(3)——基2 SRT算法

目录 一、除法表示 二、数字递归算法基础公式 三、QDS(Quotient Digit Selection)函数 四、基2 SRT算法 一、除法表示 除法被定义如下: 其中,x是被除数,d是除数,q是商,rem是余数。 商的精度由ulp(unit of last position)来决定: 如果ulp=1, 商q则是整数; 如果ulp=r^(-n),n是商数个数,r是所有输入操作数的基,此时商为小数。 二、数字递归算法基础公式 在使用数字递归算法(Digit Re...

纸上谈芯的专栏 8155

mysql 免密码进入_MySQL 5.7 三种免密码登录

方法一:通过设置client标签,直接编辑/etc/my.cnf文件[client]user=rootpassword=123456port= 3306我们直接输入mysql就可以进行登录mysql数据库,这种不好的地方就是我们的密码是不加密的,可见的,是不安全的。[root@tz-ftp-yum ~]# mysqlWelcome to the MySQL monitor. Commands e...

weixin_32394015的博客 2853

CVPR 2024 LaTeX 模板实战:从匿名提交到图表排版的避坑指南

本文详细解析CVPR 2024 LaTeX模板的使用技巧,涵盖匿名提交设置、pdfLaTeX编译器选择、图表排版优化等关键环节。通过实战案例演示智能引用、公式编号、三线表制作等专业技巧,帮助研究者高效完成论文格式规范,规避常见排版错误。特别针对双栏格式下的图片定位、跨栏表格等复杂场景提供解决方案。

weixin_42561040的博客 453

2.2.1.3-移动平均线(python画k线、均线、5日线、买卖点图、python均线策略)

* 绘制一个k线图,也就是蜡烛图 * 计算5日均线值、10日均线值 * 在k线图上,绘制5日线和10日线图 * 在5日线上,绘制与10日线的交叉点(上穿、下穿时) python画k线、均线、5日线、买卖点图、python均线策略

KelvinLiu 3413

MySQL数据库 my.cnf文件详解

cat /etc/my.cnf #客户端设置,即客户端默认的连接参数 [client] #默认连接端口                 port = 3306 #用于本地连接的socket套接字 socket = /data/mysqldata/3306/mysql.sock #编码 default-character-set = utf8mb4 #服务端基本设置 [mysqld] #MySQL监...

weixin_42754270的博客 3824

远程桌面连接失败?手把手教你解决CredSSP加密Oracle漏洞(Win10/Win11通用)

本文详细解析了Windows远程桌面连接因CredSSP加密Oracle漏洞安全更新导致的“身份验证错误”问题。文章从原理入手,提供了通过组策略编辑器(适用于专业版)和注册表编辑器(适用于家庭版)两种核心解决方案,指导用户将安全策略调整为推荐的“缓解”模式,以在保障安全的前提下恢复连接,并给出了高级脚本处理与安全最佳实践。

u6v7w8x的博客 724

Mysql配置文件读取顺序

一、MySQL读取配置文件的顺序读取顺序:/etc/my.cnf > /etc/mysql/my.cnf > /usr/etc/my.cnf > ~/.my.cnf命令验证:[root@mysql ~]# mysql --verbose --help | grep my.cnf order of preference, my.cnf, ...

qq_29663071的博客 1687

星载SAR系统参数设计过程自动化方法研究

 本文提出了一种 SAR系统参数自动化设计的 方法。首先,针对部分参数仍需手工选取的现状 建立了最优化求解模型,并给出了 PRF 和波位位 置的优化选取结果,使参数设计流程更加高效便 捷。然后,针对 SAR 系统参数设计过程中部分技 术指标的评测结果不满足用户需求时无法自动调 节的现状,采用 PID 控制器对方位向天线尺寸、信 号带宽、PRF 等参数进行自动调节,使得方位分辨 率、距离分辨率、方位模糊比等技术指标向用户需 求值逐步靠近。通过仿真实验验证了该方法的可 行性,实现了SAR系统参数设计过程的自动化

qq_43416206的博客 1523

【硬刚Hadoop】HADOOP MAPREDUCE(1):概述

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 2MapReduce优缺点 2.1 优点 1)MapReduce易于编程 它简单的实现一些接口,就可以完成一个分布式程序..

微信搜:import_bigdata,大数据领域硬核原创作者 462

MySQL配置文件读取顺序

在启动MySQL数据库时可以没有配置文件,这种情况下,MySQL会按照编译时的默认参数设置启动实例。按照顺序读取配置文件,且如果多个配置文件中有相同的参数,则以读取到的最后一个配置文件为准。

Lxn2zh的博客 751

Machine Unlearning: A Survey

机器学习已经引起了广泛的关注,并发展成为一种使能技术,用于广泛的高度成功的应用,如智能计算机视觉、语音识别、医疗诊断等。然而,由于隐私、可用性和/或被遗忘权,一些特定样本的信息需要从称为机器遗忘的模型中删除,这就产生了一种特殊的需求。这项新兴技术因其创新性和实用性而引起了学术界和工业界的极大兴趣。与此同时,这个雄心勃勃的问题导致了许多旨在应对其挑战的研究工作。据我们所知,没有任何研究分析过这一复杂的主题,也没有比较过现有的遗忘解决方案在不同场景下的可行性。因此,通过这项调查,我们旨在了解遗忘技术的关键概念。

c_cpp_csharp的专栏 1158

MySQL客户端对配置文件读取顺序的问题场景

我们都知道使用MySQL客户端来访问MySQL数据库时,会以一定的顺序读取不同位置的配置文件,但在一次做测试时,发现除了按照顺序读取默认的配置文件路径外,MySQL还有额外的读取配置文件的行为。如下是爱可生开源技术社区最近推送的一篇文章《技术分享 | mysql 客户端对配置文件的读取顺序》,就讲了这方面的一些问题,值得借鉴。一、场景现象在本地做测试时,发现一个奇怪的现象,当使用socket打算登...

bisal的专栏 250

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

mysql my.cnf配置文件详解

linux 通过 find /root -name my.cnf。windows 从安装目录查找。

我哎GIS博客 3106

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

2、mysql的启动选项和配置文件介绍

百因必有果 mysql服务端可以指定允许同时接入的客户端数量max-connections、客户端与服务器的通信方式、表的默认存储引擎default_storage_engine等等设置项,使得我们可以更加灵活地使用它。 进入正题 我们讲的是基于linux系统的,本文我们主要讲一下: 1、有哪些常用的启动选择配置方式? 2、采用配置文件 配置启动选项有哪些注意点?配置文件的优先级? 3、如何查看和设置系统变量? > 有哪些常用的启动选择配置方式? 1、命令行配置 如:mysqld --skip-ne

疯狂的蜗牛 798

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

mac mysql my.cnf无效_MySQL修改my.cnf配置不生效的解决方法_MySQL

本文实例讲述了MySQL修改my.cnf配置不生效的解决方法。分享给大家供大家参考,具体如下:一、问题:修改了 my.cnf 配置文件后,却不生效,这是怎么回事?二、原因:我们注意到,这里只说了修改 my.cnf,并没有说清楚其绝对路径是哪个文件。也就是说,有可能修改的不是正确路径下的my.cnf文件。在MySQL中,是允许存在多个 my.cnf 配置文件的,有的能对整个系统环境产生影响,例如:/...

weixin_29214199的博客 1120

mysql my.cnf不起作用_MySQL修改my.cnf配置不生效的解决方法

本文实例讲述了MySQL修改my.cnf配置不生效的解决方法。分享给大家供大家参考,具体如下:一、问题:修改了 my.cnf 配置文件后,却不生效,这是怎么回事?二、原因:我们注意到,这里只说了修改 my.cnf,并没有说清楚其绝对路径是哪个文件。也就是说,有可能修改的不是正确路径下的my.cnf文件。在MySQL中,是允许存在多个 my.cnf 配置文件的,有的能对整个系统环境产生影响,例如:/...

weixin_36212400的博客 1527

mysql 修改配置生效_MySQL修改my.cnf配置不生效的解决方法

本文实例讲述了MySQL修改my.cnf配置不生效的解决方法。分享给大家供大家参考,具体如下:一、问题:修改了 my.cnf 配置文件后,却不生效,这是怎么回事?二、原因:我们注意到,这里只说了修改 my.cnf,并没有说清楚其绝对路径是哪个文件。也就是说,有可能修改的不是正确路径下的my.cnf文件。在MySQL中,是允许存在多个 my.cnf 配置文件的,有的能对整个系统环境产生影响,例如:/...

weixin_42361112的博客 1350

[MySQL分享]MySQL启动以及my.cnf参数文件结构小结

版权声明:声明:本文档可以转载,须署名原作者。 作者:无为 qq:490073687 周祥兴 zhou.xiangxing210@163.com percona官方出的自动生成参数文件的地址 https://tools.percona.com/wizard/result 官方文档的数据库服务端管理 http://dev.mysql.com/doc/refman/5.1/en/serve

为无为,事无事,味无味。 3336

mysql my.cnf 不生效_MySQL修改my.cnf配置不生效的解决方法

本文实例讲述了MySQL修改my.cnf配置不生效的解决方法。分享给大家供大家参考,具体如下:一、问题:修改了 my.cnf 配置文件后,却不生效,这是怎么回事?二、原因:我们注意到,这里只说了修改 my.cnf,并没有说清楚其绝对路径是哪个文件。也就是说,有可能修改的不是正确路径下的my.cnf文件。在MySQL中,是允许存在多个 my.cnf 配置文件的,有的能对整个系统环境产生影响,例如:/...

weixin_29252859的博客 344

mysql client输入密码_MySQL安全输入密码的一些操作介绍

推荐:MySQL在Linux系统中隐藏命令行中的密码的方法这篇文章主要介绍了MySQL在Linux系统中隐藏命令行中的密码的方法,作者利用简单的C程序实现,需要的朋友可以参考下 在命令行中输入命令并不是一个好主意,会造成安全问题。但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息。那么,你能通这篇文章主要介绍了MySQL安全输入密码的一些操作,示例基于Linux操作系统,...

weixin_42548893的博客 576

mysql my.cnf 不生效_MySQL_MySQL修改my.cnf配置不生效的解决方法,本文实例讲述了MySQL修改my.cnf - phpStudy...

MySQL修改my.cnf配置不生效的解决方法本文实例讲述了MySQL修改my.cnf配置不生效的解决方法。分享给大家供大家参考,具体如下:一、问题:修改了 my.cnf 配置文件后,却不生效,这是怎么回事?二、原因:我们注意到,这里只说了修改 my.cnf,并没有说清楚其绝对路径是哪个文件。也就是说,有可能修改的不是正确路径下的my.cnf文件。在MySQL中,是允许存在多个 my.cnf 配置...

weixin_39926394的博客 553
上一篇: 故障分析 | xtrabackup 多表备份报错“ too many open files ”
下一篇: 技术分享 | mysqlreplicate 源码分析
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值