Linux MySQL 配置文件

来源:https://www.cnblogs.com/heyongshen/archive/2023/12/01/17867565.html
-Advertisement-
Play Games

MySQL服務配置文件 1、配置文件位置 MySQL服務端的進程mysqld在啟動時,會預設按照以下順序來讀取mysql的配置文件: /etc/my.cnf /etc/mysql/my.cnf 編譯安裝時通過編譯選項指定的位置 如果不想讓mysqld按照這個順序讀取配置文件,可以通過mysqld的 ...


MySQL服務配置文件

1、配置文件位置

MySQL服務端的進程mysqld在啟動時,會預設按照以下順序來讀取mysql的配置文件:

  • /etc/my.cnf

  • /etc/mysql/my.cnf

  • 編譯安裝時通過編譯選項指定的位置

如果不想讓mysqld按照這個順序讀取配置文件,可以通過mysqld的 --defaults-file選項來指定一個自定義的配置文件路徑,這樣就會只讀取指定的配置文件。

2、配置文件組成

mysql的配置文件由若幹個塊組成,每個塊裡面包含相關的配置。

[mysqld]

這個塊包含MySQL伺服器mysqld的配置選項


[mysqld_safe]

這個塊用於mysqld_safe腳本的配置選項,mysqld_safe是一個用於安全啟動mysqld的腳本。


[client]

這個塊包含客戶端程式的配置選項,包括mysql命令行工具、mysqldump等


[mysql]

這個塊是針對mysql客戶端工具的配置


例如:

[mysqld]
key = value

說明:

  • 參數和值之間可以有若幹個空格

  • 一般值不需要加引號,如果值包含了一些特殊字元或者空格,就需要加引號(單雙都可以)


例如:

log_error = "/var/log/mysql/error.log"

3、服務端 基礎配置項

  • user:指定運行mysqld進程的用戶

  • port:指定mysqld進程的埠號

  • bind-address:指定埠綁定的ip地址,0.0.0.0表示所有地址

  • datadir:指定MySQL的數據目錄的位置。這個目錄用於存儲資料庫的實際數據文件,包括表、索引、日誌等

  • basedir:指定MySQL應用程式的安裝根目錄,也就是MySQL的二進位程式、支持文件(如配置文件、腳本等)和庫所在的目錄。用於告訴MySQL在哪裡查找它的二進位執行文件、庫文件和其他支持文件

  • tmpdir:指定MySQL用於存儲臨時文件的目錄,例如臨時表等文件

  • socket:同一臺機器上的客戶端和伺服器之間進行通信是通過socket(套接字)來進行的,這個選項是用於指定socket文件,客戶端預設會通過這個套接字文件進行通信

  • pid-file: 指定MySQL伺服器進程ID(PID)文件的位置。當MySQL伺服器啟動時,它會將自己的進程ID寫入到這個文件中

  • log_error:指定錯誤的具體日誌文件

  • character_set_server:指定mysql服務端使用的預設字元集,字元集決定了MySQL伺服器如何存儲字元串和解釋字元數據。不同的字元集支持不同的語言和符號集。一般設置為 utf8mb4

  • collation-server:指定MySQL伺服器的預設校對規則。校對規則決定了MySQL如何比較字元,一般設置為utf8mb4_general_ci,表示是一個不區分大小寫的校對規則


說明:

[mysqld]配置塊中指定的配置項都是mysqld進程的配置項,可以通過 mysqld --verbose --help來查看相關配置項以及預設的值。

如果將這些參數在進程啟動的時候在一一指定,這樣管理起來就很麻煩。

例如:

mysqld --port=3306 --pid-file=/var/run/mysqld/mysqld.pid  --datadir=/var/lib/mysql

將這些配置都放在配置文件中的[mysqld]配置塊中,方便對這些參數進行統一管理和簡化啟動命令。(在配置文件中,忽略選項的 -- 首碼,直接寫選項名稱)


例如:

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock

port            = 3306
bind-address    = 0.0.0.0

basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp

log_error = /var/log/mysql/error.log

# 預設字元集為utf8mb4,這是一個支持Unicode的字元集,能夠存儲任何Unicode字元。
character_set_server=utf8mb4
collation-server      = utf8mb4_unicode_ci

utf8、utf8mb4、utf8mb3區別:

utf8mb4 和 utf8mb3是MySQL中的兩種字元集編碼,可以理解為它們都是utf8的變種,utf8mb3相當於utf8換了個名字,utf8mb4支持的Unicode字元範圍比utf8更大。

  • utf8mb4:mb4" 代表 "most bytes 4",可以支持最多四個位元組的 Unicode 字元,從MySQL 5.5.3開始支持utf8mb4

  • utf8mb3:早期版本的 MySQL 中,utf8 實際上是 utf8mb3 的別名,它最多支持三個位元組的字元,所以它不能表示所有的 Unicode 字元,特別是一些較新的表情符號和一些特殊的語言字元

