Java MySQL最大允许\u数据包随机更改为1024字节

Java MySQL最大允许\u数据包随机更改为1024字节,java,mysql,spring,jpa,Java,Mysql,Spring,Jpa,我一直遇到一个奇怪的问题,MySQL(5.5.41-0ubuntu0.14.04.1)将随机意外地将max_allowed_数据包更改为1024(在MySQL客户端查询max_allowed_数据包变量时) MySQL配置文件(/etc/MySQL/my.cnf)在安装后保持原样,除了被注释掉的绑定地址允许远程连接之外。mysqld和mysql的max_allowed_packet的值都设置为16M,在mysql服务器启动时(服务mysql start),该值如预期的那样为16777216 我查

我一直遇到一个奇怪的问题,MySQL(5.5.41-0ubuntu0.14.04.1)将随机意外地将max_allowed_数据包更改为1024(在MySQL客户端查询max_allowed_数据包变量时)

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

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

该数据库运行在一个VPS上,使用Ubuntu14.04,内存为4GB,由JavaSpring应用程序使用

目前该应用程序仍在开发中,正在使用mysql根帐户,在找到此问题的根本原因后将对其进行更改

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连接器java和commons dbcp库用于数据库交互

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

如果您能提供任何帮助,我们将不胜感激,因为自从我们的数据包大小增加到1024以上以来,这个问题一直在重复发生。

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

SELECT @@global.max_allowed_packet, @@session.max_allowed_packet;
这将返回一个类似这样的结果:

@@global.max_allowed_packet  @@session.max_allowed_packet  
---------------------------  ----------------------------
                   16777216                      16777216
可以动态修改
max\u allowed\u数据包
值(如果用户有足够的权限)

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

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

@@global.max_allowed_packet  @@session.max_allowed_packet
---------------------------  ----------------------------
                   33554432                      16777216
会话变量的值在会话从服务器(全局)变量的当前值开始(据我所知)时初始化


my.cnf文件中有几个“部分”。要为服务器设置全局
max_allowed_packet
值,该设置应显示在
my.cnf
[mysqld]
部分下。(这也可以作为启动mysql的命令行上的参数提供。但我们不这样做,我们只是在my.cnf文件中设置它。)

my.cnf

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



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

感谢您对这方面的见解。我知道这个问题有点模糊,但我设法找到了问题所在。通过查看错误日志,我发现了一条警告,提到连接了一个未知的IP地址。查找IP表明它位于另一个区域。我们立即更改了数据库密码,因为我们被泄露了。使用java设置全局最大允许数据包使用java设置全局最大允许数据包
SELECT @@global.max_allowed_packet, @@session.max_allowed_packet;

@@global.max_allowed_packet  @@session.max_allowed_packet
---------------------------  ----------------------------
                   33554432                      16777216
[mysqld]
...
max_allowed_packet = 16M

[mysqldump]
...
max_allowed_packet = 16M