【发布时间】:2015-07-11 08:25:31
【问题描述】:
我不断遇到一个奇怪的问题,即 MySQL (5.5.41-0ubuntu0.14.04.1) 会随机意外地将 max_allowed_packet 更改为 1024(在 mysql 客户端中查询 max_allowed_packet 变量时)。
MySQL 配置文件 (/etc/mysql/my.cnf) 在安装后保持不变,除了绑定地址被注释掉以允许远程连接。 mysqld 和 mysql 的 max_allowed_packet 的值都设置为 16M,在启动 mysql 服务器(服务 mysql 启动)时,该值是 16777216,正如预期的那样。
我查看了 mysql 错误日志和 syslog,没有发现与数据库崩溃或重启有关的任何内容。
数据库在 Ubuntu 14.04 的 4GB 内存的 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_packet 的会话变量,因为它是只读变量。这就是为什么我挠头试图弄清楚如果 my.cnf 中的值设置为 16M 时这个变量如何以及为什么会发生变化。
任何帮助将不胜感激,因为自从我们的数据包大小增加到 1024 以上以来,此问题一直在再次发生。
【问题讨论】:
-
使用java stackoverflow.com/questions/26686735/…设置全局max_allowed_packet
-
使用java stackoverflow.com/questions/26686735/…设置全局max_allowed_packet