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

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

查看mysql的timeout

使用客戶端工具或者M(jìn)ysql命令行工具輸入show global variables like ’%timeout%’;就會顯示與timeout相關(guān)的屬性,這里我用docker模擬了一個測試環(huán)境。

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:服務(wù)器關(guān)閉非交互連接之前等待活動的秒數(shù),就是你在你的項目中進(jìn)行程序調(diào)用

interactive_timeout: 服務(wù)器關(guān)閉交互式連接前等待活動的秒數(shù),就是你在你的本機(jī)上打開mysql的客戶端,cmd的那種

使用pymysql進(jìn)行查詢

我在數(shù)據(jù)庫里隨便創(chuàng)建了一個表,插入兩條數(shù)據(jù)

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

我使用pymysql這個庫對其進(jìn)行查詢操作,很簡單

#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()

可以正確的得到結(jié)果

(1, ’yang’, 18)

(2, ’fan’, 16)

連接超時以后的查詢

上面可以正常得到結(jié)果是由于當(dāng)創(chuàng)建好一個鏈接以后,就立刻進(jìn)行了查詢,此時還沒有超過它的超時時間,如果我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()

這里進(jìn)行了兩次查詢,因為我把mysql的wait_timeout設(shè)置了30秒,所以我在第一次查詢之后停了31秒,目的讓mysql服務(wù)主動的和我剛才創(chuàng)建的連接斷開,得到的結(jié)果是

