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

news2024/12/25 13:54:46

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.coloradmin.cn/o/1792657.html

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

相关文章

【工具箱】嵌入式系统存储芯片——CS创世 SD NAND

大家都知道MCU是一种"麻雀"虽小,却"五脏俱全"的主控。它的应用领域非常广泛,小到手机手表,大到航空航天的设备上都会用到MCU.市面上目前几个主流厂商有意法半导体(其中最经典的一款就是STM32系列)…

SSL证书国产化对提升我国网络安全的重要性

在互联网时代,数据安全和隐私保护成为全球关注的焦点。SSL证书作为保障网络通信安全的关键技术,其重要性不言而喻。然而,长期以来,我国在SSL证书领域过度依赖国外产品和技术,不仅存在安全隐患,也制约了我国…

LNMP网络架构的搭建

操作准备:准备三台虚拟机 安装 MySQL 服务 (1)准备好mysql目录上传软件压缩包并解压 cd /opt mkdir mysql tar xf mysql-boost-5.7.44.tar.gz (2)安装mysql环境依赖包 yum -y install ncurses ncurses-devel bison…

计算机网络之曼彻斯特编码和差分曼彻斯特编码

目录 前言 曼彻斯特编码 定义 策略 思路 差分曼彻斯特编码 定义 策略 思路 结束语 前言 今天是坚持写博客的第十九天,很高兴自己又坚持了一天,今天想送给自己一句李白《行路难》当中的诗词,希望我自己和大家都可以铭记于心&#x…

27、matlab傅里叶变换:fft()函数

1、fft 快速傅里叶变换 语法 Y fft(X) 使用快速傅里叶变换 (FFT) 算法计算 X 的离散傅里叶变换 (DFT)。 Y fft(X,n) 返回 n 点 DFT。 Y fft(X,n,dim) 返回沿维度 dim 的傅里叶变换。例如,如果 X 是矩阵,则 fft(X,n,2) 返回每行的 n 点傅里叶变换含…

微软不再允许Windows 11通过1@1.com绕过登录 但还有其他办法可以继续用

微软不再允许 Windows 11 通过 11.com 和 nothankyou.com 绕过登录,但断网的情况下使用 OOBE\BYPASSNRO 命令仍然是有效的。如果你在安装或重置系统时仍然需要创建本地账户,请直接使用 OOBE 命令。 在 Windows 11 家庭版和专业版中用户必须保持设备联网…

尚硅谷2024新版3小时速通Docker教程

尚硅谷2024新版3小时速通Docker教程 百度网盘:https://pan.baidu.com/s/1SncgHbdJehvZspjcrrbLSw?pwd6c27

linux 系统监控脚本

1.对CPU的监控函数 function GetCpu(){cpu_numgrep -c "model name" /proc/cpuinfocpu_usertop -b -n 1 | grep Cpu | awk {print $2} | cut -f 1 -d "%"cpu_systemtop -b -n 1 | grep Cpu | awk {print $4} | cut -f 1 -d "%"cpu_idletop -b -…

Github 2024-06-06 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…

当边缘计算用在定位设备

什么是边缘计算? 边缘计算是个比较高大上的概念,在这里就不提众多官方与非官方的定义了,只说说自己的理解。 边缘计算就是在最靠近物理设备的使用现场,利用有限的硬件资源,完成设备层数据采集、协议转换、数据上传、…

Java | Leetcode Java题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; class Solution {public int minimumTotal(List<List<Integer>> triangle) {int n triangle.size();int[] f new int[n];f[0] triangle.get(0).get(0);for (int i 1; i < n; i) {f[i] f[i - 1] triangle.get(i).get(i…

Chrome浏览器打开无痕模式的方法

快捷键&#xff1a;同时按住CtrlshiftN 如图&#xff0c;系统会新开一个无痕标签页&#xff0c;不需要了点右上角关闭就可以了。

探索计算机视觉:开启智能图像处理的新纪元

第一部分&#xff1a;计算机视觉概述与基本原理 计算机视觉&#xff0c;作为人工智能领域的重要分支&#xff0c;旨在让计算机具备处理和理解图像和视频数据的能力。随着深度学习技术的飞速发展&#xff0c;计算机视觉已经在许多实际应用场景中取得了显著的成果&#xff0c;如…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十七)- 微服务(7)

11.1 : 同步调用的问题 11.2 异步通讯的优缺点 11.3 MQ MQ就是事件驱动架构中的Broker 安装MQ docker run \-e RABBITMQ_DEFAULT_USERxxxx \-e RABBITMQ_DEFAULT_PASSxxxxx \--name mq \--hostname mq1 \-p 15672:15672 \-p 5672:5672 \-d \rabbitmq:3-management 浏览器访问1…

RabbitMQ-直连交换机(direct)使用方法

RabbitMQ-默认读、写方式介绍 RabbitMQ-发布/订阅模式 目录 1、概述 2、直连交换机 3、多重绑定 4、具体代码实现 4.1 生产者部分 4.2 消费者部分 5、运行代码 6、总结 1、概述 直连交换机&#xff0c;可以实现类似路由的功能&#xff0c;消息从交换机发送到哪个队列…

详细分析Mysql中的SQL_MODE基本知识(附Demo讲解)

目录 前言1. 基本知识2. Demo讲解2.1 ONLY_FULL_GROUP_BY2.2 STRICT_TRANS_TABLES2.3 NO_ZERO_IN_DATE2.4 NO_ENGINE_SUBSTITUTION2.5 ANSI_QUOTES 前言 了解Mysql内部的机制有助于辅助开发以及形成整体的架构思维 对于基本的命令行以及优化推荐阅读&#xff1a; 数据库中增…

【C语言】详解函数(下)(庖丁解牛版)

文章目录 1. 前言2. 数组做函数形参3. 函数嵌套调用和链式访问3.1 嵌套调用3.2 链式访问 1. 前言 详解C语言函数(上)的链接&#xff1a;http://t.csdnimg.cn/EGsfe 经过对函数的初步了解之后,相信大家已经对C语言标准库里的函数已经有初步的认知了&#xff0c;并且还学会了如…

HashMap第2讲——put方法源码及细节

上篇文章介绍了HashMap在JDK 1.8前后的四大变化&#xff0c;今天就进入到put方法的源码解析。HashMap的设计非常巧妙&#xff0c;细节也很多&#xff0c;今天来看看部分细节&#xff0c;后续的文章会一一介绍。 ps&#xff1a;学习源码的目的不仅仅是为了了解它的运行机制&…

Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)

目录 Stream流的中间方法 方法 案例演示 Stream流的终结方法 方法 案例演示1 收集 案例演示2 Stream流的中间方法 方法 中间方法指的是调用完成后会返回新的Stream流&#xff0c;可以继续使用(支持链式编程)。 Stream提供的常用中间方法说明Stream<T> filter(P…

Ansible部署 之 zookeeper集群

简介 Ansible是近年来越来越火的一款轻量级运维自动化工具&#xff0c;主要功能为帮助运维实现运维工作的自动化、降低手动操作的失误、提升运维工作效率。常用于自动化部署软件、自动化配置、自动化管理&#xff0c;支持playbook编排。配置简单&#xff0c;无需安装客户端&am…