婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

熱門標簽:咸陽防封電銷卡 臨沂做地圖標注 石家莊400電話辦理公司 廣東400企業電話申請流程 申請400電話電話價格 地圖標注客戶付款 宜賓全自動外呼系統廠家 新鄉智能外呼系統好處 許昌外呼增值業務線路

我們在使用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-8
import pymysql

def 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-8

import pymysql
import time


def 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:\Python35\lib\site-packages\pymysql\connections.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-8

import pymysql
import time


def 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-8

import pymysql
import time
import threading
import traceback

def 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-8
import pymysql
import time
from DBUtils.PooledDB import PooledDB, SharedDBConnection


def 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-8
import pymysql
import time
from DBUtils.PooledDB import PooledDB, SharedDBConnection


def 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服務器在無操作超時主動斷開連接的情況就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 小程序server請求微信服務器超時的解決方法
  • php中curl和soap方式請求服務超時問題的解決
  • 淺談java中異步多線程超時導致的服務異常
  • 詳解Nginx服務器中配置超時時間的方法
  • Win7系統日志提示在沒有配置的 DNS 服務器響應之后,名稱“域名”的名稱解析超時的解放方法
  • oracle遠程連接服務器出現 ORA-12170 TNS:連接超時 解決辦法
  • 使用FileZilla連接時超時無法連接到服務器
  • SNMP4J服務端連接超時問題解決方案

標簽:北京 鎮江 鷹潭 合肥 貴州 臺灣 阜新 日照

