2

次の状況を考慮してください。

-- Server: max_allowed_packet = 200MB 
-- Client: max_allowed_packet = 4MB

-- The following will return 200MB
SHOW variables like 'max_allowed_packet';

構成ファイルを読み取らずに、クライアントの max_allowed_pa​​cket の値を特定できますか? MySQL C API を使用しています。

基本的に、私は自分のアプリに次のようなものを持たせたいと思っています:

 max_allowed_packet = min(max_allowed_packet_server, max_allowed_packet_client)
4

1 に答える 1

7

max_allowed_packet実行時にクライアントを直接決定することはできません。を実行するshow variables like "max_allowed_packet"と、サーバー側でのみmax_allowed_pa​​cketが表示され、開始時に読み取ったものもすべて表示されます。そして、この値を見つける他の方法はないようです。

さらに、問題を解決するために、デフォルトでは、MySQLDocsから

On the client side, max_allowed_packet has a default of 1GB.

さらに、あなたが使用していることを指定したようにMySQL C API次のようにmysql_options() APIを使用して、max_allowed_pa​​cketの値を設定できます。

まず、コンテンツを含むオプションファイルを作成します

[client]
max_allowed_packet=10M

このファイルが「c:/mysql.cnf」として保存され、クライアントのmax_allowed_pa​​cketの値が10MBに設定されているとします。ここで必要なのは、connectステートメントの前にこのファイルを読み取るための次のコード行を含めることです。

mysql_options (conn, MYSQL_READ_DEFAULT_FILE, "C:/mysql.cnf");

ファイル内のグループの名前をからに変更する場合はclientmyClient「c:/mysql.cnf」を次のようにします。

[myClient]
max_allowed_packet=10M

接続ステートメントの前に次のコード行を使用します。

mysql_options (conn, MYSQL_READ_DEFAULT_FILE, "c:/mysql.cnf");
mysql_options (conn, MYSQL_READ_DEFAULT_GROUP, "myClient");

したがって、最終的にコードは次のようになります。

MYSQL mysql;

mysql_init(&mysql);
mysql_options (conn, MYSQL_READ_DEFAULT_FILE, "c:/mysql.cnf");
mysql_options (conn, MYSQL_READ_DEFAULT_GROUP, "myClient");
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
    fprintf(stderr, "Failed to connect to database: Error: %s\n",
          mysql_error(&mysql));
}

上記のコード行では、max_allowed_pa​​cketを10Mに設定します。これで、クエリ ""を使用してサーバー側のmax_allowed_pa​​cketを読み取ることができshow variables like "max_allowed_packet"、クライアント側のmax_allowed_pa​​cketが10MBであることがわかります。

詳細については1

MySQLコマンドラインクライアントの場合、MySQLドキュメントには

mysqlクライアントプログラムを使用している場合、そのデフォルトのmax_allowed_pa​​cket変数は16MBです。

それがあなたの目的に役立つことを願っています...

于 2012-08-27T13:04:17.857 に答える