4、服務端 調優配置

  • innodb_buffer_pool_size:InnoDB性能優化設置,用於指定InnoDB緩衝池的大小,緩衝池用於緩存數據和索引。一般設置為記憶體的50%作用

  • max_connections:指定了可以同時打開的最大連接數

  • table_open_cache:用於指定可以同時打開的表的數量

  • thread_cache_size:指定線程緩存的大小,可以減少為新連接創建和銷毀線程的開銷。

  • max_allowed_packet::這個選項指定了MySQL伺服器和客戶端之間傳輸的最大數據包大小。

  • sort_buffer_size:用於指定為排序操作分配的記憶體緩衝區的大小,用於存儲排序查詢(如帶有 ORDER BY 子句的查詢)的中間結果。

  • default_authentication_plugin:( MySQL 8.0 引入的選項)用於指定預設使用的身份驗證插件,因為mysql引入了幾種新的身份驗證插件,但是某些客戶端和應用可能還不完全支持新的身份驗證方法,所以為了確保相容性,就需要使用這個選項來修改預設身份驗證插件。

  • wait_timeout:設置自動斷開連接的時間,如果一個連接超過這個時間沒有和mysql服務交互,就會斷開連接。一般設置為幾個小時或者一天

例如:

[mysqld]
  # 基礎 配置
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
bind-address    = 0.0.0.0
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
log_error = /var/log/mysql/error.log
character_set_server=utf8mb4
collation-server      = utf8mb4_unicode_ci

  # 調優 配置
wait_timeout             = 86400
innodb_buffer_pool_size  = 4G
max_connections          = 2000
thread_cache_size        = 16
max_allowed_packet       = 64M
sort_buffer_size         = 200M
default_authentication_plugin = mysql_native_password

mysqld的身份驗證插件:

早期版本的 MySQL 預設使用的是mysql_native_password身份驗證插件。它的主要特點是廣泛的相容性,但相對於新的身份驗證方法,它的安全性較低。

在 MySQL 8.0 中,引入了caching_sha2_password作為預設的身份驗證插件,提供了更強的安全性。caching_sha2_password使用 SHA-256 加密演算法,比mysql_native_password提供更高級的密碼加密。

由於一些老舊的客戶端和應用程式可能不支持caching_sha2_password插件,MySQL 提供了default_authentication_plugin配置選項,允許資料庫管理員指定預設的身份驗證插件。

5、客戶端 配置

客戶端的配置就比服務端配置簡單多了,客戶端主要關註的是如何連接到MySQL伺服器,以及一些基本的客戶端行為設置。

  • socket:如果通過UNIX套接字連接,需要指定套接字文件的路徑。

  • skip-auto-rehash:禁用自動補全功能。在有大量資料庫和表時,這可以加快啟動速度。

  • default-character-set:用於指定客戶端使用的預設字元集。


例如:

[client]
socket=/var/run/mysqld/mysqld.sock
default-character-set=utf8mb4
skip-auto-rehash

客戶端和服務端字元集說明:

客戶端和服務端的字元集要保持一直,如果不一樣可能會導致以下問題:

  • 客戶端顯示問題:客戶端可能無法正確顯示從伺服器檢索的文本數據。這尤其在處理非英文字元時常見。

  • 數據插入問題:向資料庫中插入數據時,如果客戶端的字元集與資料庫或表的字元集不一致,可能會導致插入的數據出現亂碼或錯誤。

6、mysqld_safe 配置

在mysql的配置文件中,[mysqld_safe]配置塊是給 mysqld_safe 這個腳本使用的,現在基本上不使用這個配置塊了。

(1)mysqld_safe 是一個在早期版本的 MySQL 中用於啟動 MySQL 伺服器的腳本,提供了額外的安全特性和錯誤恢復功能。隨著 MySQL 的發展,尤其是從 5.7 版本開始,許多這些功能已被集成到 mysqld 本身。

(2)在現代 Linux 系統中,systemd 作為系統服務管理器,提供了對服務的監控、日誌管理、自動重啟等功能。這些功能的存在確實減少了 mysqld_safe 的必要性。


如果要使用mysql_safe腳本,一般常用的配置項有兩個:

  • socket:指定套接字文件位置

  • nice:設置 MySQL 伺服器進程的 "nice" 值,一般設置為0,表示正常優先順序


如果是使用systemd的service文件,可以這樣指定:

[Unit]
Description=MySQL Server 5.6.51
After=network.target

[Service]
Type=forking
User=mysql
Group=mysql
Nice=0  # 指定Nice優先順序,這個可以忽略,因為預設Nice就是0
PIDFile=/var/run/mysqld/mysqld.pid
ExecStart=/etc/init.d/mysqld start
ExecStop=/etc/init.d/mysqld stop
ExecReload=/etc/init.d/mysqld reload
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

MySQL服務單元文件

從2010年起,systemd首先被Fedora 15採用以替換傳統的System V init進程。隨後許多其他Linux發行版也跟進,例如Ubuntu從其15.04版本起採用systemd,而Red Hat系列則從7版本開始採用。

