[玩轉MySQL之二]MySQL連接機制淺析及運維
3 人贊了文章
前言
使用MySQL資料庫的第一步必然是建立連接登錄,然後在上面執行SQL命令。無論是通過mysql的客戶端,還是通過C-API,JDBC標準介面連接資料庫,這個過程一定少不了。那麼就不經有幾個疑問?
1. 可以通過哪幾種方式連接?
- 當C和S都在同一台機器上時,那他們之間的通信方式是否和進程間的通信差不多?
- 當C和S不在一台伺服器上時候,是採用tcp來通信?還是使用http?
- 當C和S不在一台伺服器上時,不論是採用tcp或者http通信,都會有安全風險,是否有加密措施?
2. MySQL的連接有沒有區別?
- 如果MySQL的連接有區別,分為哪幾種?他們之間的區別是什麼
3. MySQL伺服器是如何管理客戶端連接請求的?
- 連接的時候,客戶端每法送一個請求,MySQL伺服器就重新創建一個連接么?
- 如果不是,那麼伺服器端是如何處理的?
- MySQL伺服器的連接數有沒有限制?
- 連接數限制能否精確到用戶?
- C/S之間的連接是否有時間限制?
4. MySQL伺服器相關的連接配置參數有哪些?
5. MySQL伺服器中連接相關信息如何查看?
6. 客戶端連接MySQL伺服器會出現哪些錯誤以及解決辦法?
一、MySQL連接方式
到MySQL5.7為止,總共有五種連接方式,分別是TCP/IP,TLS/SSL,Unix Sockets,Shared Memory,Named pipes,具體區別如下:
使用教程
由於小編使用的是Mac OS系統,下面只簡單介紹非Windows系統下的三種連接方式。
1.Unix Sockets
mysql -uroot
如果在MySQL本機使用這種方式連接MySQL資料庫,默認使用Unix Sockets。
2.TCP/IP
mysql --protocol=tcp -urootmysql -P3306 -h127.0.0.1 -uroot
連接的時候指定連接協議,或者指定相應的IP及埠,則連接方式就變成了TCP/IP方式。
3.TLS/SSL
mysql --protocol=tcp -uroot --ssl=onmysql -P3306 -h127.0.0.1 -uroot --ssl=on
TLS/SSL是基於TCP/IP的,所以只需再指定打開ssl配置即可。然後我們通過以下語句來查詢目前資料庫的連接情況:
SELECT DISTINCT connection_type from performance_schema.threads where connection_type is not null
如何選擇連接方式呢?
1. 如果程序和資料庫在同一台機子(類Unix系統)上,推薦使用Unix Sockets,因為它效率更高; 2. 若資料庫分布在不同的機子上,且能確保連接安全或者安全性要求不是那麼高,推薦使用TCP/IP,反之使用TLS/SSL;
二、 MySQL連接分類
當資料庫伺服器和客戶端位於不同的主機時,就需要通過建立網路連接來進行通信。客戶端必須使用資料庫連接來發送命令和接收應答、數據。根據伺服器的處理機制分為短連接和長連接。
1.短連接
短連接是指程序和資料庫通信時需要建立連接,執行操作後,連接關閉。短連接簡單來說就是每一次操作資料庫,都要打開和關閉資料庫連接,基本步驟是:連接→數據傳輸→關閉連接。
在慢速網路下使用短連接,連接的開銷會很大;在生產繁忙的系統中,連接也可能會受到系統埠數的限制,如果要每秒建立幾千個連接,那麼連接斷開後,埠不會被馬上回收利用,必須經歷一個「FIN」階段的等待,直到可被回收利用為止,這樣就可能會導致埠資源不夠用。在Linux上,可以通過調整/proc/sys/net/ipv4/ip_local_port_range來擴大埠的使用範圍;調整/proc/sys/net/ipv4/tcp_fin_timeout來減少回收延期(如果想在應用伺服器上調整這個參數,一定要慎重!)。
另外一個辦法是主機使用多個IP地址。埠數的限制其實是基於同一個IP:PORT的,如果主機增加了IP,MySQL就可以監聽多個IP地址,客戶端也可以選擇連接某個IP:PORT,這樣就增加了埠資源。
2.長連接
長連接是指程序之間的連接在建立之後,就一直打開,被後續程序重用。使用長連接的初衷是減少連接的開銷,儘管MySQL的連接比其他資料庫要快得多。
以PHP程序為例,當收到一個永久連接的請求時,PHP將檢查是否已經存在一個(前面已經開啟了的)相同的永久連接。如果存在,則將直接使用這個連接;如果不存在,則建立一個新的連接。所謂「相同」的連接是指用相同的用戶名和密碼到相同主機的連接。
從客戶端的角度來說,使用長連接有一個好處,可以不用每次創建新連接,若客戶端對MySQL伺服器的連接請求很頻繁,永久連接將更加高效。對於高並發業務,如果可能會碰到連接的衝擊,推薦使用長連接或連接池。
從伺服器的角度來看,情況則略有不同,它可以節省創建連接的開銷,但維持連接也是需要內存的。如果濫用長連接的話,可能會使用過多的MySQL伺服器連接。現代的操作系統可以擁有幾千個MySQL連接,但很有可能絕大部分都是睡眠(sleep)狀態的,這樣的工作方式不夠高效,而且連接佔據內存,也會導致內存的浪費。
對於擴展性好的站點來說,其實大部分的訪問並不需要連接資料庫。如果用戶需要頻繁訪問資料庫,那麼可能會在流量增大的時候產生性能問題,此時長短連接都是無法解決問題的,所以應該進行合理的設計和優化來避免性能問題。
如果客戶端和MySQL資料庫之間有連接池或Proxy代理,一般在客戶端推薦使用短連接。對於長連接的使用一定要慎重,不可濫用。如果沒有每秒幾百、上千的新連接請求,就不一定需要長連接,也無法從長連接中得到太多好處。在Java語言中,由於有連接池,如果控制得當,則不會對資料庫有較大的衝擊,但PHP的長連接可能導致資料庫的連接數超過限制,或者佔用過多的內存。
對此,研發工程師、系統運維工程師、DBA需要保持溝通,確定合理的連接策略,千萬不要不假思索就採用長連接。
3.連接池
由於一些資料庫創建和銷毀連接的開銷很大,或者相對於所執行的具體數據操作,連接所耗的資源過多,此時就可能需要添加連接池來改進性能。
資料庫連接池是一些網路代理服務或應用伺服器實現的特性,如J2EE伺服器,它實現了一個持久連接的「池」,允許其他程序、客戶端來連接,這個連接池將被所有連接的客戶端共享使用,連接池可以加速連接,也可以減少資料庫連接,降低資料庫伺服器的負載。
4.持久連接和連接池的區別
長連接是一些驅動、驅動框架、ORM工具的特性,由驅動來保持連接句柄的打開,以便後續的資料庫操作可以重用連接,從而減少資料庫的連接開銷。而連接池是應用伺服器的組件,它可以通過參數來配置連接數、連接檢測、連接的生命周期等。
如果連接池或長連接使用的連接數很多,有可能會超過資料庫實例的限制,那麼就需要留意連接相關的設置了,比如連接池的最小、最大連接數設置,以及php-fpm的進程個數等,否則程序將不能申請新的連接。
三、MySQL伺服器端如何管理客戶端連接
MySQL連接管理器線程負責處理伺服器偵聽的網路介面上的客戶端連接請求。連接管理器線程將每個客戶端連接與專用於它的線程相關聯,以處理該連接的身份驗證和請求處理。
連接管理線程在必要時創建一個新線程,但是會先嘗試避免這樣做,MySQL連接管理器線程首先會查看線程緩存是否包含空閑可用於連接的線程,如果有,則從線程緩存中選取一個空閑的線程分配給客戶端,如果沒有,則重新創建一個線程。當連接結束時,如果緩存未滿,則其線程返回到線程緩存中,用於下次使用。
在這種連接線??程模型中,存在與當前連接的客戶端一樣多的線程,這在伺服器工作負載高還必須以處理大量的連接時具有一些缺點,例如,線程創建和處理變得昂貴。此外,每個線程都需要消耗伺服器的內核資源,如堆棧空間。所以為了適應大量的並發連接,每個線程的堆棧大小必須保持較小,否則會由於太大導致消耗伺服器大量內存的情況,也可能耗盡其他資源,調度開銷也會變得很大。
為了控制和監視伺服器如何管理客戶端連接的線程,有幾個系統和狀態變數可以查看。
線程緩存由thread_cache_size系統變數確定其大小,默認值為0(無緩存),這將導致為每個新連接設置一個線程,並在連接終止時進行處理。設置thread_cache_size為N,啟用N個非活動連接線程被緩存。thread_cache_size可以在伺服器啟動時設置或在伺服器運行時更??改,連接線程在與其關聯的客戶端連接終止時變為不活動。
通過MySQL狀態變數Threads_cached和Threads_created可以監控高速緩存中的線程數和已經創建了多少個線程。另外你也可以通過max_connections變數控制可以同時連接的最大客戶端數。
但當線程堆棧太小時,會限制了伺服器可以處理的SQL語句的複雜性,存儲過程的遞歸深度和其他內存消耗的操作。
四、 MySQL伺服器相關的連接配置參數
1.skip-networking
開啟該選項可以徹底關閉MySQL的TCP/IP連接方式,如果WEB伺服器是以遠程連接的方式訪問MySQL資料庫伺服器則不要開啟該選項!否則將無法正常連接!
2.skip-name-resolve
禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求!
3.max_connections
max_connections是指MySql的最大連接數,如果伺服器的並發連接請求量比較大,建議調高此值,以增加並行連接數量,當然這建立在伺服器能支撐的情況下,因為如果連接數越多,由於MySQL會為每個連接提供連接緩衝區,就會開銷越多的內存,所以要適當調整該值,不能盲目提高設值。
4.max_user_connections
max_user_connections是指每個資料庫用戶的最大連接 針對某一個賬號的所有客戶端並行連接到MYSQL服務的最大並行連接數。簡單說是指同一個賬號能夠同時連接到mysql服務的最大連接數。設置為0表示不限制。
順便介紹下show global status中的Max_used_connections:它是指從這次mysql服務啟動到現在,同一時刻並行連接數的最大值。它不是指當前的連接情況,而是一個比較值。如果在過去某一個時刻,MYSQL服務同時有1000個請求連接過來,而之後再也沒有出現這麼大的並發請求時,則Max_used_connections=1000.請注意與show variables 里的max_user_connections的區別。默認為0表示無限大。
5. max_connect_errors
設置每個主機的連接請求異常中斷的最大次數,當超過該次數,MySQL伺服器將禁止host的連接請求,直到mysql伺服器重啟或通過flush hosts命令清空此host的相關信息。
6.thread_handing
Mysql 服務中線程處理模式包括兩種: no-threads(單線程處理,多用於debug) one- thread-per-connection(每個請求對應一個線程,目前被作為默認值);
7.thread_cache_size
這個值表示可以重新利用保存在緩存中線程的數量,當斷開連接時如果緩存中還有空間,那麼客戶端的線程將被放到緩存中,如果線程重新被請求,那麼請求將從緩存中讀取,如果緩存中是空的或者是新的請求,那麼這個線程將被重新創建,如果有很多新的線程,增加這個值可以改善系統性能.因為當應用發起一個對資料庫的操作時,在整個應用中是一個不小的開銷,從建立連接之初,CPU 要給它劃分一定的thread stack,然後進行用戶身份認證,建立上下文信息,最後請求完成,關閉連接,同時釋放資源,可以稱的上是秒級的過程,在高並發的情況下,將給系統帶來巨大的壓力更不能保證性能。所以,採用線程重用,減小這部分的消耗。通過比較 Connections 和 Threads_created 狀態的變數,可以看到這個變數的作用。
mysql> show status like thread%;mysql> show status like thread%;+-------------------+-------+| Variable_name | Value |+-------------------+-------+| Threads_cached | 649 | <—當前被緩存的空閑線程的數量| Threads_connected | 93 | <—正在使用(處於連接狀態)的線程| Threads_created | 742 | <—服務啟動以來,創建了多少個線程| Threads_running | 5 | <—正在忙的線程(正在查詢數據,傳輸數據等等操作)+-------------------+-------+```查看開機起來資料庫被連接了多少次?```bashmysql> show status like %connections%;mysql> show global status like %connections%;+-----------------------------------+---------------------+| Variable_name | Value |+-----------------------------------+---------------------+| Connection_errors_max_connections | 0 || Connections | 101395055 | <–服務啟動以來,歷史連接數| Max_used_connections | 742 || Max_used_connections_time | 2018-08-21 15:42:38 |+-----------------------------------+---------------------+
通過連接線程池的命中率來判斷設置值是否合適?命中率超過90%以上,設定合理。 (Connections - Threads_created) / Connections * 100 %
8. thread_stack
每個連接線程被創建時,MySQL給它分配的內存大小。當MySQL創建一個新的連接線程時,需要給它分配一定大小的內存堆棧空間,以便存放客戶端的請求的Query及自身的各種狀態和處理信息。當然如果遇到下面的錯誤提示就應該考慮增加這個值了。 mysql-debug: Thread stack overrun 如:
java.sql.SQLException: Thread stack overrun: 5456 bytes used of a 131072 byte stack, and 128000 bytes needed. Use mysqld --thread_stack=# to specify a bigger stack.
9.Connect_Timeout
字面上看意思是連接超時,指的是MySQL連接過程中握手的超時時間,在5.0.52以後默認為10秒,之前版本默認是5秒。
connect_timeout: The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake. The default value is 10 seconds as of MySQL 5.0.52 and 5 seconds before that
mysql的基本原理是有個監聽線程循環接收請求,當有請求來時,創建線程(或者從線程池中取)來處理這個請求。由於mysql連接採用TCP協議,那麼之前勢必是需要進行TCP三次握手的。TCP三次握手成功之後,客戶端會進入阻塞,等待服務端的消息。服務端這個時候會創建一個線程(或者從線程池中取一個線程)來處理請求,主要驗證部分包括host和用戶名密碼驗證。host驗證我們比較熟悉,因為在用grant命令授權用戶的時候是有指定host的。用戶名密碼認證則是服務端先生成一個隨機數發送給客戶端,客戶端用該隨機數和密碼進行多次sha1加密後發送給服務端驗證。如果通過,整個連接握手過程完成。(具體握手過程後續找到資料再分析)
由此可見,整個連接握手可能會有各種可能出錯。所以這個connect_timeout值就是指這個超時時間了。可以簡單測試下,運行下面的telnet命令會發現客戶端會在10秒後超時返回。
$time telnet mysql_ip_addr port$ time telnet 127.0.0.1 5051Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is ^].?Connection closed by foreignhost.real 0m5.005s #這裡的5秒即mysql默認的連接超時user 0m0.000ssys 0m0.000s
Telnet未退出前通過show processlist查看各線程狀態可見,當前該連接處於授權認證階段,此時的用戶為「unauthenticated user」。
256 | unauthenticated user | localhost:60595 | NULL | Connect | NULL | Reading from net | NULL
10.wait_timeout&interactive_timeout
等待超時,那mysql等什麼呢?確切的說是mysql在等用戶的請求(query),如果發現一個線程已經sleep的時間超過wait_timeout了那麼這個線程將被清理掉,從文檔上來看wait_timeout和interactive_timeout都是指不活躍的連接超時時間,而interactive_timeout針對互動式連接,wait_timeout針對非互動式連接。MySQL連接線程啟動的時候wait_timeout會根據是交互模式還是非交互模式被設置為這兩個值中的一個。如果我們運行mysql -uroot -p命令登陸到mysql,wait_timeout就會被設置為interactive_timeout的值。如果我們在wait_timeout時間內沒有進行任何操作,那麼再次操作的時候就會提示超時,這是mysql client會重新連接。 關於兩者的區別,請參考雲小秘博客MySQL之wait_timeout和interactive_timeout參數
11. net_read_timeout
資料庫從客戶端讀取數據超時時間。在終止讀之前,從一個連接獲得數據而等待的時間秒數;當服務正在從客戶端讀取數據時,net_read_timeout控制何時超時。即客戶端執行數據讀取,等待多少秒仍未執行成功時自動斷開連接。 可能的原因為網路異常或客戶端/伺服器端忙無法及時發送或接收處理包。
12. net_write_timeout
資料庫往客戶端寫數據超時時間。和net_read_timeout意義類似,在終止寫之前,等待多少秒把block寫到連接;當服務正在寫數據到客戶端時,net_write_timeout控制何時超時。一般在網路條件比較差的時,或者客戶端處理每個數據塊耗時比較長時,由於 net_write_timeout導致的連接中斷很容易發生。
13. net_retry_count
如果MySQL服務端在讀寫數據時,出現連接中斷,會重試net_retry_count指定的次數。在系統FreeBSD中有效,Linux中只有在build的時候指定NO_ALARM參數時net_retry_count才會起作用。
connect_timeout在獲取連接階段(authenticate)起作用,interactive_timeout和wait_timeout在連接空閑階段(sleep)起作用,而net_read_timeout和net_write_timeout則是在連接繁忙階段(query)起作用。
獲取MySQL連接是多次握手的結果,除了用戶名和密碼的匹配校驗外,還有IP->HOST->DNS->IP驗證,任何一步都可能因為網路問題導致線程阻塞。為了防止線程浪費在不必要的校驗等待上,超過connect_timeout的連接請求將會被拒絕。 即使沒有網路問題,也不能允許客戶端一直佔用連接。對於保持sleep狀態超過了wait_timeout(或interactive_timeout,取決於CLIENT_INTERACTIVE標誌)的客戶端,MySQL會主動斷開連接。 即使連接沒有處於sleep狀態,即客戶端忙於計算或者存儲數據,MySQL也選擇了有條件的等待。在數據包的分發過程中,客戶端可能來不及響應(發送、接收、或者處理數據包太慢)。為了保證連接不被浪費在無盡的等待中,MySQL也會選擇有條件(net_read_timeout和net_write_timeout)地主動斷開連接。比如我在客戶端用load data infile的方式導入很大的一個文件到資料庫中,然後中途用iptables禁用掉mysql的3306埠,這個時候伺服器端該連接狀態是reading from net,在等待net_read_timeout後關閉該連接。同理,在程序裡面查詢一個很大的表時,在查詢過程中同樣禁用掉埠,製造網路不通的情況,這樣該連接狀態是writing to net,然後在net_write_timeout後關閉該連接。
五、 MySQL連接相關狀態查看
查看MySQL狀態命令:
1. show global status # 輸出所有記錄的狀態2. show global status like %xxxx% # 輸出記錄帶有xxx關鍵字的狀態 如: show global status like 『thread%』
1. Aborted_clients
由於客戶端沒有正確關閉連接導致客戶端終止而中斷的連接數。 如,客戶端和服務端建立連接好之後,等待wait_time時間後,客戶端和伺服器之間的連接自動退出,此時會發現Aborted_clients計數器加1。
2. Aborted_connects
試圖連接到MySQL伺服器而失敗的連接數。如:telnet 127.0.0.1 3306, 然後什麼都不做, ctrl+],quit退出,就會發現aborted_connects計數器加1。
3. connections
試圖連接到(不管成功與否)MySQL伺服器的連接數計數。
4. Bytes_received
從所有客戶端接收到的位元組數。
5. Bytes_sent
發送給所有客戶端的位元組數。
6. Threads_cached
代表當前此時此刻線程緩存中有多少空閑線程。
7.Threads_connected
代表當前已建立連接的數量,因為一個連接就需要一個線程,所以也可以看成當前被使用的線程數。
8. Threads_created
創建用來處理連接的線程數。如果Threads_created較大,則需要增加thread_cached_size的值。
9.Threads_running
代表當前激活的(非睡眠狀態)線程數。
六、MySQL連接常見錯誤
1.ERROR 1045 (28000): Access denied for user testcon@10.24.236.231 (using password: YES)
原因1: 可能是用戶密碼錯誤
原因2: 可能是用戶錯誤 原因3: 可能是host錯誤
解決辦法:
- 如果確認密碼正確,檢查mysql.user表裡面的account信息(主要是user,host列),確認連接的account符合user裡面的匹配項
- 如果通過mysql.user account正常,可以嘗試更改一下密碼再進行測試
- 最快速簡單的方法是重新創建一個賬號,授予相關的許可權
2.ERROR 2005 (HY000): Unknown MySQL server host com-mysql.coflodhn1n0y.us-west-1.rds.amazonaws.com (110)
原因: 可能DNS解析異常
解決方法: 通過ping來觀察dns的解析,並檢查系統dns配置。如果ping資料庫域名無法獲取IP,則可以判斷dns配置有問題。
3. ERROR 1449 (HY000): The user specified as a definer (testcon@10.24.236.231) does not exist 或者ERROR 1045 (28000): user not exist
原因: account不存在
解決辦法 : 檢查mysql.user表裡面的account信息(主要是user,host列),確認連接的account符合user裡面的匹配項
4.ERROR 2003 (HY000): Cant connect to MySQL server on test.mysql.rds.aliyuncs.com (110)
原因1: 安全限制,不允許訪問,比如防火牆或者雲RDS的白名單
原因2: 埠錯誤,如MySQL運行埠不是3306 原因3: mysql服務未正確運行
解決辦法: 執行lsof -i:3306, 檢查下3306埠的進程信息 執行ps -ef | grep mysql,檢查下進程信息 如果前兩步沒有輸出,可能mysql server未在主機正確運行 如果前兩步有輸出,說明MySQL正常運行,則檢查一下防火牆配置規則,或者使用telnet host 3306 * 雲資料庫RDS,需檢查RDS的白名單中是否包含客戶端伺服器IP
5. ERROR 1135 (HY000): Cant create a new thread (errno 11); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug
原因1: 伺服器操作系統limits.conf文件對max user processes做了限制
原因2: MySQL沒有可用內存
解決辦法: 通過命令 ulimit -a查看max user processes配置,如果較小,修改內核參數 增加MySQL內存
6. ERROR 1130 (HY000): Host 192.168.1.3 is not allowed to connect to this MySQL server
原因: mysql.user表裡沒有匹配的host名稱
解決辦法: 檢查mysql.user表裡面的account信息(主要是user,host列),確認連接的account符合user裡面的匹配項
7.ERROR 1045 (HY000): #28000ip not in whitelist
原因: rds for mysql的提示,且訪問模式為高安全模式才會出現,原因是ip地址沒有在rds的白名單中
解決辦法: 檢查RDS的白名單中是否包含客戶端伺服器IP地址
8.ERROR 5 (HY000): Out of memory (Needed 260400 bytes)
原因: MySQL沒有可用內存
解決辦法: (先確認內存是否已經不足):增加mysql的內存,如果是rds,可以考慮升級RDS的實例規格
9. ERROR 1129 (HY000): Host 10.24.236.231 is blocked because of many connection errors; unblock with mysqladmin flush-hosts
原因: account達到了MySQL伺服器設置的max_connect_errors的值
解決辦法: 系統命令行下執行mysqladmin flush-hosts或者mysql命令行里執行flush hosts
10. ERROR 1226 (42000): User testcon has exceeded the max_user_connections resource (current value: 2)
原因: 達到了該account設定的max_user_connections大小
解決辦法:
重新使用grant設置用戶的max_user_connections或者調整系統變數max_user_connections,如果沒有許可權,也可以刪除賬號重新創建
11. ERROR 1226 (42000): User testcon has exceeded the max_connections_per_hour resource (current value: 2)
原因: 達到了該account設定的max_connections_per_hour大小
解決辦法:
重新grant該賬號max_connections_per_hour為0,如果沒有許可權,也可以刪除賬號重新創建
12.ERROR 1040 (HY000): Too many connections
原因: 達到了mysql系統參數max_connections的限制
解決辦法:
- 檢查MySQL server的CPU,IO,內存等狀態的變化,是否有明顯的升高現象,如果有明顯的升高,實時的通過show processlist獲取session信息,通過獲取到的session信息分析cpu,io以及內存跑高的原因,綜合分析(是否是遇到了阻塞或者慢查詢)kill掉相關會話來解決
- 檢查MySQL server的CPU,IO,內存等狀態的變化,是否有明顯的升高現象,如果沒有明顯的升高,實時的通過show processlist獲取session信息,通過獲取到的session信息找到會話來源(看下是否是sleep連接較多),嘗試調整來源主機的應用行為
- 如果無法手動干預,嘗試調整MySQL的max_connections的值,如果是rds for mysql,需要升級實例規格來提升連接數
參考資料
MySQL網路協議分析
MySQL初識-架構-安裝-初始化-連接-管理工具-數據文件
mysql timeout各種超時的機制以及區別
MySQL性能優化之參數配置 mysql timeout知多少
mysql查看connect_timeout設置
MySQL 各種超時參數的含義 mysql timeout各種超時的機制以及區別
MySQL連接錯誤的十二「坑」
更多內容請關注公眾號
http://weixin.qq.com/r/MygJEfbEoqvdrbJy930h (二維碼自動識別)
推薦閱讀:
※交通與安防影像管理
※關於學習Oracle資料庫的總結(1)
※學習SQL【4】-聚合與排序
※MySQL資料庫誤刪恢復
※醫經溯洄集 [笈成資料庫]