6

我无法在 MYSQL 命令提示符中设置“max_allowed_pa​​cket”变量,尽管我可以通过将“max_allowed_pa​​cket=100M”行插入 my.ini 文件来设置此值。为什么我有以下警告?

mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)

mysql> warnings
Show warnings enabled.
mysql> set global max_allowed_packet=123456000;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Warning (Code 1292): Truncated incorrect max_allowed_packet value: '123456000'
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)

mysql>

我也尝试过更小的尺寸,如下所示。

mysql> set global max_allowed_packet=123456;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Warning (Code 1292): Truncated incorrect max_allowed_packet value: '123456'
mysql>

mysql> set session max_allowed_packet=123456;
ERROR 1621 (HY000): SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
Warning (Code 1292): Truncated incorrect max_allowed_packet value: '123456'
Error (Code 1621): SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value

MySQL 版本

    mysql> SHOW VARIABLES LIKE "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 1.1.8                        |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| version                 | 5.5.25                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86                          |
| version_compile_os      | Win64                        |
+-------------------------+------------------------------+
7 rows in set (0.00 sec)

mysql>
4

3 回答 3

8

我注意到您必须使用 1024 的倍数才能接受这些值:

值 2048001 失败:

mysql> set global max_allowed_packet=2048001;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Warning (Code 1292): Truncated incorrect max_allowed_packet value: '2048001'

但是 2048000 的值有效:

mysql> set global max_allowed_packet=2048000;
Query OK, 0 rows affected (0.00 sec)

手册说明了以下内容,但“四舍五入”似乎无法按设计工作:

该值应为 1024 的倍数;非倍数向下舍入到最接近的倍数。

于 2013-02-27T11:47:13.030 回答
4

http://bugs.mysql.com/bug.php?id=22891http://bugs.mysql.com/bug.php?id=32223 的结论是 max_allowed_pa​​cket 应该只是一个启动参数。

于 2013-01-08T09:34:56.647 回答
3

答案 1答案 2很好,请检查一下。除此之外,当我们启动 MySQL 服务器时,我们会得到一个全局默认 max_allowed_packet值,当初始化到服务器的连接时,这个全局默认max_allowed_packet值被复制到一个局部 max_allowed_packet变量(只读)并由连接用于其操作。

所以基本上每次服务器重启后你都需要输入

设置全局 max_allowed_pa​​cket=1048576000;

删除所有连接并启动新连接,以便反映这个新的全局值,现在您可以插入 blob。

于 2018-11-28T04:28:06.960 回答