(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秒鐘以后,再次使用該連接進(jìn)行查詢將拋出2013, ’Lost connection to MySQL server during query’錯誤。

解決辦法

解決的方法有兩種,既然這里的超時是由于在規(guī)定時間內(nèi)沒有任何操作導(dǎo)致mysql主動的將鏈接關(guān)閉,pymysql的connection對象有一個ping()方法,可以檢查連接是否有效,在每次執(zhí)行查詢操作之前先執(zhí)行一下ping()方法,該方法默認(rèn)的有個reconnect參數(shù),默認(rèn)是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()

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

#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之后再運(yùn)行才可以 # 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()

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

#coding:utf-8import pymysqlimport timefrom DBUtils.PooledDB import PooledDB, SharedDBConnectiondef mytest(): pool = PooledDB( creator=pymysql, # 初始化時,連接池至少創(chuàng)建的空閑連接,0表示不創(chuàng)建 maxconnections=3, # 連接池中空閑的最多連接數(shù),0和None表示沒有限制mincached=2, # 連接池中最多共享的連接數(shù)量,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()

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

#coding:utf-8import pymysqlimport timefrom DBUtils.PooledDB import PooledDB, SharedDBConnectiondef mytest(): pool = PooledDB( creator=pymysql, maxconnections=3, # 初始化時,連接池至少創(chuàng)建的空閑連接,0表示不創(chuàng)建 mincached=2, # 連接池中空閑的最多連接數(shù),0和None表示沒有限制 maxcached=5, # 連接池中最多共享的連接數(shù)量,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() # 關(guān)閉連接,其實并沒有真正關(guān)閉,只是將連接返回給連接池 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服務(wù)器在無操作超時主動斷開連接的情況就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美精品九九| 精品中文一区| 99国产精品久久久久久久| 欧美sss在线视频| 国产不卡人人| 日韩成人综合| 99久久久久| 亚洲国产一区二区三区在线播放| 久久伦理在线| 欧美午夜不卡影院在线观看完整版免费| 国产高清一区| 久久都是精品| 少妇精品久久久一区二区| 日韩国产在线观看| 欧美精品不卡| 你懂的国产精品永久在线| 精品午夜视频| 午夜久久中文| 婷婷综合网站| 中文字幕亚洲精品乱码| 日韩激情啪啪| 久久久久伊人| 久久人人97超碰国产公开结果| 99pao成人国产永久免费视频| 中文字幕免费精品| 国产精品亚洲产品| 高潮一区二区| 午夜在线视频一区二区区别| 综合欧美亚洲| 麻豆精品久久久| 99精品在线免费在线观看| 亚洲激情中文在线| 中文视频一区| 久久精品国产福利| 国产综合精品| 奇米狠狠一区二区三区| 国产成年精品| 国产精品毛片一区二区三区| 国产欧美日韩一级| 久久蜜桃精品| 日韩国产精品久久久久久亚洲| 麻豆精品av| 欧美日韩少妇| 国产亚洲精品美女久久久久久久久久| 国产一区二区久久久久| 亚洲激情欧美| 国产精品久久久免费| 欧美三级网址| 日韩av一二三| 99久久亚洲精品蜜臀| 日韩一区二区三区四区五区| 日韩av有码| 日韩影院在线观看| 国产+成+人+亚洲欧洲在线| 午夜久久影院| 欧美91在线| 亚洲免费高清| 嫩呦国产一区二区三区av| 亚洲永久字幕| 国产粉嫩在线观看| 日本中文字幕一区二区| 午夜av不卡| 亚洲精品一级二级三级| 精品欧美日韩精品| 中文字幕亚洲影视| 国产精品字幕| 日本特黄久久久高潮| 激情五月综合| 精品一区二区三区视频在线播放 | 少妇精品在线| 亲子伦视频一区二区三区| 久久国产视频网| 欧美午夜不卡影院在线观看完整版免费| 美女在线视频一区| 亚洲v天堂v手机在线| 免费一二一二在线视频| 国产精品久久久久77777丨| 欧美日韩国产一区精品一区| 国产一区二区三区精品在线观看| 婷婷精品久久久久久久久久不卡| 九九色在线视频| 国产精品极品| 亚洲精品视频一二三区| 国产在线日韩| 日产精品一区二区| 国产精品白丝一区二区三区| 日韩中文字幕区一区有砖一区| 成人午夜国产| 国产不卡一区| 久久婷婷国产| 国产麻豆一区| 亚州av日韩av| 亚洲专区在线| 国模 一区 二区 三区| 中文字幕成在线观看| 麻豆国产一区| 国产乱码精品一区二区三区亚洲人| 日韩中文欧美在线| 国产视频一区三区| 国内精品福利| 欧美va天堂| 成人久久一区| 久久久久99| 日本免费久久| 国产精品专区免费| 精品一区二区三区视频在线播放| 欧美日韩一区二区国产| 亚洲乱码一区| 亚洲性视频在线| 乱人伦精品视频在线观看| 偷拍欧美精品| 99视频精品| 亚洲在线成人| 美女91精品| 日韩精品一区第一页| 石原莉奈在线亚洲三区| 爽好多水快深点欧美视频| 免费精品视频| 99在线精品视频在线观看| 好看的亚洲午夜视频在线| 999久久久亚洲| 亚洲福利国产| 五月精品视频| 噜噜噜躁狠狠躁狠狠精品视频 | 久久亚洲精品伦理| 丝袜美腿亚洲一区| 在线看片一区| 亚洲小说春色综合另类电影| 亚洲精选久久| 亚洲精品精选| 日韩黄色免费网站| 国产精品一区二区99| 欧美黄色一区二区| 色综合五月天| 欧美日韩国产传媒| 国产亚洲毛片在线| 亚洲综合小说| 国产免费播放一区二区| 久久久久亚洲精品中文字幕| 国产91在线播放精品| 九色porny丨国产首页在线| 欧美日韩四区| 亚洲精品大片| 国产精品视频一区二区三区四蜜臂 | 麻豆成人av在线| 精品国产乱码久久久久久樱花| 精品久久99| 亚洲伦乱视频| 尤物在线精品| 日韩精品中文字幕一区二区| 国产日韩欧美三级| 国产aⅴ精品一区二区三区久久| 成人精品天堂一区二区三区| 狠狠色综合网| 亚洲天堂日韩在线| 久久国产欧美日韩精品| 另类欧美日韩国产在线| 伊人久久在线| 中文一区二区| 日韩va欧美va亚洲va久久| 精品国产午夜| 亚洲欧美久久久| 国产精品一区高清| 精品欧美一区二区三区在线观看| 欧美另类综合| 国产精品毛片aⅴ一区二区三区| 日韩亚洲一区在线| 丝袜脚交一区二区| 久久精品国产精品亚洲毛片| 日韩精品午夜| 亚洲丝袜啪啪| 国产不卡精品| 久久亚洲二区| 精品久久久网| 鲁大师成人一区二区三区| 国产精品va| 五月综合激情| 麻豆精品在线观看| 91久久久久| 国产一区二区三区91| 丝袜美腿成人在线| 国产一区二区三区91| 老牛国产精品一区的观看方式| 国产精品手机在线播放| 欧美日韩一二三四| 青青在线精品| 激情综合自拍| 国产精品久久久久久久免费软件| 亚洲国产专区校园欧美| 欧美一区影院| 亚洲无线一线二线三线区别av| 日本欧美一区二区| 亚洲电影有码| 欧美专区一区| 成人av二区| 高清一区二区三区av| 亚洲日产国产精品| 久久婷婷久久| 欧美1区二区| 一区二区精彩视频|