MySQL学习——选项文件的使用

MySQL 的许多程序都可以从选项文件(有时也被称为配置文件)中读取启动选项。选项文件提供了一种方便的方式来指定常用的选项,这样你就不必每次运行程序时都在命令行上输入这些选项。

要确定一个程序是否读取选项文件,你可以使用 --help 选项来调用它。(对于 mysqld,你需要使用 --verbose 和 --help。)如果程序读取选项文件,帮助消息会指示它查找哪些文件以及它识别哪些选项组。

当使用 --no-defaults 选项启动 MySQL 程序时,它会忽略除 .mylogin.cnf 之外的所有默认选项文件。.mylogin.cnf 文件是一个特殊的配置文件,用于存储由 mysql_config_editor 实用程序加密的登录凭据(如用户名和密码)。客户端程序可以使用 --login-path 选项来指定从 .mylogin.cnf 文件中读取的登录路径。

另一方面,如果在启动 MySQL 服务器时禁用了 persisted_globals_load 系统变量,则服务器将不会加载 mysqld-auto.cnf 文件。

许多 MySQL 的选项文件都是使用任何文本编辑器创建的纯文本文件。但是,也存在一些例外情况,这些例外情况如下:

  • .mylogin.cnf 文件是 mysql_config_editor 实用程序创建的加密文件,用于存储登录路径选项。这些“登录路径”是允许仅包含特定选项(如 host、user、password、port 和 socket)的选项组。客户端程序使用 --login-path 选项来指定从 .mylogin.cnf 文件中读取哪个登录路径。

      要指定一个不同的登录路径文件名,可以设置 MYSQL_TEST_LOGIN_FILE 环境变量。然              而,这个变量实际上主要用于 mysql-test-run.pl 测试实用程序。不过,它也                                    被 mysql_config_editor 和 MySQL 客户端程序(如 mysql 和 mysqladmin)所识别。

  • mysqld-auto.cnf 文件位于 MySQL 服务器的数据目录中,它是一个 JSON 格式的文件,用于存储通过 SET PERSIST 或 SET PERSIST_ONLY 语句设置的持久化系统变量。这个文件是在服务器执行这些语句时自动创建的。这些持久化系统变量在服务器重启后仍然保持有效,因为它们被存储在 mysqld-auto.cnf 文件中。因此,mysqld-auto.cnf 文件的管理应该完全由 MySQL 服务器来处理,而不需要或不应该由管理员手动编辑。
  • 选项文件处理顺序
  • 选项文件语法
  • 选项文件Inclusions

1 选项文件处理顺序

MySQL 在启动时或运行客户端工具时会按照特定的顺序查找选项文件,并读取存在的任何文件。

在 Windows 上,MySQL 程序按照以下顺序读取启动选项文件(列表中先列出的文件先被读取,后面读取的文件具有更高的优先级):

ab328d516320412cb743c6069b4beedd.png

在上面的表中,%WINDIR% 表示您的 Windows 目录的位置。这通常位于 C:\WINDOWS(在较新的 Windows 版本中可能是 C:\Windows)。要确定 WINDIR 环境变量的确切位置,您可以使用以下命令之一(取决于您的命令行环境):

C:\> echo %WINDIR%

%APPDATA% 环境变量代表 Windows 应用程序数据目录的位置。要确定其确切位置,您可以使用以下命令之一(取决于您的命令行环境):

C:\> echo %APPDATA%

当使用 MySQL Installer 安装 MySQL 8.0 时,BASEDIR 通常代表 MySQL 的基础安装目录。对于 Windows 系统,这个目录通常位于 C:\PROGRAMDIR\MySQL\MySQL Server 8.0,其中 PROGRAMDIR 代表程序目录(对于英文版的 Windows 通常是 Program Files)。

虽然 MySQL Installer 将大部分文件放置在 PROGRAMDIR,但它将配置文件 my.ini(或在某些系统中可能是 my.cnf)放置在 C:\ProgramData\MySQL\MySQL Server 8.0\ 目录下。

DATADIR 在 MySQL 中代表数据目录,即 MySQL 存储其数据库文件(如表、索引等)的目录。这个目录的位置在 MySQL 编译时就已经内置了默认值,但可以在启动 mysqld 进程时通过 --datadir 选项来指定。

mysqld-auto.cnf 文件通常与 my.cnf 或 my.ini 配置文件一起使用,但包含了一些由 MySQL Installer 自动生成的设置,如数据目录(datadir)、套接字文件(socket)和 PID 文件(pid-file)的路径。

