日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

解決mysql服務器在無操作超時主動斷開連接的情況

瀏覽:41日期:2023-10-13 16:25:19

我們在使用mysql服務的時候,正常情況下,mysql的設置的timeout是8個小時(28800秒),也就是說,如果一個連接8個小時都沒有操作,那么mysql會主動的斷開連接,當這個連接再次嘗試查詢的時候就會報個”MySQL server has gone away”的誤,但是有時候,由于mysql服務器那邊做了一些設置,很多情況下會縮短這個連接timeout時長以保證更多的連接可用。有時候設置得比較變態,很短,30秒,這樣就需要客戶端這邊做一些操作來保證不要讓mysql主動來斷開。

查看mysql的timeout

使用客戶端工具或者Mysql命令行工具輸入show global variables like ’%timeout%’;就會顯示與timeout相關的屬性,這里我用docker模擬了一個測試環境。

mysql> show variables like ’%timeout%’; +-----------------------------+----------+| Variable_name| Value |+-----------------------------+----------+| connect_timeout | 10 || delayed_insert_timeout | 300 || have_statement_timeout | YES || innodb_flush_log_at_timeout | 1 || innodb_lock_wait_timeout | 50 || innodb_rollback_on_timeout | OFF || interactive_timeout | 30 || lock_wait_timeout | 31536000 || net_read_timeout | 30 || net_write_timeout | 60 || rpl_stop_slave_timeout | 31536000 || slave_net_timeout | 60 || wait_timeout| 30 |+-----------------------------+----------+13 rows in set

wait_timeout:服務器關閉非交互連接之前等待活動的秒數,就是你在你的項目中進行程序調用

interactive_timeout: 服務器關閉交互式連接前等待活動的秒數,就是你在你的本機上打開mysql的客戶端,cmd的那種

使用pymysql進行查詢

我在數據庫里隨便創建了一個表,插入兩條數據

mysql> select * from person;+----+------+-----+| id | name | age |+----+------+-----+| 1 | yang | 18 || 2 | fan | 16 |+----+------+-----+2 rows in set

我使用pymysql這個庫對其進行查詢操作,很簡單

#coding:utf-8import pymysqldef mytest(): connection = pymysql.connect( host=’localhost’, port=3306, user=’root’, password=’123456’, db=’mytest’, charset=’utf8’) cursor = connection.cursor() cursor.execute('select * from person') data = cursor.fetchall() cursor.close() for i in data: print(i) cursor.close() connection.close()if __name__ == ’__main__’: mytest()

可以正確的得到結果

(1, ’yang’, 18)

(2, ’fan’, 16)

連接超時以后的查詢

上面可以正常得到結果是由于當創建好一個鏈接以后,就立刻進行了查詢,此時還沒有超過它的超時時間,如果我sleep一段時間,看看什么效果。

#coding:utf-8import pymysqlimport timedef mytest(): connection = pymysql.connect( host=’localhost’, port=3306, user=’root’, password=’123456’, db=’mytest’, charset=’utf8’) cursor = connection.cursor() cursor.execute('select * from person') data = cursor.fetchall() for i in data: print(i) cursor.close() time.sleep(31) cursor = connection.cursor() cursor.execute('select * from person') data2 = cursor.fetchall() for i in data2: print(i) cursor.close() connection.close()if __name__ == ’__main__’: mytest()

這里進行了兩次查詢,因為我把mysql的wait_timeout設置了30秒,所以我在第一次查詢之后停了31秒,目的讓mysql服務主動的和我剛才創建的連接斷開,得到的結果是

(1, ’yang’, 18)(2, ’fan’, 16)Traceback (most recent call last): File 'F:/python/python3Test/mysqltest.py', line 29, in <module> mytest() File 'F:/python/python3Test/mysqltest.py', line 22, in mytest cursor.execute('select * from person') ... ... File 'C:Python35libsite-packagespymysqlconnections.py', line 702, in _read_bytes CR.CR_SERVER_LOST, 'Lost connection to MySQL server during query')pymysql.err.OperationalError: (2013, ’Lost connection to MySQL server during query’)Process finished with exit code 1

可以看到在停了31秒鐘以后,再次使用該連接進行查詢將拋出2013, ’Lost connection to MySQL server during query’錯誤。

解決辦法

解決的方法有兩種,既然這里的超時是由于在規定時間內沒有任何操作導致mysql主動的將鏈接關閉,pymysql的connection對象有一個ping()方法,可以檢查連接是否有效,在每次執行查詢操作之前先執行一下ping()方法,該方法默認的有個reconnect參數,默認是True,如果失去連接了會重連。

#coding:utf-8import pymysqlimport timedef mytest(): connection = pymysql.connect( host=’localhost’, port=3306, user=’root’, password=’123456’, db=’mytest’, charset=’utf8’) connection.ping() cursor = connection.cursor() cursor.execute('select * from person') data = cursor.fetchall() for i in data: print(i) cursor.close() time.sleep(31) connection.ping() cursor = connection.cursor() cursor.execute('select * from person') data2 = cursor.fetchall() for i in data2: print(i) cursor.close() connection.close()if __name__ == ’__main__’: mytest()

