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.pswp.cn/bicheng/20935.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20935.shtml
英文地址,請注明出處:http://en.pswp.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開發環境中,一個解決方案可以包含多個項目,而每個項目就是一個程序集。 他們之間是一種從屬關系,也就是說&…

java —— 匿名內部類與 Lambda 表達式

一、匿名內部類 匿名內部類是一種沒有名稱的類,多用于只使用一次的情況,本質上就是其所繼承的父類或接口的一個子類。 (一)繼承普通類的情況 public class Test{public void method(){System.out.println("通用方法"…

Python與Android連接:深入探索與實現

Python與Android連接:深入探索與實現 在現代移動應用開發領域,Python和Android的結合使用為開發者帶來了無限的可能性。這種跨平臺的組合不僅拓寬了開發者的視野,也極大地提升了應用的靈活性和可擴展性。本文將從四個方面、五個方面、六個方…

【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…

力扣刷題--LCR 135. 報數【簡單】

題目描述 實現一個十進制數字報數程序,請按照數字從小到大的順序返回一個整數數列,該數列從數字 1 開始,到最大的正整數 cnt 位數字結束。 示例 1: 輸入:cnt 2 輸出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1…

codeblock怎么編程:從入門到精通的全面指南

codeblock怎么編程:從入門到精通的全面指南 在數字化時代,編程已成為一項不可或缺的技能。Code::Blocks作為一款流行的開源集成開發環境(IDE),為初學者和有經驗的開發者提供了強大的編程支持。那么,codebl…

C是結構化編程語言嗎:深度剖析與多維度解讀

C是結構化編程語言嗎:深度剖析與多維度解讀 在編程語言的浩瀚海洋中,C語言以其獨特的魅力占據著重要的地位。那么,C語言是否可以被歸類為結構化編程語言呢?這是一個值得深入探討的問題。本文將從四個方面、五個方面、六個方面和七…

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 亞里士多德的說…

Kubernetes面試題分享

目錄 前言 1.Kubernetes的控制平面包括哪些核心組件?它們各自的作用是什么? 2.Kubernetes的數據平面涉及哪些組件?它們如何協作? 3.什么是Pod?為什么它是Kubernetes的基本單元? 4.Service如何實現服務…

【自動駕駛技術】自動駕駛汽車AI芯片匯總——地平線篇

0. 前言 按照國際慣例,首先聲明:本文只是我自己學習的理解,雖然參考了他人的寶貴見解及成果,但是內容可能存在不準確的地方。如果發現文中錯誤,希望批評指正,共同進步。 本篇文章是這個系列的第二篇&#x…

[AIGC] DAG任務調度的概述與實踐

DAG(Directed Acyclic Graph,有向無環圖)作為任務調度的基礎模型,在大規模數據處理和計算過程中有著廣泛的應用。本文將對DAG模型的原理進行解釋并列出一些常用的任務調度工具。 文章目錄 一、什么是DAG?二、DAG任務調度的原理三、常用的DAG任…