在 Unix 和 Unix-like 系统上,MySQL 程序按照以下表格中指定的顺序读取启动选项(先列出的文件先被读取,后读取的文件具有更高的优先级)。

在 Unix 平台上,MySQL 故意忽略具有全局可写权限(world-writable)的配置文件,这是一种安全措施。

e41d1bf9bae843afaae3d2ebf39a1046.png

在上表中,~ 代表当前用户的home目录(即 $HOME 变量的值)。

SYSCONFDIR 表示在构建 MySQL 时通过 CMake 的 SYSCONFDIR 选项指定的目录。默认情况下,这个目录是编译时内置的安装目录下的 etc 目录。

MYSQL_HOME 是一个环境变量,它包含了特定于服务器的 my.cnf 配置文件所在的目录的路径。当 MYSQL_HOME 没有被设置时,如果您使用 mysqld_safe 脚本来启动 MySQL 服务器,mysqld_safe 会将 MYSQL_HOME 设置为 BASEDIR,即 MySQL 的基础安装目录。BASEDIR 通常包含了 MySQL 的二进制文件、库文件和其他核心组件。

DATADIR表示MySQL数据目录。用于查找mysqld-auto.cnf,其默认值是MySQL编译时内置的数据目录位置,但可以通过--datadir进行更改,该datadir指定为在处理mysqld-auto.com.cnf之前处理的选项文件或命令行选项。

如果找到给定选项的多个实例,则最后一个实例优先,但有一个例外:对于mysqld,--user选项的第一个实例用作安全预防措施,以防止选项文件中指定的用户在命令行上被重写。

2  选项文件语法

以下选项文件语法说明适用于手动编辑的文件。这不包括使用mysql_config_editor创建并加密的.mylogin.cnf和服务器以JSON格式创建的mysqld-auto.cnf。

MySQL 程序的任何可以在命令行中给出的长选项也可以在选项文件中给出。如果您想查看某个程序可用的选项列表,可以使用 --help 选项来运行该程序。

选项文件中指定选项的语法与在命令行中指定选项的语法相似,但有一些重要的区别。在选项文件中,您省略了选项名前面的两个短横线(--),并且每个选项单独写在一行上。例如,如果您在命令行中使用了 --quick 和 --host=localhost,那么在选项文件中,您应该将它们分别写在单独的一行上,并且去掉前面的 --。对于形如 --loose-opt_name 的选项,在选项文件中,您应该将其写为 loose-opt_name。

在MySQL的选项文件中,空行会被忽略,而非空行可以采取以下几种形式:

  • #comment 或 ;comment

注释行以 # 或 ; 开头。在行中间也可以使用 # 开始注释。

  • [group]

group 是您想要为其设置选项的程序或组的名称。在组行之后,任何选项设置行都将应用于指定的组,直到选项文件的末尾或另一个组行被给出。选项组名称不区分大小写。

  • opt_name

这等价于命令行上的 --opt_name。

  • opt_name=value

这等价于命令行上的 --opt_name=value。在选项文件中,等号(=)周围可以有空格,这在命令行上是不允许的。值可以选择性地用单引号或双引号括起来,这在值包含 # 注释字符时特别有用。

在MySQL的选项文件中,选项名和值的前导和尾随空格会自动被删除。这意味着您可以在编写选项文件时添加额外的空格来增强可读性,而不必担心这些空格会影响选项的实际值。

在选项值中,您可以使用转义序列来表示一些特殊字符。MySQL选项文件中支持的转义序列包括:

  1. \b:退格(backspace)字符
  2. \t:制表符(tab)
  3. \n:换行符(newline)
  4. \r:回车符(carriage return)
  5. \\:反斜杠(backslash)字符
  6. \s:空格(space)字符

在选项文件中,这些转义规则的应用方式是:

  • 如果一个反斜杠后面跟着一个有效的转义序列字符,那么它会被转换为该序列所代表的字符。例如,\s 会被转换为空格字符。
  • 如果一个反斜杠后面没有跟着一个有效的转义序列字符,那么反斜杠将保持不变。例如,\S 会被保留为 \ 和 S 这两个字符。

前面的规则意味着一个实际的反斜杠字符(backslash, \),需要使用两个反斜杠(\\)来表示,因为单个反斜杠会被解释为转义字符的开始。但是,如果反斜杠后面没有跟随有效的转义序列字符,那么它将被保留为一个单独的反斜杠字符。

