すべてを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 ファイアウォールがポップアップすることを除いて、すべて正常に動作します。ユーザーがファイアウォールウィンドウでキャンセルをクリックする必要なく、これを機能させたいと思います。
どんな助けでも大歓迎です!