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是文件中的最后一行,请确保在末尾附加一行换行符;否则,该行将被忽略。

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搭建高可用k8s

高可用只针对于api-server,需要用到nginx keepalived,nginx提供4层负载,keepalived提供vip(虚拟IP) 系统采用openEuler 22.03 LTS 1. 前期准备 因为机器内存只有16G,所有我采用3master 1node 1.1 修改主机配置(所有节…

单投币的充电桩如何加装一个扫码模块

充电桩需要投币才能充电,可是现在的人们很少有带硬币的习惯,扫码成为了一个常规的手段。我们也会发现有的充电桩无法扫码,或者说扫码无效,那是因为充电桩没有安装扫码模块,那么充电桩该如何加装扫码模块。 首先将充电桩…

Podman和Docker的区别

Podman 和 Docker 都是用于容器化的工具,但它们在架构、安全性、容器编排以及一些设计理念上有显著的区别: 架构设计: Docker 使用客户端-服务器(C/S)架构,包含一个名为 dockerd 的守护进程,该进程以 root …

西门子学习笔记6 - TCP通讯

1、主站设置 1、添加两个PLC在网络组态进行链接在一起,使用tcp链接 2、设置主站IP地址为:192.168.1.1 3、添加TSEND_C功能块 4、设置功能块参数连接 5、设置如下所示(连接参数设置) 6、设置如下所示(连接块参数设置&a…

【Text2SQL】评估 LLM 的 Text2SQL 能力

论文:Evaluating the Text-to-SQL Capabilities of Large Language Models ⭐⭐⭐⭐ arXiv:2204.00498 一、论文速读 本论文尝试了多种 prompt 结构,并且评估了他们在 Codex 和 GPT-3 上的表现。下面介绍这些 prompt 结构: 二、不同的 prom…

UI 自动化中的分层设计

以前的设计 在过去 UI 自动化测试领域有一个规范的设计模式是 page object 模式。 意思是测试用例不会直接定位页面元素, 而是把每一个页面封装成一个类。 在这个类中封装页面元素。 然后测试用例调用 page 类来操作页面元素完成测试用例。如下图: 以前…

Linuxftp服务001匿名登入

在Linux系统中搭建FTP(File Transfer Protocol)服务,可以让用户通过网络在服务器与其他客户端之间传输文件。它有几种登入模式,今天我们讲一下匿名登入。 操作系统 CentOS Stream9 操作步骤 首先我们先下载ftp [rootlocalhost…

刷爆leetcode第八期

题目一 设计循环队列 题目分析 这里直接看图 我们发现这里要求我们设计一个循环队列 这要怎么设计呢? 还是一样 我们先画图 我们首先假设只能储存四个数字 同学们看这张图能观察到什么呢? 是不是可以得到front 和 rear相等的时候整个队列为空 这里…

【微机原理及接口技术】中断系统

【微机原理及接口技术】中断系统 文章目录 【微机原理及接口技术】中断系统前言一、中断概述中断的基本概念中断处理过程 二、8086/8088中断系统中断类型中断响应过程中断向量表内部中断服务程序 总结 前言 本篇文章我们会讲到中断的概述,8086/8088中断系统。 一、…

Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value

项目场景: 数据库环境 :mysql8; 工程使用:MyBatisPlus 表情况: 问题描述 某一个插入语句使用了 MyBatisPlus 的 save 方法,因为end_time1 end_time2都并没有值,所以在MyBatisPlus默认情况下,…

SQL优化系列-快速学会分析SQL执行效率(下)

1 show profile 分析慢查询 有时需要确定 SQL 到底慢在哪个环节,此时 explain 可能不好确定。在 MySQL 数据库中,通过 profile,能够更清楚地了解 SQL 执行过程的资源使用情况,能让我们知道到底慢在哪个环节。 知识扩展&#xff1…

强化用户登录接口:解决登录接口被攻击导致掉线卡顿!

一、引言 用户登录接口是任何Web应用的核心部分,它负责身份验证和授权流程。然而,这些接口也常常成为黑客攻击的目标,尤其是当涉及到动态请求处理时。动态请求通常指的是根据用户输入生成的请求,这为诸如SQL注入、XSS攻击和CSRF攻…

华为 2024 届实习校园招聘-硬件通⽤(大部分硬件技术工程师岗位适用)/单板开发——第四套

华为 2024 届实习校园招聘-硬件通⽤(大部分硬件技术工程师岗位适用)/单板开发——第四套 部分题目分享,完整版带答案(有答案和解析,答案非官方,未仔细校正,仅供参考)(共12套&#x…

Unity Vuforia

首先在unity2019版本里可以在windows->PackageManager里搜Vuforia EngineAR; (unity2021版本里搜不到) 在官网注册账号: 添加识别图等; 将导出的unitypackage包导入unity中。 unity里导入package之后,新建场景&am…

【CentOS 7】挑战探索:在CentOS 7上实现Python 3.9的完美部署指南

【CentOS 7】挑战探索:在CentOS 7上实现Python 3.9的完美部署指南 大家好 我是寸铁👊 总结了一篇【CentOS 7】挑战探索:在CentOS 7上实现Python 3.9的完美部署指南详细步骤✨ 喜欢的小伙伴可以点点关注 💝 前言 此篇教程只适用于p…

HarmonyOS(二十四)——Harmonyos通用事件之触摸事件

1.触摸事件。 触摸事件是HarmonyOS通用事件的一种事件之一,当手指在组件上按下、滑动、抬起时触发。 名称是否冒泡功能描述onTouch(event: (event?: TouchEvent) > void)是手指触摸动作触发该回调,event返回值见下面TouchEvent介绍。 2. TouchEve…

Ubuntu下安装和配置Redis

目录 1、更新软件包 2、安装Redis 3、启动 Redis临时服务 4、测试Redis服务 5、配置redis服务 6、Redis服务控制命令 1、更新软件包 执行sudo apt-get update更新软件包 sudo apt-get update2、安装Redis 执行sudo apt-get install redis-server 安装命令 sudo apt i…

Apple - Image I/O Programming Guide

翻译自:Image I/O Programming Guide(更新时间:2016-09-13 https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/ImageIOGuide/imageio_intro/ikpg_intro.html#//apple_ref/doc/uid/TP40005462 文章目录 …

docker网络详解

1. 网络模式 1.1 网络结构 当安装Docker以后,会自动创建三个网络。可以使用docker network ls命令列出这些网络。 $ docker network ls NETWORK ID NAME DRIVER SCOPE 440aefe8afa3 bridge bridge local aa8d6325580f host host …

RAG检索增强生成(1)-大语言模型的外挂数据库

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks Lewis P, Perez E, Piktus A, et al. Retrieval-augmented generation for knowledge-intensive nlp tasks[J]. Advances in Neural Information Processing Systems, 2020, 33: 9459-9474. RAG结合了信息检…