考虑这种情况:
-- Server: max_allowed_packet = 200MB
-- Client: max_allowed_packet = 4MB
-- The following will return 200MB
SHOW variables like 'max_allowed_packet';
如果不读取配置文件,是否可以为客户端确定max_allowed_packet的值?我正在使用MySQL C API。
基本上,我希望我的应用程序有类似的内容:
max_allowed_packet = min(max_allowed_packet_server, max_allowed_packet_client)
答案 0 :(得分:7)
您无法在运行时直接确定客户端的max_allowed_packet
。当您执行show variables like "max_allowed_packet"
时,它仅显示服务器端的max_allowed_packet以及它在启动时读取的内容。似乎没有其他方法可以找到这个价值。
此外,要解决您的问题,默认情况下为From MySQL Docs
On the client side, max_allowed_packet has a default of 1GB.
此外,正如您已指定使用MySQL C API
一样。您可以使用mysql_options() API设置max_allowed_packet的值,如下所示:
首先使用内容
创建您的选项文件[client]
max_allowed_packet=10M
让我们说这个文件保存为“c:/mysql.cnf”,它将客户端的max_allowed_packet值设置为10MB。现在您需要在connect语句之前包含以下代码行来读取此文件。
mysql_options (conn, MYSQL_READ_DEFAULT_FILE, "C:/mysql.cnf");
如果您希望在文件中将组的名称从client
更改为myClient
,请将您的“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_packet设置为10M,现在您可以使用查询“show variables like "max_allowed_packet"
”读取服务器端max_allowed_packet,并且您知道客户端max_allowed_packet为10MB。
有关详细参考1
对于MySQL Commandline客户端,MySQL docs说
如果您使用的是mysql客户端程序,则默认使用 max_allowed_packet变量是16MB
希望它有所帮助,并为你的目的服务......