选项文件中的转义序列规则与SQL语句中字符串字面量中的转义序列规则略有不同。

在SQL语句的字符串字面量中,如果反斜杠后面跟的不是一个有效的转义序列字符,那么这个反斜杠会被忽略,后面的字符将按原样处理。例如,在SQL字符串中,\x 会被解释为 x,因为 x 不是一个有效的转义序列字符。

然而,在MySQL的选项文件中,情况有所不同。在选项文件中,如果反斜杠后面没有跟随一个有效的转义序列字符,那么反斜杠将保持不变。这意味着,如果您在选项文件中写入 option=\x,它将被解释为 option=\x,而不是 option=x。

Windows路径名中的转义规则在MySQL选项文件中非常重要,因为Windows使用\作为路径名分隔符。在MySQL选项文件中,如果\后面跟着一个转义序列字符,那么它必须被写作\\。如果\后面没有跟着转义序列字符,那么它可以被写作\\或\。另外,在Windows路径名中也可以使用/,它会被当作\来处理。

如果您想在MySQL选项文件中指定一个基于C:\Program Files\MySQL\MySQL Server 8.0的基础目录,以下是一些示例:

basedir="C:\Program Files\MySQL\MySQL Server 8.0" basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0" basedir="C:/Program Files/MySQL/MySQL Server 8.0" basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.0

如果选项组名与程序名相同,那么该组中的选项就专门应用于那个程序。例如,[mysqld]组中的选项专门用于配置mysqld服务器,而[mysql]组中的选项则专门用于配置mysql客户端。

[client]组中的选项确实会被MySQL分发中的所有客户端程序读取,但不会被mysqld服务器读取。

对于使用C API的第三方客户端程序如何使用选项文件,这些程序通常会使用mysql_options()函数来设置运行时参数。

[client]选项组允许您指定应用于所有MySQL客户端的选项。例如,[client]组是设置连接服务器所需密码的合适位置。但是,您必须确保选项文件(如my.cnf或my.ini)只能由您自己访问,以防止其他人发现您的密码。

将选项放入[client]组时要特别小心,因为只有当所有您使用的客户端程序都识别该选项时,它才是安全的。如果某个客户端程序不理解该选项,它可能会在显示错误消息后退出。

组织选项组的一个好方法是首先列出更一般的组,然后列出更具体的组。这样做可以确保更具体的选项能够覆盖更一般的选项。如果您在[client]组中设置了一个选项,然后在[mysqldump]组中设置了相同的选项但值不同,那么[mysqldump]组中的值将覆盖[client]组中的值。这是因为mysqldump在读取其配置时,会先读取[client]组中的通用选项,然后再读取[mysqldump]组中的特定选项。由于[mysqldump]组是更具体的,所以它的选项会覆盖[client]组中的相同选项。

这里是一个典型的通用选项文件:

[client] port=3306 socket=/tmp/mysql.sock [mysqld] port=3306 socket=/tmp/mysql.sock key_buffer_size=16M max_allowed_packet=128M [mysqldump] Quick

这里是一个典型的用户选项文件:

[client] # The following password is sent to all standard MySQL clients password="my password" [mysql] no-auto-rehash connect_timeout=2

要在MySQL的配置文件中为特定MySQL发布系列的mysqld服务器创建仅读的选项组,您可以使用类似于[mysqld-5.7]、[mysqld-8.0]这样的命名方式。如果您想要指定sql_mode设置仅由8.0.x版本的MySQL服务器使用,您应该创建一个名为[mysqld-8.0]的选项组,并在其中设置sql_mode。

[mysqld-8.0] sql_mode=TRADITIONAL

3 选项文件 Inclusions

在MySQL的配置文件中,您可以使用!include指令来包含其他配置文件,以及!includedir指令来搜索特定目录以包含该目录中的配置文件。这有助于组织复杂的配置,或者根据环境或版本包含不同的配置设置。

例如,要包含/home/mydir/myopt.cnf文件,您可以在主配置文件中使用以下!include指令:

!include /home/mydir/myopt.cnf

要搜索/home/mydir目录并读取在其中找到的选项文件,请使用以下指令:

!includedir /home/mydir

MySQL无法保证读取目录中选项文件的顺序。

使用找到并包含的任何文件!includedir指令在Unix操作系统上的文件名必须以.cnf结尾。在Windows上,此指令检查扩展名为.ini或.cnf的文件。