我曾嘗試使用另外一個線程不停來執行ping()操作,但是當我這樣做以后連接就會丟失,之后的操作就不能進行了。這個問題我再研究研究。

#coding:utf-8import pymysqlimport timeimport threadingimport tracebackdef ping(conn): while True: try: conn.ping() except: print(traceback.format_exc()) finally: time.sleep(1)def mytest(): connection = pymysql.connect( host=’localhost’, port=3306, user=’root’, password=’123456’, db=’mytest’, charset=’utf8’) cursor = connection.cursor() # 放在此處不行,必須等待cursor的一個execute之后再運行才可以 # th = threading.Thread(target=ping, args=(connection,)) # th.setDaemon(True) # th.start() cursor.execute('select * from person') data = cursor.fetchall() for i in data: print(i) cursor.close() # 線程放在此處啟動可以 th = threading.Thread(target=ping, args=(connection,)) th.setDaemon(True) th.start() time.sleep(31) cursor = connection.cursor() cursor.execute('select * from person') data2 = cursor.fetchall() for i in data2: print(i) cursor.close() connection.close()if __name__ == ’__main__’: mytest()

還有一種方法是使用連接池,連接池中保持著指定數量的可用連接,每次重新獲取一個有效的連接進行查詢操作,pymysql本身不具有連接池功能,需要借住DBUtils

#coding:utf-8import pymysqlimport timefrom DBUtils.PooledDB import PooledDB, SharedDBConnectiondef mytest(): pool = PooledDB( creator=pymysql, # 初始化時,連接池至少創建的空閑連接,0表示不創建 maxconnections=3, # 連接池中空閑的最多連接數,0和None表示沒有限制mincached=2, # 連接池中最多共享的連接數量,0和None表示全部共享(其實沒什么卵用) maxcached=5,maxshared=3, host=’localhost’, port=3306, user=’root’, password=’123456’, db=’mytest’, charset=’utf8’ ) connection = pool.connection() cursor = connection.cursor() cursor.execute('select * from person') data = cursor.fetchall() for i in data: print(i) time.sleep(40) cursor.execute('select * from person') data2 = cursor.fetchall() for i in data2: print(i) cursor.close() connection.close()if __name__ == ’__main__’: mytest()

這種方式雖然可以正確的獲取結果,但是實際的項目中并不會這么使用,而是在執行完查詢語句以后要將connection關閉,注意這里的關閉并不是真正的關閉,而只是將連接返回給連接池讓其它人使用.

#coding:utf-8import pymysqlimport timefrom DBUtils.PooledDB import PooledDB, SharedDBConnectiondef mytest(): pool = PooledDB( creator=pymysql, maxconnections=3, # 初始化時,連接池至少創建的空閑連接,0表示不創建 mincached=2, # 連接池中空閑的最多連接數,0和None表示沒有限制 maxcached=5, # 連接池中最多共享的連接數量,0和None表示全部共享(其實沒什么卵用) maxshared=3, host=’localhost’, port=3306, user=’root’, password=’123456’, db=’mytest’, charset=’utf8’ ) connection = pool.connection() cursor = connection.cursor() cursor.execute('select * from person') data = cursor.fetchall() for i in data: print(i) cursor.close() # 關閉連接,其實并沒有真正關閉,只是將連接返回給連接池 connection.close() time.sleep(40) connection = pool.connection() cursor = connection.cursor() cursor.execute('select * from person') data2 = cursor.fetchall() for i in data2: print(i) cursor.close() connection.close()if __name__ == ’__main__’: mytest()

