草庐IT

java - MySQL max_allowed_pa​​cket 随机更改为 1024 字节

coder 2023-10-19 原文

我一直遇到一个奇怪的问题,即 MySQL (5.5.41-0ubuntu0.14.04.1) 会随机且意外地将 max_allowed_pa​​cket 更改为 1024(在 mysql 客户端中查询 max_allowed_pa​​cket 变量时)。

MySQL 配置文件 (/etc/mysql/my.cnf) 在安装后保持原样,除了绑定(bind)地址被注释掉以允许远程连接。 mysqld 和 mysql 的 max_allowed_pa​​cket 的值都设置为 16M,并且在 mysql 服务器启动时(service mysql start),该值为预期的 16777216。

我查看了 mysql 错误日志和系统日志,没有发现与数据库崩溃或重启有关的任何内容。

数据库运行在具有 4GB 内存和 Ubuntu 14.04 的 VPS 上,并由 Java Spring 应用程序使用。

目前应用还在开发中,使用的是mysql root账号,待找到问题根源后会更改。

Spring中的Datasource和EntityManager配置如下:

@Bean
public DataSource dataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setTestOnBorrow(true);
    dataSource.setValidationQuery("SELECT 1");
    dataSource.setUrl("jdbc:mysql://localhost:3306/testdb");
    dataSource.setUsername("root");
    dataSource.setPassword("...");
    return dataSource;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
        DataSource dataSource) {
    LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
    emf.setPackagesToScan("com.app.entity");
    emf.setPersistenceProvider(new HibernatePersistenceProvider());
    Properties jpaProperties = new Properties();
    jpaProperties.setProperty("hibernate.hbm2ddl.auto", "update");
    jpaProperties.setProperty("hibernate.show_sql", "true");
    emf.setJpaProperties(jpaProperties);
    emf.setDataSource(dataSource);
    return emf;
}

@Bean
public JpaTransactionManager transactionManager(EntityManagerFactory emf) {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(emf);
    return transactionManager;
}

mysql-connector-java 和 commons-dbcp 库用于数据库交互。

经过多次搜索,我发现在较新版本的 mysql 中,无法更改 max_allowed_pa​​cket 的 session 变量,因为它是一个只读变量。这就是为什么我绞尽脑汁想弄清楚如果 my.cnf 中的值设置为 16M,这个变量会如何以及为什么会发生变化。

任何帮助将不胜感激,因为自从我们的数据包大小增加到 1024 以上以来,这个问题一直在重复出现。

最佳答案

您说“在 mysql 客户端中查询 max_allowed_pa​​cket 变量时”。我们认为这意味着您正在运行如下查询:

SELECT @@global.max_allowed_packet, @@session.max_allowed_packet;

这会返回类似这样的结果:

@@global.max_allowed_packet  @@session.max_allowed_packet  
---------------------------  ----------------------------
                   16777216                      16777216

可以动态修改 max_allowed_pa​​cket 值(如果用户有足够的权限)。

SET GLOBAL max_allowed_packet = 33554432 ;

我们可以验证全局变量的值是否被修改:

SELECT @@global.max_allowed_packet, @@session.max_allowed_packet;

@@global.max_allowed_packet  @@session.max_allowed_packet
---------------------------  ----------------------------
                   33554432                      16777216

session 变量的值在 session 开始时(据我所知)从服务器(global)变量的当前值初始化。


my.cnf 文件中有几个“部分”。要为服务器设置 global max_allowed_pa​​cket 值,该设置应出现在 my.cnf< 的="">[mysqld] 部分下。 (这也可以作为启动 mysql 的命令行上的参数提供。但我们不这样做,我们只是在 my.cnf 文件中设置它。)

my.cnf

[mysqld]
...
max_allowed_packet = 16M

[mysqldump]
...
max_allowed_packet = 16M

max_allowed_pa​​cket 的设置也可以出现在my.cnf 的其他部分下。其他部分下的设置不会影响服务器。例如,同一行可能出现在 [mysqldump][mysql][client] 部分下。 (当 max_allowed_pa​​cket 出现在那些值与 [mysqld] 部分下的设置不同的其他部分下时,我对行为没有很好的理解。)


我从未观察到您描述的那种行为;你的描述在你正在执行的exact语句和返回的exact输出方面有点欠缺。

关于java - MySQL max_allowed_pa​​cket 随机更改为 1024 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29987985/

有关java - MySQL max_allowed_pa​​cket 随机更改为 1024 字节的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  3. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

  4. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  5. ruby - 更改 ActiveRecord 中对象的类 - 2

    假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。

  6. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  7. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  8. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  9. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  10. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

随机推荐