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.mzph.cn/bicheng/20935.shtml

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

相关文章

man命令的作用

man命令是Linux操作系统中一个非常实用的命令,它用于查看命令的手册页面,帮助用户了解特定命令的用法、选项和参数。这不仅对新用户在学习如何使用新命令时很有帮助,也方便了经验丰富的用户快速查找命令的详细信息。以下是具体介绍&#xff1…

[论文精读]Supervised Community Detection with Line Graph Neural Networks

论文网址:[1705.08415] Supervised Community Detection with Line Graph Neural Networks (arxiv.org) 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 ⭐内涵大量可视…

高速模拟信号链的设计学习

目录 概述: 定义: 断开: 链路设计: 结论: 概述: 由于对共模参数及其与设备之间的关联缺乏了解,客户仍然会提出许多技术支持问题。ADC数据表指定了模拟输入的共模电压要求。关于这方面没有太…

jenkins应用2

1.jenkins应用 1.jenkins构建的流程 1.使用git参数化构建,用标签区分版本 2.git 拉取gitlab远程仓库代码 3.maven打包项目 4.sonarqube经行代码质量检测 5.自定义制作镜像发送到远程仓库harbor 6.在远程服务器上拉取代码启动容器 这个是构建的整个过程和步骤…

C# 反射类Assembly 程序集(Assembly)用法

常见的两种程序集: 可执行文件(.exe文件)和 类库文件(.dll文件)。 在VS开发环境中,一个解决方案可以包含多个项目,而每个项目就是一个程序集。 他们之间是一种从属关系,也就是说&…

【NLP开发】Python实现聊天机器人(微信机器人)

🍺NLP开发系列相关文章编写如下🍺:1🎈【小沐学NLP】Python实现词云图🎈2🎈【小沐学NLP】Python实现图片文字识别🎈3🎈【小沐学NLP】Python实现中文、英文分词🎈4&#x1…

转让北京电力施工总承包二级资质变更条件和流程

在电力工程领域,资质等级是企业能否参与竞标、承接工程的重要标志之一。北京电力工程总包二级资质的转让,是指已经取得该资质的企业将其资质转让给需要的企业。这种转让是基于合作与共赢的原则,旨在推动电力工程行业健康、稳定发展&#xff0…

记录使用自定义编辑器做试题识别功能

习惯了将解析写在代码注释,这里就直接上代码啦,里面用到的bxm-ui3组件库是博主基于element-Plus做的,可以通过npm i bxm-ui3自行安装使用 // 识别方法: // dom 当前识别数据所在区域, questionType 当前点击编辑选择的题目类型&a…

Qt | Qt 资源简介(rcc、qmake)

1、资源系统是一种独立于平台的机制,用于在应用程序的可执行文件中存储二进制文件(前面所讨论的数据都存储在外部设备中)。若应用程序始终需要一组特定的文件(比如图标),则非常有用。 2、资源系统基于 qmake,rcc(Qt 的资源编译器,用于把资源转换为 C++代码)和 QFile …

java—MyBatis框架

简介 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&…

软件公司为什么必须要使用低代码系统?

在当今软件行业全国比较内卷的大环境下,软件公司面临着前所未有的挑战。为了在这个竞争激烈的市场中生存并脱颖而出,驰骋低代码设计者认为,软件公司必须要使用低代码系统。以下是几个关键的原因: 时代发展的必然选择 低代码系统是…

领导力中的说服艺术

本文主要介绍了亚里士多德修辞三角理论,即演讲者在说服听众时如何运用品格(Ethos)、情感(Pathos)和逻辑(Logos)三种基本的修辞手法。原文: The Art of Persuasion in Leadership 亚里士多德的说…

【自动驾驶技术】自动驾驶汽车AI芯片汇总——地平线篇

0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。 本篇文章是这个系列的第二篇&#x…

50个常用的Docker命令及如何使用

这里整理了50个常用的Docker命令以及每个命令的使用方法。 docker version:显示Docker版本信息。 示例:docker version docker info:显示Docker系统信息。 示例:docker info docker pull <image>:从Docker Hub下载镜像。 示例:docker pull ubuntu docker run <i…

CMake编译安装、生成可执行程序、生成静态动态库以及静态动态库的链接

1 CMake介绍 CMake是一个开源的、跨平台的构建系统&#xff0c;用于管理软件从源代码到可执行文件的整个构建过程。它最初由Kitware公司为ITK&#xff08;Insight Segmentation and Registration Toolkit&#xff09;和VTK&#xff08;Visualization Toolkit&#xff09;等开源…

在Linux kali下载、安装Perl环境

目录 Perl介绍 下载安装 官网下载 在Windows安装 在Linux和Mac OS安装 Perl介绍 Perl一种功能丰富的计算机程序语言&#xff0c;运行在超过100种计算机平台上&#xff0c;适用广泛&#xff0c;从最初是为文本处理而开发的&#xff0c;现在用于各种任务&#xff0c;包括系统…

面试官:Spring中都应用了哪些设计模式?

设计模式是我们项目中经常会涉及到的项目进行重构、解构时的一种方法。 比如我们常见的单例模式、工厂模式、策略模式、装饰器模式等都是比较常用的&#xff1b;关于 23 种设计模式&#xff0c;大家可以找本书专门去学习一下&#xff0c;在 Java 框架的源码中也不例外&#xf…

如何用python做一个用户登录界面——浔川python社

1 需解决的问题&#xff1a; 1.1如何用python做一个用户登录界面&#xff1f; 1.2需要用到哪些库、模块&#xff1f; 2 问题解决&#xff1a; 2.1 回答 1.1 &#xff1a;合理即可&#xff0c;无标准回答。 2.2 回答 1.2 &#xff1a;tk库&#xff08;缩写&#xff09;、GUL界面…

C++20实战之channel

C20实战之channel 继前面两节的直播&#xff0c;讲解了thread、jthread、stop_token、stop_source、stop_callback、cv、cv_any等的用法与底层实现&#xff0c;那么如何基于这些知识实现一个小项目呢&#xff1f; 于是引出了这篇&#xff0c;写一个channel出来。 注&#xff1a…

【AI】设计师人人必备的Ai课程,AIGC实战教学

课程介绍 专为设计师定制的AI绘画视觉课程&#xff0c;包含排版、插画、海报和动漫等。共43节课程&#xff0c;2.06G视频&#xff0c;教授AI应用技巧&#xff0c;提高设计效率和质量。内容涵盖词生图方法、AI风格设计等&#xff0c;帮助学员在设计领域取得成就。 1_01-ai课程…