像编写任何其他选项文件一样,编写包含的选项文件的内容。也就是说,它应该包含多组选项,每个选项前面都有一行[group],指示应用这些选项的程序。

在处理包含的文件时,仅使用当前程序正在查找的组中的那些选项。其他组将被忽略。假设my.cnf文件包含以下行:

!include /home/mydir/myopt.cnf

假设/home/mydir/myopt.cnf如下所示:

[mysqladmin] force [mysqld] key_buffer_size=16M

如果my.cnf由mysqld处理,则仅使用/home/mydir/myopt.cnf中的[mysqld]组。如果文件由mysqladmin处理,则只使用[mysqladmin]组。如果文件由任何其他程序处理,则不会使用/home/mydir/myopt.cnf中的任何选项。

这个includedir指令的处理方式类似,只是读取命名目录中的所有选项文件。

如果选项文件包含!include或!includedir,无论选项文件出现在文件中的什么位置,只要处理选项文件,都会处理由这些指令命名的文件。

为了使包含指令起作用,文件路径不应在引号内指定,并且不应具有转义序列。例如,my.ini中提供的以下语句读取选项文件myots.ini:

!include C:/ProgramData/MySQL/MySQL Server/myopts.ini!include C:\ProgramData\MySQL\MySQL Server\myopts.ini!include C:\\ProgramData\\MySQL\\MySQL Server\\myopts.ini

在Windows上,如果!include/path/to/extra.ini是文件中的最后一行,请确保在末尾附加一行换行符;否则,该行将被忽略。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/342408.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim编辑器的使用

vim编辑器 1 vim编辑器三种常见模式2 命令模式2.1 移动光标的操作2.2 对数据操作2.3 查找函数 3 底行模式3.1 不退出vim进行操作3.2 与文件进行对比 4 vim的补充知识4.1 vim的批量化注释4.2 vim窗口的非正常关闭 5 vim的配置6 配置sudoer文件 1 vim编辑器三种常见模式 我们在编…

AMD显卡和英伟达显卡哪个好?

显卡是计算机中负责处理图形和视频输出的硬件设备,主要分为两种类型:AMD的A卡和NVIDIA的N卡。那么AMD显卡和英伟达显卡哪个好?怎么选? 答:不能一概而论地说哪个好,因为它们各有优势,选择应基于…

【Python报错】已解决ModuleNotFoundError: No module named ‘packaging’

成功解决“ModuleNotFoundError: No module named ‘packaging’”错误的全面指南 在Python编程中,遇到ModuleNotFoundError: No module named packaging这样的错误,通常意味着你的Python环境中缺少名为packaging的模块,或者该模块没有被正确…

Docker笔记-解决非交互式运行python时print不输出的问题

换句话来说就是在docker中如何不会python的print 只需要在启动时&#xff0c;不让python缓冲其输出。 关键命令如下&#xff1a;PYTHONUNBUFFERED1 如下&#xff1a; docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…

DDMA信号处理以及数据处理的流程---DDMA原理介绍

Hello&#xff0c;大家好&#xff0c;我是Xiaojie&#xff0c;好久不见&#xff0c;欢迎大家能够和Xiaojie一起学习毫米波雷达知识&#xff0c;Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程&#xff0c;本系列文章将从目标生成、信号仿真、测距、测速、cfar…

IT学习笔记--Flink

概况&#xff1a; Flink 是 Apache 基金会旗下的一个开源大数据处理框架。目前&#xff0c;Flink 已经成为各大公司大数据实时处理的发力重点&#xff0c;特别是国内以阿里为代表的一众互联网大厂都在全力投入&#xff0c;为 Flink 社区贡献了大量源码。 Apache Flink 是一个…

微信小程序uniapp的父子之间的通信传递

1.父传递给子信息 my-test是子组件 demo是父组件 这是定义在父组件中的的info信息 要将这个传递给子组件 子组件在properties 中接收父组件传递来的数据 msg type 是类型 value是默认值&#xff0c;当父组件没有传递数据时&#xff0c;就会默认使用value的数据 子组件…

JavaScript html css前端 日期对象 date对象 日期格式化 时间戳

日期对象 Date对象 Date 对象和 Math 对象不一样&#xff0c;他是一个构造函数&#xff0c;所以我们需要实例化后才能使用 Date 实例用来处理日期和时间 Date()使用方法 示例&#xff1a;获取当前时间 let now new Date() console.log(now) 示例&#xff1a;获取指定时间…

