[英]MySQL Trigger Error #2013 - Lost connection to MySQL server during query
[英]MySQL Windows c api named pipes ERROR: "Lost connection to MySQL server at 'Waiting for initial communication packet', system error: 0
我正在寫一個c ++程序,它將所有內容存儲在mysql數據庫中。 我想避免Windows安全性窗口彈出並詢問mysqld是否可以具有特權。 如果單擊“取消”(以響應防火牆窗口),則該程序仍然可以正常運行,因為所有內容都是本地的。
我正在嘗試使用帶有--skip-networking標志的命名管道來避免此防火牆窗口。
開始編輯:
我正在使用mysqld的便攜式版本。 它沒有管理員權限。 (感謝Ben指出這是重要的信息)
結束編輯
我正在使用以下命令啟動mysqld服務器:
C:\tmp_report\12345\mysqld\mysql\bin\mysqld --user=root \
--basedir="C:\tmp_report\12345\mysqld\\mysql" \
--datadir="C:\tmp_report\12345\mysqld\data" \
--pid-file="C:\tmp_report\12345\mysqld\mysql.pid" \
--log-error="C:\tmp_report\12345\mysqld\mysql.err" \
--skip-networking \
--enable-named-pipe
這行得通,我可以使用以下命令行語句連接到數據庫:
mysql --pipe -uroot
我正在嘗試通過c-api連接,如下所示:
unsigned int mysql_timeout=200;
unsigned int protocol=MYSQL_PROTOCOL_PIPE;
bool mysql_reconnect=true;
bool mysql_local_infile=true;
if (mysql_options(conn,MYSQL_OPT_CONNECT_TIMEOUT, (char *)&mysql_timeout)){*logstream<<"mysql option error connect_timeout";}
if (mysql_options(conn,MYSQL_OPT_READ_TIMEOUT, (char *)&mysql_timeout)){*logstream<<"mysql option error read_timeout";}
if (mysql_options(conn,MYSQL_OPT_WRITE_TIMEOUT, (char *)&mysql_timeout)){*logstream<<"mysql option error write_timeout";}
if (mysql_options(conn,MYSQL_OPT_RECONNECT, &mysql_reconnect)){*logstream<<"mysql option error reconnect";}
if (mysql_options(conn,MYSQL_OPT_LOCAL_INFILE, &mysql_local_infile)){*logstream <<"mysql option error local_infile";}
if (mysql_options(conn,MYSQL_OPT_NAMED_PIPE, NULL)){*logstream<<"mysql option error MYSQL_OPT_NAMED_PIPE";}
if (mysql_options(conn,MYSQL_OPT_PROTOCOL, (char *)&protocol)) {*logstream<<"mysql option error protocol";}
if (!mysql_real_connect(conn,
"localhost", // SERVER
"root", // USER
NULL, // PASS
NULL, // DATABASE
0, // port
NULL, // socket
0 // client_flag
)){
*logstream<<"Database::connect mysql_real_connect failed"<<endl;
*logstream<<mysql_error(conn)<<endl;
conn=NULL;
}
該mysql_real_connect調用的結果是:
Database::connect mysql_real_connect failed
Lost connection to MySQL server at 'waiting for initial communication packet', system error: 0
如果使用TCPIP連接,則除了Windows防火牆彈出以外,其他所有功能都可以正常工作。 我真的很想在不要求用戶單擊防火牆窗口上的“取消”的情況下進行此工作。
任何幫助都非常感謝!
如果MySQL是有意僅本地的,則應將其配置為僅在本地地址上偵聽。 將其放在您的my.cnf
文件中:
bind-address = 127.0.0.1
否則,請使用netsh advfirewall
或類似工具將防火牆配置為允許MySQL。 通常,在安裝MySQL時即可完成。
例子:
或從腳本:
對於沒有或需要管理員特權的一次性安裝,您可以使用不可路由的IP地址和隨機端口來配置本地通信。
您可以通過在命令行中添加--bind-address=127.0.0.1 --port=62190
來實現。
除非您是管理員,否則您將無法更改防火牆規則,並且偵聽命名管道通常也需要管理權限。 創建共享內存部分需要SeCreateGlobalPrivilege,因此本質上是相同的限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.