systemd為服務管理引入了一系列高效的功能特性,大大簡化了傳統init系統中可能較為複雜和繁瑣的管理流程。

例如,在systemd的管理下,管理MySQL服務時可以避免使用傳統的mysqld_safe腳本。mysqld_safe是一個專門用於啟動和監控MySQL伺服器的shell腳本。但在systemd體系中,服務的啟動、監控和日誌記錄等功能都可以通過systemd的配置文件和命令來直接實現,這不僅簡化了服務管理,也提高了系統的可維護性和可靠性。

包管理器安裝

如果操作系統的初始化進程是systemd進程,通過包管理器安裝的mysql服務,會自動配置好service文件的。

二進位安裝

二進位安裝的話就沒有提供支持systemd的service文件,需要自己手動編寫。有兩種方式:


方式一:二進位軟體包裡面有一個名為mysql.service的腳本文件,可以直接通過編寫systemd的service文件來調用這個腳本,從而實現對mysql服務的管理。


例如:

[Unit]
Description=MySQL Server 5.6.51
After=network.target

[Service]
Type=forking
User=mysql
Group=mysql
Nice=0
PIDFile=/var/run/mysqld/mysqld.pid
ExecStart=/etc/init.d/mysqld start
ExecStop=/etc/init.d/mysqld stop
ExecReload=/etc/init.d/mysqld reload
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

方式二:自己手動編寫service文件


例如:

[Unit]
Description=MySQL Community Server
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
Type=notify
User=mysql
Group=mysql
PIDFile=/var/run/mysqld/mysqld.pid
PermissionsStartOnly=true
ExecStart=/opt/mysql-8.0/bin/mysqld
TimeoutSec=infinity
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755
LimitNOFILE=10000

# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

編譯安裝

編譯安裝的話,如果是Mysql5.7及其以上的版本,編譯時通過加 -DWITH_SYSTEMD=1 選項,可以在安裝目錄下的lib/systemd/system目錄下生成service文件,將這個文件拷貝到對應位置就可以實現對mysql服務的管理了。


例如:

# Copyright (c) 2015, 2023, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
#
# systemd service file for MySQL forking server
#

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network-online.target
Wants=network-online.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
# hence, + prefix is used

# Needed to create system tables
ExecStartPre=+/usr/local/mysql/bin/mysqld_pre_systemd

# Start main service
ExecStart=/usr/local/mysql/bin/mysqld $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

RestartPreventExitStatus=1

# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

PrivateTmp=false

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 統計學有時候會被誤解,好像必須有大量的樣本數據,才能使統計結果有意義。這會讓我們覺得統計學離我們的日常生活很遙遠。 其實,如果數據的準確度高的話,少量的樣本數據同樣能反映出真實的情況。比如,很多國家選舉時不斷做的民意調查,一般做到有效樣本1600多份就夠了,不管你是幾千萬人的小國家,還是數億人的大國 ...
  • Crypto++ (CryptoPP) 是一個用於密碼學和加密的 C++ 庫。它是一個開源項目,提供了大量的密碼學演算法和功能,包括對稱加密、非對稱加密、哈希函數、消息認證碼 (MAC)、數字簽名等。Crypto++ 的目標是提供高性能和可靠的密碼學工具,以滿足軟體開發中對安全性的需求。該庫包含了許多... ...
  • .NET Core 和 Vue3 結合使用 SignalR 可以實現強大的實時通訊功能,允許實時雙向通信。在這個示例中,我們將詳細說明如何創建一個簡單的聊天應用程式,演示如何使用 .NET Core SignalR 後端和 Vue3 前端來實現實時通訊功能。 步驟1:準備工作 確保你已經安裝了以下工 ...
  • 當編寫程式時,瞭解和使用不同的演算法對解決問題至關重要。以下是C#中常用的10種演算法,每個演算法都伴隨著示例代碼和詳細說明。 1. 冒泡排序 (Bubble Sort): 冒泡排序是一種簡單的比較排序演算法,它多次遍曆數組,將較大的元素逐漸浮動到數組的末尾。 public static void Bubb ...
  • 在我們開發一些複雜信息的時候,由於需要動態展示一些相關信息,因此我們需要考慮一些控制項內容的動態展示,可以通過動態構建控制項的方式進行顯示,如動態選項卡展示不同的信息,或者動態展示一個自定義控制項的內容等等,目的就是能夠減少一些硬編碼的處理方式,以及能夠靈活的展示數據。本篇隨筆通過實際案例介紹WPF應用開... ...
  • # This file has been auto-generated by i3-config-wizard(1). # It will not be overwritten, so edit it as you like. # # Should you change your keyboard ...
  • 運算放大器(Operational Amplifier), 簡稱運放, 是一種直流耦合, 差模輸入, 單端輸出(Differential-in, single-ended output)的高增益電壓放大器件. 運放能產生一個比輸入端電勢差大數十萬倍的輸出電勢. 因為剛發明時主要用於加減法等運算電路中... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...