MySQL 中還有一些特殊的全局變量,如 log_bin、tmpdir、version、datadir,在 MySQL 服務實例運行期間它們的值不能動態修改,也就是不能使用 SET 命令進行重新設置,這種變量稱為靜態變量。數據庫管理員可以使用前面提到的修改源代碼或更改配置文件來重新設置靜態變量的值。
mysql 系統變量
在 MySQL 數據庫,變量分為系統變量和用戶自定義變量。系統變量以 @@ 開頭,用戶自定義變量以 @ 開頭。
服務器維護著兩種系統變量,即全局變量(GLOBAL VARIABLES)和會話變量(SESSION VARIABLES)。全局變量影響 MySQL 服務的整體運行方式,會話變量影響具體客戶端連接的操作。每一個客戶端成功連接服務器后,都會產生與之對應的會話。會話期間,MySQL 服務實例會在服務器內存中生成與該會話對應的會話變量,這些會話變量的初始值是全局變量值的拷貝。
查看系統變量
可以使用以下命令查看 MySQL 中所有的全局變量信息。
SHOW GLOBAL VARIABLES;
可以使用以下命令查看與當前會話相關的所有會話變量以及全局變量。
SHOW SESSION VARIABLES;
其中,SESSION 關鍵字可以省略。
MySQL 中的系統變量以兩個“@”開頭。
@@global 僅僅用于標記全局變量;
@@session 僅僅用于標記會話變量;
@@ 首先標記會話變量,如果會話變量不存在,則標記全局變量。
MySQL 中有一些系統變量僅僅是全局變量,例如 innodb_data_file_path,可以使用以下 3 種方法查看:
SHOW GLOBAL VARIABLES LIKE 'innodb_data_file_path';
SHOW SESSION VARIABLES LIKE 'innodb_data_file_path';
SHOW VARIABLES LIKE 'innodb_data_file_path';
MySQL 中有一些系統變量僅僅是會話變量,例如 MySQL 連接 ID 會話變量 pseudo_thread_id,可以使用以下 2 種方法查看。
SHOW SESSION VARIABLES LIKE 'pseudo_thread_id';
SHOW VARIABLES LIKE 'pseudo_thread_id';
MySQL 中有一些系統變量既是全局變量,又是會話變量,例如系統變量 character_set_client 既是全局變量,又是會話變量。
SHOW SESSION VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_client';
此時查看全局變量的方法如下:
SHOW GLOBAL VARIABLES LIKE 'character_set_client';
設置系統變量
可以通過以下方法設置系統變量:
修改 MySQL 源代碼,然后對 MySQL 源代碼重新編譯(該方法適用于 MySQL 高級用戶,這里不做闡述)。
在 MySQL 配置文件(mysql.ini 或 mysql.cnf)中修改 MySQL 系統變量的值(需要重啟 MySQL 服務才會生效)。
在 MySQL 服務運行期間,使用 SET 命令重新設置系統變量的值。
服務器啟動時,會將所有的全局變量賦予默認值。這些默認值可以在選項文件中或在命令行中對執行的選項進行更改。
更改全局變量,必須具有 SUPER 權限。設置全局變量的值的方法如下:
SET @@global.innodb_file_per_table=default;
SET @@global.innodb_file_per_table=ON;
SET global innodb_file_per_table=ON;
需要注意的是,更改全局變量只影響更改后連接客戶端的相應會話變量,而不會影響目前已經連接的客戶端的會話變量(即使客戶端執行 SET GLOBAL 語句也不影響)。也就是說,對于修改全局變量之前連接的客戶端只有在客戶端重新連接后,才會影響到客戶端。
客戶端連接時,當前全局變量的值會對客戶端的會話變量進行相應初始化。設置會話變量不需要特殊權限,但客戶端只能更改自己的會話變量,而不能更改其它客戶端的會話變量。設置會話變量的值的方法如下:
SET @@session.pseudo_thread_id=5;
SET session pseudo_thread_id=5;
SET @@pseudo_thread_id=5;
SET pseudo_thread_id = 5;
如果沒有指定修改全局變量還是會話變量,服務器會當作會話變量來處理。比如:
SET @@sort_buffer_size = 50000;
上面語句沒有指定是 GLOBAL 還是 SESSION,服務器會當做 SESSION 處理。
使用 SET 設置全局變量或會話變量成功后,如果 MySQL 服務重啟,數據庫的配置就又會重新初始化。一切按照配置文件進行初始化,全局變量和會話變量的配置都會失效。
靜態變量
MySQL 中還有一些特殊的全局變量,如 log_bin、tmpdir、version、datadir,在 MySQL 服務實例運行期間它們的值不能動態修改,也就是不能使用 SET 命令進行重新設置,這種變量稱為靜態變量。數據庫管理員可以使用前面提到的修改源代碼或更改配置文件來重新設置靜態變量的值。
SHOW VARIABLES 顯示的是靜態配置選項的值,這些選項通常在配置文件(如 my.cnf 或 my.ini)中設置,修改配置需要在 MySQL 服務器重新啟動后才會生效
mysql配置
一、MySQL 查看配置信息
SHOW VARIABLES: 這個命令用于檢索 MySQL 服務器的配置變量。這些配置變量包括了 MySQL 服務器的各種設置,如字符集、存儲引擎、緩沖池大小、日志文件路徑等。SHOW VARIABLES 顯示的是靜態配置選項的值,這些選項通常在配置文件(如 my.cnf 或 my.ini)中設置,修改配置需要在 MySQL 服務器重新啟動后才會生效。
# 查看全部配置信息
SHOW VARIABLES;
# 查看以character_set開頭的配置信息
SHOW VARIABLES LIKE 'character_set%';
二、MySQL 查看服務器當前運行狀態的信息
SHOW STATUS: 這個命令用于檢索有關 MySQL 服務器當前運行狀態的信息。這些狀態信息包括了連接數、查詢執行次數、緩存命中率等等。SHOW STATUS 顯示的是運行時的統計數據,它們反映了服務器當前的活動和性能。這些數據在服務器運行時實時更新,通常用于監視服務器的運行情況和性能分析。
# 查看全部運行狀態信息
SHOW STATUS;
# 查看以Threads開頭的狀態信息
SHOW STATUS LIKE 'Threads%';
三、MySQL 常用配置詳解
這里要提前說明一下,MySQL的常用配置文件主要分為3個部分
1、mysql(使用mysql命令登錄數據庫時的默認的設置)
[mysql]
# 設置MySQL客戶端默認字符集
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
2、client (客戶端默認設置內容)
[client]
port=3306
# 設置MySQL客戶端默認字符集
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
3、mysqld(服務端端配置)
[mysqld]
# 服務端口
port=3306
# 通過bind-address參數可以控制MySQL監聽哪些IP地址。如果不設置該參數,則默認會監聽所有可用IP地址。
# 使用bind-address參數可以提高MySQL的安全性。例如,我們可以將MySQL綁定到局域網內部的IP地址而不是公網IP地址,以此防止被外界攻擊
bind-address = 0.0.0.0
# 通過mysqld創建的文件或者目錄都是被mysql系統用戶擁有
user=mysql
# 數據存儲目錄
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/lib/mysql/mysql.pid
# 表示是本機的序號為1,一般來講就是master的意思
server-id = 1# 設置時區為東八區
default-time_zone='+8:00'# 服務端使用的字符集默認為8比特編碼的latin1字符集
character-set-server=utf8mb4# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB# lower_case_table_names=0 表名存儲為給定的大小和比較是區分大小寫的
# lower_case_table_names=1 表名存儲在磁盤是小寫的,但是比較的時候是不區分大小寫
# lower_case_table_names=2 表名存儲為給定的大小寫但是比較的時候是小寫的
# unix,linux下lower_case_table_names默認值為 0 .Windows下默認值是 1 .Mac OS X下默認值是 2
lower_case_table_names=0# 設置sql模式 sql_mode模式引起的分組查詢出現*this is incompatible with sql_mode=only_full_group_by,這里最好剔除ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION# 設置密碼驗證規則,如果不設置低版本navicat無法連接
# 默認的鑒權方式,我們修改為mysql_native_password,不然的話連接會報錯。因為在mysql8以后的默認加密方式改變了,由 mysql_native_password 改為了caching_sha2_password。這種加密凡是在客戶端無法訪問,客戶端支持的是mysql_native_password
default_authentication_plugin=mysql_native_password# MySQL支持4種事務隔離級別,他們分別是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如沒有指定,MySQL默認采用的是REPEATABLE-READ,ORACLE默認的是READ-COMMITTED
transaction_isolation = REPEATABLE-READ# 允許最大連接數 默認:151
max_connections=1000
# MySQL能有的連接數量。當主要MySQL線程在一個很短時間內得到非常多的連接請求,這就起作用,默認:151
# 然后主線程花些時間(盡管很短)檢查連接并且啟動一個新線程。back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中。
# 如果期望在一個短時間內有很多連接,你需要增加它。也就是說,如果MySQL的連接數據達到max_connections時,新來的請求將會被存在堆棧中,以等待某一連接釋放資源,該堆棧的數量即back_log,如果等待連接的數量超過back_log,將不被授予連接資源。
# 另外,這值(back_log)限于您的操作系統對到來的TCP/IP連接的偵聽隊列的大小。
# 你的操作系統在這個隊列大小上有它自己的限制(可以檢查你的OS文檔找出這個變量的最大值),試圖設定back_log高于你的操作系統的限制將是無效的。
back_log = 600
# 對于同一主機,如果有超出該參數值個數的中斷錯誤連接,則該主機將被禁止連接。如需對該主機進行解禁,執行:FLUSH HOST。默認:100
max_connect_errors = 6000
# MySQL打開的文件描述符限制,當open_file_limit被配置的時候,比較open_files_limit和max_connections*5的值,哪個大用哪個。MySQL8.0 默認:65536
open_files_limit = 65536# MySQL每打開一個表,都會讀入一些數據到table_open_cache緩存中,當MySQL在這個緩存中找不到相應信息時,才會去磁盤上讀取,MySQL8.0 默認:4000
# 假定系統有200個并發連接,則需將此參數設置為200*N(N為每個連接所需的文件描述符數目);
# 當把table_open_cache設置為很大時,如果系統處理不了那么多文件描述符,那么就會出現客戶端失效,連接不上
table_open_cache = 4000
# 接受的數據包大小;增加該變量的值十分安全,這是因為僅當需要時才會分配額外內存。例如,僅當你發出長查詢或MySQLd必須返回大的結果行時MySQLd才會分配更多內存。
# 該變量之所以取較小默認值是一種預防措施,以捕獲客戶端和服務器之間的錯誤信息包,并確保不會因偶然使用大的信息包而導致內存溢出。
max_allowed_packet = 4M
# 一個事務,在沒有提交的時候,產生的日志,記錄到Cache中;等到事務提交需要提交的時候,則把日志持久化到磁盤。默認binlog_cache_size大小32K
binlog_cache_size = 1M
# 定義了用戶可以創建的內存表(memory table)的大小。這個值用來計算內存表的最大行數值。這個變量支持動態改變
max_heap_table_size = 8M
# MySQL的heap(堆積)表緩沖大小。所有聯合在一個DML指令內完成,并且大多數聯合甚至可以不用臨時表即可以完成。
# 大多數臨時表是基于內存的(HEAP)表。具有大的記錄長度的臨時表 (所有列的長度的和)或包含BLOB列的表存儲在硬盤上。
# 如果某個內部heap(堆積)表大小超過tmp_table_size,MySQL可以根據需要自動將內存中的heap表改為基于硬盤的MyISAM表。還可以通過設置tmp_table_size選項來增加臨時表的大小。也就是說,如果調高該值,MySQL同時將增加heap表的大小,可達到提高聯接查詢速度的效果
tmp_table_size = 16M
# MySQL讀入緩沖區大小。對表進行順序掃描的請求將分配一個讀入緩沖區,MySQL會為它分配一段內存緩沖區。read_buffer_size變量控制這一緩沖區的大小。
# 如果對表的順序掃描請求非常頻繁,并且你認為頻繁掃描進行得太慢,可以通過增加該變量值以及內存緩沖區大小提高其性能
read_buffer_size = 2M
# MySQL的隨機讀緩沖區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,
# MySQL會首先掃描一遍該緩沖,以避免磁盤搜索,提高查詢速度,如果需要排序大量數據,可適當調高該值。但MySQL會為每個客戶連接發放該緩沖空間,所以應盡量適當設置該值,以避免內存開銷過大
read_rnd_buffer_size = 8M
# MySQL執行排序使用的緩沖大小。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段。
# 如果不能,可以嘗試增加sort_buffer_size變量的大小
sort_buffer_size = 8M
# 聯合查詢操作所能使用的緩沖區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享
join_buffer_size = 8M
# 這個值(默認8)表示可以重新利用保存在緩存中線程的數量,當斷開連接時如果緩存中還有空間,那么客戶端的線程將被放到緩存中,
# 如果線程重新被請求,那么請求將從緩存中讀取,如果緩存中是空的或者是新的請求,那么這個線程將被重新創建,如果有很多新的線程,
# 增加這個值可以改善系統性能.通過比較Connections和Threads_created狀態的變量,可以看到這個變量的作用。(–>表示要調整的值)
# 根據物理內存設置規則如下:
# 1G —> 8
# 2G —> 16
# 3G —> 32
# 大于3G —> 64
thread_cache_size = 8
#指定用于索引的緩沖區大小,增加它可得到更好處理的索引(對所有讀和多重寫),到你能負擔得起那樣多。如果你使它太大,
# 系統將開始換頁并且真的變慢了。對于內存在4GB左右的服務器該參數可設置為384M或512M。通過檢查狀態值Key_read_requests和Key_reads,
# 可以知道key_buffer_size設置是否合理。比例key_reads/key_read_requests應該盡可能的低,
# 至少是1:100,1:1000更好(上述狀態值可以使用SHOW STATUS LIKE 'key_read%'獲得)。注意:該參數值設置的過大反而會是服務器整體效率降低
key_buffer_size = 4M# 分詞詞匯最小長度,默認4
ft_min_word_len = 4# 限制Innodb能打開的表的數據,如果庫里的表特別多的情況,請增加這個
innodb_open_files = 4000
# InnoDB使用一個緩沖池來保存索引和原始數據, 不像MyISAM,這里你設置越大,你在存取表里面數據時所需要的磁盤I/O越少.
# 在一個獨立使用的數據庫服務器上,你可以設置這個變量到服務器物理內存大小的80%,不要設置過大,否則,由于物理內存的競爭可能導致操作系統的換頁顛簸.
# 注意在32位系統上你每個進程可能被限制在 2-3.5G 用戶層面內存限制,所以不要設置的太高. 默認值128M
innodb_buffer_pool_size = 128M# innodb使用后臺線程處理數據頁上的讀寫 I/O(輸入輸出)請求,根據你的 CPU 核數來更改,默認是4
# 注:這兩個參數不支持動態改變,需要把該參數加入到my.cnf里,修改完后重啟MySQL服務,允許值的范圍從 1-64
innodb_write_io_threads = 4
innodb_read_io_threads = 4
# 默認設置為 0,表示不限制并發數,這里推薦設置為0,更好去發揮CPU多核處理能力,提高并發量
innodb_thread_concurrency = 0
# InnoDB中的清除操作是一類定期回收無用數據的操作。在之前的幾個版本中,清除操作是主線程的一部分,這意味著運行時它可能會堵塞其它的數據庫操作。
# 從MySQL5.5.X版本開始,該操作運行于獨立的線程中,并支持更多的并發數。用戶可通過設置innodb_purge_threads配置參數來選擇清除操作是否使用單獨線程,默認情況下參數設置為0(不使用單獨線程),設置為 1 時表示使用單獨的清除線程。建議為1
innodb_purge_threads = 1# innodb_flush_log_at_trx_commit=0,表示每隔一秒把log buffer刷到文件系統中(os buffer)去,并且調用文件系統的“flush”操作將緩存刷新到磁盤上去。也就是說一秒之前的日志都保存在日志緩沖區,也就是內存上,如果機器宕掉,可能丟失1秒的事務數據。
# 主線程中每秒會將重做日志緩沖寫入磁盤的重做日志文件(REDO LOG)中。不論事務是否已經提交)默認的日志文件是ib_logfile0,ib_logfile1
# innodb_flush_log_at_trx_commit=1,表示在每次事務提交的時候,都把log buffer刷到文件系統中(os buffer)去,并且調用文件系統的“flush”操作將緩存刷新到磁盤上去。這樣的話,數據庫對IO的要求就非常高了,如果底層的硬件提供的IOPS比較差,那么MySQL數據庫的并發很快就會由于硬件IO的問題而無法提升。
# innodb_flush_log_at_trx_commit=2,表示在每次事務提交的時候會把log buffer刷到文件系統中去,但并不會立即刷寫到磁盤。如果只是MySQL數據庫掛掉了,由于文件系統沒有問題,那么對應的事務數據并沒有丟失。只有在數據庫所在的主機操作系統損壞或者突然掉電的情況下,數據庫的事務數據可能丟失1秒之類的事務數據。這樣的好處,減少了事務數據丟失的概率,而對底層硬件的IO要求也沒有那么高(log buffer寫到文件系統中,一般只是從log buffer的內存轉移的文件系統的內存緩存中,對底層IO沒有壓力)
# 每次事務提交的時候將數據寫入事務日志,而這里的寫入僅是調用了文件系統的寫入操作,而文件系統是有 緩存的,所以這個寫入并不能保證數據已經寫入到物理磁盤
# 默認值1是為了保證完整的ACID。當然,你可以將這個配置項設為1以外的值來換取更高的性能,但是在系統崩潰的時候,你將會丟失1秒的數據。
# 設為0的話,mysqld進程崩潰的時候,就會丟失最后1秒的事務。設為2,只有在操作系統崩潰或者斷電的時候才會丟失最后1秒的數據。InnoDB在做恢復的時候會忽略這個值。
# 總結
# 設為1當然是最安全的,但性能頁是最差的(相對其他兩個參數而言,但不是不能接受)。如果對數據一致性和完整性要求不高,完全可以設為2,如果只最求性能,例如高并發寫的日志服務器,設為0來獲得更高性能
# 默認:1
innodb_flush_log_at_trx_commit = 2
# 此參數確定些日志文件所用的內存大小,以M為單位。緩沖區更大能提高性能,但意外的故障將會丟失數據。MySQL8.0默認為16M
innodb_log_buffer_size = 16M
# 此參數確定數據日志文件的大小,更大的設置可以提高性能,但也會增加恢復故障數據庫所需的時間,MySQL8.0默認為48M
innodb_log_file_size = 48M
# 為提高性能,MySQL可以以循環方式將日志文件寫到多個文件。MySQL8.0默認為2
innodb_log_files_in_group = 2
# innodb主線程刷新緩存池中的數據,使臟數據比例小于90%
innodb_max_dirty_pages_pct = 90
# InnoDB事務在被回滾之前可以等待一個鎖定的超時秒數。InnoDB在它自己的鎖定表中自動檢測事務死鎖并且回滾事務。InnoDB用LOCK TABLES語句注意到鎖定設置。默認值是50秒
innodb_lock_wait_timeout = 60 # 批量插入緩存大小, 這個參數是針對MyISAM存儲引擎來說的。適用于在一次性插入100-1000+條記錄時, 提高效率。默認值是8M。可以針對數據量的大小,翻倍增加。
bulk_insert_buffer_size = 8M
# MyISAM設置恢復表之時使用的緩沖區的尺寸,當在REPAIR TABLE或用CREATE INDEX創建索引或ALTER TABLE過程中排序 MyISAM索引分配的緩沖區
myisam_sort_buffer_size = 8M
# 如果臨時文件會變得超過索引,不要使用快速排序索引方法來創建一個索引。注釋:這個參數以字節的形式給出
myisam_max_sort_file_size = 10G
# 如果該值大于1,在Repair by sorting過程中并行創建MyISAM表索引(每個索引在自己的線程內)
myisam_repair_threads = 1# 服務器關閉交互式連接前等待活動的秒數。交互式客戶端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。默認值:28800秒(8小時)
interactive_timeout = 28800
# 服務器關閉非交互連接之前等待活動的秒數。在線程啟動時,根據全局wait_timeout值或全局interactive_timeout值初始化會話wait_timeout值,
# 取決于客戶端類型(由mysql_real_connect()的連接選項CLIENT_INTERACTIVE定義)。參數默認值:28800秒(8小時)
# MySQL服務器所支持的最大連接數是有上限的,因為每個連接的建立都會消耗內存,因此我們希望客戶端在連接到MySQL Server處理完相應的操作后,應該斷開連接并釋放占用的內存。如果你的MySQL Server有大量的閑置連接,他們不僅會白白消耗內存,而且如果連接一直在累加而不斷開,最終肯定會達到MySQL Server的連接上限數,這會報'too many connections'的錯誤。對于wait_timeout的值設定,應該根據系統的運行情況來判斷。
# 在系統運行一段時間后,可以通過show processlist命令查看當前系統的連接狀態,如果發現有大量的sleep狀態的連接進程,則說明該參數設置的過大,可以進行適當的調整小些。要同時設置interactive_timeout和wait_timeout才會生效。
wait_timeout = 28800# binlog 配置,
log_bin = /var/lib/mysql/binlog
# 日志存儲天數 默認0 永久保存
expire_logs_days = 90
# binlog最大值
max_binlog_size = 1024M
# 規定binlog的格式,binlog有三種格式statement、row、mixad,MySQL8.0之前默認使用statement,MySQL8.0默認使用row格式,建議使用row格式
# ROW:日志中會記錄成每一行數據被修改的形式,然后在 slave 端再對相同的數據進行修改。
# Statement:每一條會修改數據的 SQL 都會記錄到 master 的 bin-log 中。slave 在復制的時候 SQL 進程會解析成和原來 master 端執行過的相同的 SQL 再次執行。
# Mixed:在 Mixed 模式下,MySQL 會根據執行的每一條具體的 SQL 語句來區分對待記錄的日志形式,也就是在 statement 和 row 之間選擇一種。
binlog-format = ROW
# 在提交n次事務后,進行binlog的落盤,0為不進行強行的刷新操作,而是由文件系統控制刷新日志文件,如果是在線交易和賬有關的數據建議設置成1,如果是其他數據可以保持為0即可
sync_binlog = 1
四、配置修改演示
般都是修改 mysqld(服務端端配置),這里會對部分配置進行修改演示。
1、修改 my.cnf 配置文件(window系統修改my.ini配置文件)
window默認地址:C:\ProgramData\MySQL\MySQL Server 8.0.18\my.ini
linux默認地址:/etc/mysql/my.cnf (這個需要看怎么安裝的,我使用docker安裝的是在這個目錄)
找到文件中的 [mysqld],在這個[mysqld]添加需要的配置即可
# 這里需要注意,如果是使用!includedir引入額外配置文件,需要加上[mysqld]不然無法識別
[mysqld]# 服務端使用的字符集默認為8比特編碼的latin1字符集
character-set-server=utf8mb4# MySQL支持4種事務隔離級別,他們分別是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如沒有指定,MySQL默認采用的是REPEATABLE-READ,ORACLE默認的是READ-COMMITTED
transaction_isolation = READ-COMMITTED# 允許最大連接數 默認:151
max_connections=1000# binlog 配置,
log_bin = /var/lib/mysql/binlog
# 日志存儲天數 默認0 永久保存
expire_logs_days = 90
# binlog最大值
max_binlog_size = 1024M
# 規定binlog的格式,binlog有三種格式statement、row、mixad,默認使用statement,建議使用row格式
binlog-format = ROW
# 在提交n次事務后,進行binlog的落盤,0為不進行強行的刷新操作,而是由文件系統控制刷新日志文件,如果是在線交易和賬有關的數據建議設置成1,如果是其他數據可以保持為0即可
sync_binlog = 1
修改好后重啟MySQL
2、查看是否修改成功
這里就看一下默認事務隔離級別配置,登錄MySQL執行下面語句
SHOW VARIABLES LIKE "transaction_isolation";
MySQL默認采用的是REPEATABLE-READ,這里可以看到被更改成READ-COMMITTED
3. docker 配置文件cnf 默認配置文件示例
[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]# 設置東八區時區
default-time_zone = '+8:00'# 設置密碼驗證規則,default_authentication_plugin參數已被廢棄# 改為authentication_policy#default_authentication_plugin=mysql_native_password
authentication_policy=mysql_native_password# 限制導入和導出的數據目錄
# 為空,不限制導入到處的數據目錄;
# 指定目錄,必須從該目錄導入到處,且MySQL不會自動創建該目錄;
# 為NULL,禁止導入與導出功能
#secure_file_priv=/var/lib/mysql
secure_file_priv=
init_connect='SET collation_connection = utf8mb4_0900_ai_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
skip-character-set-client-handshake
skip-name-resolve
五、 MySql中variables系統變量詳解
https://blog.csdn.net/qq_37778018/article/details/96842101