ERROR 2006: MySQL server has gone away
AP重新連線後異常無重現...
MYSQL 預設 timeout 時間 28800秒
先試著重現問題,縮短timeout時間,在code 中加入
db.setConnectOptions("MYSQL_OPT_CONNECT_TIMEOUT=5"); //fail
db.setConnectOptions("CLIENT_INTERACTIVE=5"); //fail
timeout 設定失敗,沒在預期的5秒後失效 用另外的方式,直接在 option file 即 my.ini (路徑 C:\ProgramData\MySQL\MySQL Server 5.6)中修改
但檔案裡沒看到 timeout 參數,所以直接在最下方手動新增
interactive_timeout=51
再開mysql自帶終端機檢查看看,設定是否變更
兩個系統變數
interactive_timeout
wait_timeout
都變51了.... OK!
再來改code
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("MYDB");
db.setUserName("MYname");
db.setPassword("MYpass");
db.setHostName(ui->DB_Port->text());//default 192.168.0.2
db.setConnectOptions("MYSQL_OPT_RECONNECT=TRUE"); //solution
現在就算超時,也會重新連線了! done!
補充
參考mysql 文件,my.ini 存在位置在下面幾個地方
%PROGRAMDATA%\MySQL\MySQLServer 5.6\my.ini,%PROGRAMDATA%\MySQL\MySQL Server5.6\my.cnf
%WINDIR%\my.ini, %WINDIR%\my.cnf
C:\my.ini, C:\my.cnf
BASEDIR\my.ini,BASEDIR\my.cnf
%PROGRAMDATA% defaults to C:\ProgramData on Microsoft Windows Vista and greater, and C:\Documents and Settings\All Users\Application Data on older versions of Microsoft Windows.
%WINDIR% is commonly C:\WINDOWS.
or
C:\> echo %WINDIR%