MySQL:在运行时为客户端确定max_allowed_pa​​cket的值

标签 mysql configuration mysql-connector

考虑这种情况:

-- 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)

最佳答案

您不能在运行时直接为客户端确定max_allowed_pa​​cket。当您执行 show variables like "max_allowed_pa​​cket" 时,它只显示服务器端的 max_allowed_pa​​cket 以及它在开始时读取的任何内容。而且似乎没有其他方法可以找到这个值。

此外,为了解决您的问题,默认情况下,From MySQL Docs

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

此外,正如您指定的那样,您正在使用 MySQL C API。您可以使用 mysql_options() 设置 max_allowed_pa​​cket 的值API如下:

首先用内容创建你的选项文件

[client]
max_allowed_packet=10M

假设此文件保存为“c:/mysql.cnf”,它将客户端的 max_allowed_pa​​cket 值设置为 10MB。现在您需要在连接语句之前包含以下代码行以读取此文件。

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_pa​​cket 设置为 10M,现在您可以使用查询“show variables like "max_allowed_pa​​cket"”读取服务器端 max_allowed_pa​​cket,并且您知道客户端 max_allowed_pa​​cket 为 10MB。

进一步引用 1

对于 MySQL 命令行客户端,MySQL docs

If you are using the mysql client program, its default max_allowed_packet variable is 16MB

希望它对您有所帮助,并能达到您的目的....

关于MySQL:在运行时为客户端确定max_allowed_pa​​cket的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056195/

相关文章:

mysql - Oracle 的 %TYPE 有 MySQL 版本吗

mysql - mysql 两列差值之间的最小值

eclipse : Force UTF-8 in the imported projects

java - 使用 Spring 依赖注入(inject)时,Hibernate SessionFactory 始终为 null

mysql - If 语句未返回所需结果

java - 如何使用 preparedstatement 获取最后插入的行的 id?

MySQL 选择多个日期范围

configuration - Glassfish Server 4 后错误太大

mysql - typeorm:如果安装了 mysql,则强制使用 mysql2

mysql - 什么版本的 MySQL Connector 可以与 Mono 2.10.1 一起使用