巨人網絡通訊聲明:本文標題《解決mysql服務器在無操作超時主動斷開連接的情況》,本文關鍵詞  解決,mysql,服務器,在,無,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《解決mysql服務器在無操作超時主動斷開連接的情況》相關的同類信息!
  • 本頁收集關于解決mysql服務器在無操作超時主動斷開連接的情況的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美一卡二卡三卡四卡| 亚洲女同一区二区| 成人av在线网| 国产亚洲欧洲一区高清在线观看| 亚洲免费av网站| 国产91精品一区二区| 91久久精品日日躁夜夜躁欧美| 不卡视频免费播放| 亚洲国产精品一区二区久久 | 亚洲国产精品久久艾草纯爱| 久久99精品久久久| 秋霞国产午夜精品免费视频| 久久先锋影音av| 国产资源在线一区| 91蜜桃免费观看视频| 94-欧美-setu| 欧美精品在欧美一区二区少妇| 国产清纯白嫩初高生在线观看91| 日本一道高清亚洲日美韩| 国产一区二区在线看| 国产精品美日韩| 欧美日韩免费一区二区三区| 国产精品国产三级国产aⅴ入口 | 欧美电视剧免费观看| 99久久精品国产麻豆演员表| 欧美日韩三级一区| 亚洲激情图片小说视频| 免费在线看成人av| 亚洲四区在线观看| 日韩国产欧美三级| 91亚洲午夜精品久久久久久| 色又黄又爽网站www久久| 精品国产乱码久久久久久闺蜜| 亚洲综合丁香婷婷六月香| av不卡在线播放| 亚洲欧洲性图库| 欧美私人免费视频| 欧美日韩国产123区| 99热这里都是精品| 经典三级在线一区| 欧美变态tickling挠脚心| 亚洲九九爱视频| 国产精品正在播放| 51精品国自产在线| 精品一区二区在线免费观看| 一区二区三区四区激情| 日韩一级精品视频在线观看| 美女一区二区在线观看| 日韩一区有码在线| 欧美精品久久一区二区三区| 日韩国产成人精品| 国产精品嫩草影院com| 日韩专区一卡二卡| 久久国产精品99久久人人澡| 制服.丝袜.亚洲.中文.综合| 成人妖精视频yjsp地址| 国产精品三级久久久久三级| 国产美女在线精品| 久久综合九色综合97_久久久| 国产一区美女在线| av中文字幕不卡| 欧美丝袜丝nylons| 丁香啪啪综合成人亚洲小说| 首页欧美精品中文字幕| 99久久久国产精品| 欧美在线观看禁18| 欧美人xxxx| 麻豆91在线播放免费| 中文字幕欧美一| 亚洲精品一线二线三线| 午夜电影网亚洲视频| 国产一区二区三区在线观看免费视频| 蜜臀av性久久久久蜜臀aⅴ| 国产一区在线视频| 高清国产一区二区三区| 欧美一区二区三区播放老司机| 国产91精品精华液一区二区三区 | 99麻豆久久久国产精品免费 | 午夜精品久久久久久久久久| 欧美一级片在线看| 色综合中文字幕| 日韩欧美一区二区免费| 国产精品色呦呦| 亚洲成人精品一区| 亚洲午夜国产一区99re久久| 麻豆国产精品官网| 激情亚洲综合在线| 欧美日韩精品一二三区| 欧美日韩精品欧美日韩精品| 久久久精品国产99久久精品芒果| 亚洲天天做日日做天天谢日日欢| 久久久综合精品| 欧美日韩第一区日日骚| 欧美一级欧美一级在线播放| 91丨九色丨蝌蚪丨老版| 激情亚洲综合在线| 国产精品福利av| 毛片av一区二区三区| 在线亚洲一区二区| 欧美国产综合一区二区| 国产成人高清在线| 欧美三级三级三级| 精品国产免费一区二区三区四区| 色婷婷精品大在线视频| 亚洲天堂久久久久久久| 欧美久久久久久蜜桃| 久久综合色8888| 午夜视频在线观看一区二区| 五月婷婷激情综合网| 99久精品国产| 中文字幕一区二区三区不卡| 91在线高清观看| 国产亚洲欧美一区在线观看| 国产精品久久久久久久久免费桃花 | 91麻豆swag| 亚洲欧美日韩一区二区| 国产农村妇女精品| 国产亚洲福利社区一区| 精品国精品国产尤物美女| 精品国产一区二区国模嫣然| 九九精品一区二区| 欧美一区二区三区影视| 国产成人丝袜美腿| 一区二区高清免费观看影视大全 | 日韩欧美不卡在线观看视频| 欧美日韩成人一区二区| 色妹子一区二区| 在线视频一区二区三| 91免费在线看| 欧美婷婷六月丁香综合色| 国产精品卡一卡二| 美腿丝袜在线亚洲一区| 日韩欧美国产不卡| eeuss鲁片一区二区三区| 99久久精品免费精品国产| 日本乱码高清不卡字幕| 亚洲天堂精品在线观看| 91污在线观看| 欧美精品丝袜中出| 亚洲一区二区三区四区在线免费观看 | 色综合久久中文综合久久97| 久久精品国产99| 91精品国产品国语在线不卡| 欧美日韩成人在线一区| 97久久精品人人爽人人爽蜜臀| 国内精品视频一区二区三区八戒 | 国产精品女同一区二区三区| 9人人澡人人爽人人精品| 精品少妇一区二区| www日韩大片| 一级日本不卡的影视| 激情av综合网| 99精品视频一区| 亚洲成a人v欧美综合天堂下载 | 日韩1区2区3区| av一区二区三区在线| 一区二区三区精密机械公司| 亚洲精品国产高清久久伦理二区| 6080亚洲精品一区二区| 中文字幕一区二区三区乱码在线| 青青草原综合久久大伊人精品优势| 国产精品你懂的在线欣赏| 日韩一卡二卡三卡国产欧美| 国产一区日韩二区欧美三区| 欧美精品 日韩| 91视频com| 亚洲精品在线观看网站| 国产99久久久国产精品潘金网站| 自拍av一区二区三区| 欧美日韩在线三级| 不卡视频免费播放| 韩国毛片一区二区三区| proumb性欧美在线观看| 亚洲成人av中文| 麻豆精品在线观看| 久久99久久久欧美国产| 国产乱码精品1区2区3区| 亚洲精品成人天堂一二三| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲一区二区高清| 亚洲电影在线播放| 秋霞影院一区二区| 久久国产综合精品| 亚洲乱码中文字幕| 亚洲成av人片在线观看| 亚洲国产一区二区在线播放| 国产一区二区网址| 欧美日精品一区视频| 日韩欧美资源站| 午夜电影一区二区| 成人精品视频一区二区三区 | 成人av网址在线| 4438x成人网最大色成网站| 亚洲图片激情小说| 国产不卡视频一区二区三区| 在线观看av一区| 天天色 色综合| 9191国产精品| 成人综合在线观看| 中文字幕亚洲欧美在线不卡|