我正在编写一个将所有内容存储在 mysql 数据库中的 c++ 程序。我想避免弹出 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 防火墙外,一切正常。我真的很想在不需要用户单击防火墙窗口上的取消的情况下完成这项工作。
非常感谢任何帮助!