之前遇到开发询问“mysql server has gone away”的问题,想当然的就认为是由于太长时间没有操作,导致超过MySQL服务端上的wait_timeout的设置,最终连接被MySQL服务端回收了。
最近一次突然自己同事写的脚本在运行过程中被中断了,查看报错信息依然是“mysql server has gone away”,同事的脚本在多个MySQL实例上根据时间范围取值,虽然执行时间长了点,但是绝对不会有超过wati_timeout的空闲等待时间,于是去学习了一下到底有哪几种情况会出现这个报错。
情况1
就是最常见的,一个链接超过wait_timeout的设置时间没有做任何事情,被MySQL服务端关闭链接并回收资源。
针对这种情况要不调大wait_timeout或者不断的向MySQL服务端发送心跳信号,保持链接。
情况2
你的链接被kill掉了,有可能是DBA人工操作,也可能是各种自动化系统操作,可以通过监控status中com_kill状态值来判断刚才是否发生了kill操作。
情况3
MySQL的客户端如果默认配置中有mysql_opt_read_timeout或者mysql_opt_write_timeout参数,并且操作时间超过了其中一个参数的设置,客户端自身会关闭链接。所以需要了解自己使用的mysql客户端。
情况4
还有一种可能是发送的请求或者返回的结果集太大了,超过MySQL的max_allowed_packet_size的设置,导致发生这种报错。多说一句,这个参数需要客户端和服务端同时配置并保持一致才会生效。
最常见的Linux上的mysql客户端可以使用如下命令查看:
mysql --help | grep ^max-allowmax-allowed-packet 1677721
我们可以看到我们服务器上默认的设置为16M。
情况5
这种比较罕见的情况是MySQL服务端的DNS反解失败导致,理论上我们可以配置–skip-networking参数来规避这种问题。(但是官方文档居然说即使配置了也可能出现这种报错,T_T)
情况6
还有就是如果程序使用了多进程,而所有进程都尝试使用同一个链接和MySQL服务端建立链接的时候就会出现gone away的报错了。(初步怀疑,这也就是我同事遇到的问题了。)
情况7
最后这种比较弱,但是真实发生过,那就是mysql实例宕机了。实例都没有了,自然什么都没有了。当然这种情况判断起来比较方便,一般都会有mysql的存活监控。但是要小心一种情况,就是实例crash后迅速recover,如果监控程序的间隔大于recover的时间,那么就很难发现了。建议使用如下方法复查一下,另外针对uptime最好做为状态的一个必要监控点。
show global status like 'uptime';+---------------+---------+| Variable_name | Value |+---------------+---------+| Uptime | 1230699 |+---------------+---------+
最后如果想对“mysql server has gone away”进行详细的追查,建议在mysqld实例启动的时候添加–log-warnings=2 参数,这样就可以在error日志中看到详细的信息了。

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

構建MySQL數據庫的步驟包括:1.創建數據庫和表,2.插入數據,3.進行查詢。首先,使用CREATEDATABASE和CREATETABLE語句創建數據庫和表,然後用INSERTINTO語句插入數據,最後用SELECT語句查詢數據。

MySQL適合初學者,因為它易用且功能強大。 1.MySQL是關係型數據庫,使用SQL進行CRUD操作。 2.安裝簡單,需配置root用戶密碼。 3.使用INSERT、UPDATE、DELETE、SELECT進行數據操作。 4.複雜查詢可使用ORDERBY、WHERE和JOIN。 5.調試需檢查語法,使用EXPLAIN分析查詢。 6.優化建議包括使用索引、選擇合適數據類型和良好編程習慣。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版