LabVIEW液压伺服压力机控制系统与控制频率选择

液压伺服压力机的控制频率是一个重要的参数&#xff0c;它直接影响系统的响应速度、稳定性和控制精度。具体选择的控制频率取决于多种因素&#xff0c;包括系统的动态特性、控制目标、硬件性能以及应用场景。以下是一些常见的指导原则和考量因素&#xff1a; 常见的控制频率范…

Vscode发生鼠标悬停正在加载、无法跳转和提示词的问题

Vscode发生鼠标悬停正在加载、无法跳转和提示词的问题 查看python语言服务器的日志&#xff0c;确定问题。 我的问题是加载的vscode 目录下存在一个很大的数据集目录&#xff0c;导致无法正常工作。 解决办法&#xff1a; 在vscode的pylance设置中&#xff0c;排除对应的目…

【WP】猿人学_13_入门级cookie

https://match.yuanrenxue.cn/match/13 抓包分析 抓包分析发现加密参数是cookie中有一个yuanrenxue_cookie 当cookie过期的时候&#xff0c;就会重新给match/13发包&#xff0c;这个包返回一段js代码&#xff0c;应该是生成cookie的 <script>document.cookie(y)(u)(a…

组装服务器重装linux系统【idrac集成戴尔远程控制卡】

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

亮数据代理IP助力高效数据采集

文章目录 &#x1f4d1;前言一、爬虫数据采集痛点二、代理IP解决爬虫痛点2.1 为什么可以2.2 本篇采用的代理IP 四、零代码获取数据4.1 前置背景4.2 亮数据浏览器自动抓取数据4.3 使用步骤&#xff1a; 五、数据集5.1 免费样本5.2 定制数据集 &#x1f324;️个人小结 &#x1f…

IP质量不够好,可以使用高质量的代理IP吗?

在当今互联网时代&#xff0c;IP代理是一个不可或缺的工具&#xff0c;但许多人可能对它的原理和应用感到困惑。IP代理涉及IP地址的使用和切换&#xff0c;旨在提供更好的隐私保护和访问控制。本文将介绍IP代理的工作原理以及为什么选择高质量的代理IP。 一、IP代理的基本原理…

前端表单校验完成之后,点击确认功能无反应FormInstance, FormRules

**产生原因&#xff1a;可能是在el-form 中添加的ref 前面加了“&#xff1a;”&#xff0c;也可能是ref中的值写错了** FormInstance, FormRules

如何永久擦除Android手机中的所有个人数据?

在这个数字化的时代&#xff0c;确保您的个人数据的安全和隐私至关重要。如果您计划出售或回收您的Android手机&#xff0c;了解如何正确擦除Android手机是至关重要的。本综合指南将引导您通过安全擦除Android手机的分步过程&#xff0c;以保护您的敏感信息。 手机是极其敏感的…

CEC2017(Python):五种算法(SSA、RFO、OOA、PSO、GWO)求解CEC2017

一、5种算法简介 1、麻雀搜索算法SSA 2、红狐优化算法RFO 3、鱼鹰优化算法OOA 4、粒子群优化算法PSO 5、灰狼优化算法GWO 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem defin…

海外媒体通稿:9个极具创意的旅游业媒体推广案例分享-华媒舍

如今&#xff0c;旅游业正迅速发展&#xff0c;媒体推广成为吸引游客的关键。为了更好地展示旅游目的地&#xff0c;许多创意而富有创新的媒体推广策略应运而生。本文将介绍九个极富创意的旅游业媒体推广案例&#xff0c;为广大从业者带来灵感和借鉴。 1. 视频系列&#xff1a;…

【Mybatis】动态SQL标签2

choose (when, otherwise)标签是使用举例 类似switch...case&#xff0c;从上到下匹配&#xff0c;找到匹配的条件&#xff0c;就结束匹配其他的&#xff01; set标签是使用举例 set这个标签是用在更新操作上的 set标签代替sql中的set关键字&#xff0c;可以把set语句后多余的…

手搓顺序表(C语言)

目录 SeqList.h SeqList.c 头插尾插复用任意位置插入 头删尾删复用任意位置删除 SLtest.c 测试示例 顺序表优劣分析 SeqList.h //SeqList.h#pragma once#include <stdio.h> #include <assert.h> #include <stdlib.h> #define IN_CY 3typedef int S…