一、查詢mysql的show variables like “%timeout%”;interactive_timeout服務器關閉交互式連接前等待活動的秒數(shù) 參數(shù)默認值:28800秒(8小時)
在配置文件my.cnf中只設置參數(shù)interactive_timeout=100或者設置一個比較大的值,則重啟服務器后進入或者set global interactive_timeout=28800;重啟mysql服務器
注:
從文檔上來看wait_timeout和interactive_timeout都是指不活躍的連接超時時間,連接線程啟動的時候wait_timeout會根據(jù)是交互模式還是非交互模式被設置為這兩個值中的一個。
如果我們運行
mysql -uroot -p
命令登陸到mysql,wait_timeout就會被設置為interactive_timeout的值。如果我們在wait_timeout時間內(nèi)沒有進行任何操作,那么再次操作的時候就會提示超時,這是mysql client會重新連接。
interactive_timeout和wait_timeout在連接空閑階段(sleep)起作用,對于保持sleep狀態(tài)超過了wait_timeout(或interactive_timeout,取決于CLIENT_INTERACTIVE標志)的客戶端,MySQL會主動斷開連接。
可以用set命令或在my.cnf文件中設置,設置后需要重啟數(shù)據(jù)庫
二、conn = None
def _conn(): # 連接帶異常處理
try:
global conn
conn = MySQLdb.connect(host="localhost", user="root", passwd="123456", db="xhaccount", port=3306,
charset="utf8") # 連接對象
return True
except Exception as e:
print("str(Exception):\t", str(e))
print("str(e):\t\t", str(e))
print("repr(e):\t", repr(e))
# Get information about the exception that is currently being handled
exc_type, exc_value, exc_traceback = sys.exc_info()
print('e.message:\t', exc_value)
print("Note, object e and exc of Class %s is %s the same." %
(type(exc_value), ('not', '')[exc_value is e]))
print('traceback.print_exc(): ', traceback.print_exc())
return False
def _reConn(): # 重試連接
try:
conn.ping() # 校驗連接是否異常
except Exception as e:
if _conn() is True: # 重新連接,成功退出
return
print("str(Exception):\t", str(e))
print("str(e):\t\t", str(e))
print("repr(e):\t", repr(e))
# Get information about the exception that is currently being handled
exc_type, exc_value, exc_traceback = sys.exc_info()
print('e.message:\t', exc_value)
print("Note, object e and exc of Class %s is %s the same." %
(type(exc_value), ('not', '')[exc_value is e]))
print('traceback.print_exc(): ', traceback.print_exc())
print('重連失敗!!!!!!!')
每次執(zhí)行sql語句的時候,調(diào)用下_reConn()