以上這篇解決mysql服務器在無操作超時主動斷開連接的情況就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩视频在线一区二区三区| 伊人www22综合色| 久久国产麻豆精品| 久久狠狠久久| 国产一区二区三区国产精品| 久久只有精品| 久久精品中文| 老鸭窝毛片一区二区三区| 亚洲精品一二三**| 国产精品一国产精品k频道56| 精品视频在线观看网站| 婷婷激情一区| 每日更新成人在线视频| 国产美女精品视频免费播放软件| 精品国产aⅴ| 精品一区亚洲| 欧美日韩18| 性感美女一区二区在线观看| 亚洲免费影院| 久久这里只有精品一区二区| 性欧美videohd高精| 日韩一区二区三免费高清在线观看| 国产精品尤物| 蜜桃精品在线| 亚洲精品高潮| 国产精品久久久久久久久久10秀 | 亚洲精品va| 亚洲精品无播放器在线播放| 国产一区二区三区国产精品| 一本色道精品久久一区二区三区| 亚洲青青久久| 免费一二一二在线视频| 最新亚洲国产| 色综合狠狠操| 亚洲男人在线| 国产综合色区在线观看| 日本不卡视频在线观看 | 美日韩一区二区三区| 激情亚洲影院在线观看| 亚洲精品激情| 免费观看亚洲| 日韩中文一区二区| 日本综合字幕| 亚洲三级精品| 国产成人精品亚洲日本在线观看| 日韩欧美在线精品| 欧美va亚洲va日韩∨a综合色| 国产精品va| 蜜臀久久99精品久久久久久9 | 国产一区二区三区国产精品| 亚洲伊人精品酒店| 日韩精品电影| 国产视频网站一区二区三区| 99国产成+人+综合+亚洲欧美| 精品久久电影| 欧美在线黄色| 亚洲欧美日韩国产综合精品二区| 久久精品国产99| 蜜臀久久久久久久| 亚洲四虎影院| 久久av中文| 日韩中文字幕麻豆| 另类中文字幕国产精品| 国产精品九九| 综合一区在线| 国产亚洲网站| 欧美福利专区| 日韩久久视频| 精品久久97| 国产免费播放一区二区| 蜜桃久久久久久久| 亚洲欧美伊人| 久久69成人| 国产麻豆一区二区三区精品视频| 免费成人在线视频观看| jiujiure精品视频播放| 97精品在线| 成人三级高清视频在线看| 久久女人天堂| 欧美aⅴ一区二区三区视频| 日本视频在线一区| 亚洲精品极品| 亚洲精品日韩久久| 视频一区国产视频| 99热精品在线观看| 国产高清一区二区| 99久久精品网| 国产一区三区在线播放| 九九九精品视频| 老牛国内精品亚洲成av人片 | 欧美片第1页综合| 日韩精品免费视频人成| 亚洲精品大全| 日韩欧美久久| 69堂免费精品视频在线播放| 欧美一级二区| 欧美另类中文字幕| 国产欧美亚洲一区| 久久精品国产亚洲aⅴ| 精品一区二区三区中文字幕在线| 国产情侣一区在线| 国产免费av国片精品草莓男男| 日韩av一区二区三区四区| 人人爱人人干婷婷丁香亚洲| 欧美亚洲自偷自偷| 久久精品网址| 91精品推荐| 伊人精品视频| 蜜桃久久精品一区二区| 综合激情视频| 国产精品免费99久久久| 精品久久久久中文字幕小说| 日韩国产综合| 精品1区2区3区4区| 天堂久久一区| 国产欧美日韩视频在线| 久久av国产紧身裤| 国产传媒av在线| 亚洲激情婷婷| 久久精品 人人爱| 色综合五月天| 亚洲免费观看| 日本强好片久久久久久aaa| 老司机免费视频一区二区| 99久久婷婷| 亚洲精品美女91| 久久99久久人婷婷精品综合| 欧美成人a交片免费看| 亚洲免费激情| 国产欧美日韩亚洲一区二区三区| 国产一区二区精品久| 91精品国产自产在线观看永久∴| 国产精品婷婷| 日本不卡视频在线| 特黄毛片在线观看| 一区二区精彩视频| 久久一区精品| 99视频精品视频高清免费| 99香蕉国产精品偷在线观看 | 亚洲午夜久久久久久尤物| 国产麻豆综合| 欧美黑人巨大videos精品| 欧美午夜精品一区二区三区电影| 亚洲人成网站在线在线观看| 国产欧美一区二区三区精品观看| а√天堂8资源中文在线| 99国产精品视频免费观看一公开| 亚洲欧美在线综合| 久久久久久色 | 日本韩国欧美超级黄在线观看| 蜜桃成人av| 日韩福利在线观看| 中文字幕在线视频网站| 亚洲欧美网站| 成人国产精品一区二区免费麻豆| 亚洲欧洲另类| 国产精品1区| 成人av动漫在线观看| 久久激情综合网| 亚洲二区三区不卡| 四虎成人av| 日韩亚洲精品在线观看| 国产精品不卡| 国产午夜精品一区二区三区欧美| 久久精品一区二区国产| 久久av一区| 97人人精品| 日韩一区免费| 欧美一级精品| 精品中文字幕一区二区三区 | 久久麻豆视频| 国产精品婷婷| 日韩中文首页| 国产精品久久久久久久免费软件| 日韩亚洲精品在线| 你懂的国产精品永久在线| 亚洲一区中文| 天堂日韩电影| 国产96在线亚洲| 国产探花在线精品一区二区| 免费观看不卡av| 另类欧美日韩国产在线| 亚洲精品欧美| 国产精品毛片| 激情六月综合| 欧美男人天堂| 国产精品久久久久久久久久久久久久久 | 综合日韩av| 日韩国产精品久久久久久亚洲| 少妇久久久久| 91偷拍一区二区三区精品| 国产精品久av福利在线观看| 免费精品视频最新在线| 亚洲国产不卡| 久久久久午夜电影| 欧美国产另类| 亚洲精品影院在线观看| 久久不射网站| 亚洲美洲欧洲综合国产一区| 99久久夜色精品国产亚洲1000部|