`

mysql innodb_open_files设置过大导致的问题

 
阅读更多

今天上午不断的接到开发同学的反馈,测试环境的一台mysql(5.1.48),对应的应用总是不断的报连接数拿不到。登陆到机器后发现mysql -uroot连接不上,而netstat -nal |grep 3306|wc -l也只有1200个,而这台机器设置的max_connections=5000,max_user_connections=0,innodb_open_files=60000。

因为这台机器上100+个schema,2w+个表,只是部分应用有反馈,大部分应用还处于可用状态,因此没有做任何处理,采取了kill session的方式(这一次刚好有同学在出问题之前用mysql -uroot连上了),kill后,过了一段时间恢复了,mysql -uroot可以连接了。想当然的认为是某个应用把连接拿完了导致的,还以为解决了。

但是到下午又有同学反馈同样的问题,这次ssh之后mysql -uroot依然连不上,ps发现mysqld是刚刚起的。怀疑mysqld异常重启,看了一下alert日志,发现有大量下面的信息:

 

121203 16:06:54  InnoDB: MySQL and InnoDB data dictionaries are out of sync.

InnoDB: Unable to find the AUTOINC column template_id in the InnoDB table test/tc_steppay_templa

te.

InnoDB: We set the next AUTOINC column value to 0,

InnoDB: in effect disabling the AUTOINC next value generation.

InnoDB: You can either set the next AUTOINC value explicitly using ALTER TABLE

InnoDB: or fix the data dictionary by recreating the table.

121203 16:06:54  InnoDB: Assertion failure in thread 46915963758912 in file handler/ha_innodb.cc

 line 9366

InnoDB: Failing assertion: auto_inc > 0

InnoDB: We intentionally generate a memory trap.

InnoDB: Submit a detailed bug report to http://bugs.mysql.com.

InnoDB: If you get repeated assertion failures or crashes, even

InnoDB: immediately after the mysqld startup, there may be

InnoDB: corruption in the InnoDB tablespace. Please refer to

InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html

InnoDB: about forcing recovery.

121203 16:06:54 - mysqld got signal 6 ;

This could be because you hit a bug. It is also possible that this binary

or one of the libraries it was linked against is corrupt, improperly built,

or misconfigured. This error can also be caused by malfunctioning hardware.

We will try our best to scrape up some info that will hopefully help diagnose

the problem, but since we have already crashed, something is definitely wrong

and this may fail.

key_buffer_size=104857600

read_buffer_size=1048576

max_used_connections=4811

max_threads=5000

threads_connected=4719

It is possible that mysqld could use up to

key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 5773884 K

bytes of memory

Hope that's ok; if not, decrease some variables in the equation.

 

thd: 0x2aab595703c0

Attempting backtrace. You can use the following information to find out

where mysqld died. If you see no messages after this, something went

terribly wrong...

121203 16:06:54 [ERROR] Error in accept: Resource temporarily unavailable

121203 16:06:54 [ERROR] Error in accept: Resource temporarily unavailable

121203 16:06:54 [ERROR] Error in accept: Resource temporarily unavailable

日志里面有2个地方比较起眼,“Resource temporarily unavailable”,“ Unable to find the AUTOINC column template_id in the InnoDB table test/tc_steppay_template.”。前面一个应该是资源设置的问题,咨询了印风,是innodb_open_files设置过大(>1024)导致mysql在crash后恢复触发了bug(http://bugs.mysql.com/bug.php?id=48929),详细原因这个bug描述的也比较清楚,就不再多说,这个bug在这台机器的mysql版本里依旧存在。因为是测试环境,设置innodb_open_files=1000(这个参数对性能的影响,可以参考这里http://www.mysqlperformanceblog.com/2009/11/18/how-innodb_open_files-affects-performance/),重启解决。

到这里问题应该算解决了,但是看alert日志不禁要问,为什么mysqld会crash,根据前面的日志似乎是另外一个bug(http://bugs.mysql.com/bug.php?id=55993)。但是test.tc_steppay_template count(*)=0,这个表是没人操作的;另外这台机器物理内存比较小(5632000K)目前这个原因暂时不详。待找到原因再来补充。

分享到:
评论

相关推荐

    MySQL的Innodb引擎配置说明.txt

    内容包括: 1.MySQL的Innodb引擎配置 1.如何配置MySQL服务器的最大连接数量 2.如何配置innodb_open_files,table_open_cache,innodb_file_io_threads和innodb_buffer_pool_size,innodb_log_file_size

    mysql提示Changed limits: max_open_files: 2048 max_connections: 1910 table_cache: 64的解决

    适当的降低max_connections 或调整其他两个数值解决办法在 mysql bin > 中输入 mysql-nt –table_cache=764mysql-nt –innodb_open_files=2048 即可!!table_cache和max_connections 在my.ini 里可调Chang

    mysql参数及其优化

    cache_size、query_cache_type、innodb_buffer_pool_size、innodb_log_file_size、innodb_log_buffer_size、innodb_flush_logs_at_trx_commit、transaction_isolation、innodb_file_per_table、innodb_open_files、...

    mysql性能调优参数

    4. Innodb_log_files_in_group:这个参数确定 MySQL 可以以循环方式将日志文件写到多个文件,推荐设置为 3。 5. Innodb_log_file_size:这个参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复...

    installanywhere2009打包Tomcat,jdk,mysql

    open_files_limit=4161 query_cache_type=0 sort_buffer_size=256K table_open_cache=2000 ``` 这里的配置包括了各种性能参数,如缓冲区大小、最大连接数等,以优化MySQL的性能。 #### 四、使用InstallAnywhere ...

    mysql 5.5 配置文档

    23. `innodb_log_buffer_size`, `innodb_log_file_size`, `innodb_log_files_in_group`: InnoDB 事务日志相关参数,用于保证高可用性和容错性。 24. `innodb_max_dirty_pages_pct`: 定义脏页在缓冲池中的最大比例,...

    MySQL巡检分享_20180817_徐晨亮1

    5. **字符集与大字段**:非默认字符集可能影响执行计划,大字段可能导致行迁移问题,字段长度过大则浪费存储空间。 6. **主键与索引**:无主键或索引的表在主从复制和数据一致性方面可能存在风险。 接下来,从索引...

    mysql数据库my.cnf配置文件

    # 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸. # 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制, # 所以不要设置的太高. innodb_write_io_threads = 4 innodb_read_io_...

    多实例mysql的安装和管理_wing.docx

    - **innodb_log_files_in_group=3**:一个组中重做日志文件的数量。 - **innodb_max_dirty_pages_pct=60**:脏页比例达到该值时触发后台刷新,平衡性能和安全性。 - **innodb_lock_wait_timeout=120**:等待锁定的...

    mysql数据库配置模板

    - **open_files_limit**: 设置服务器可以打开的最大文件数量。 - **back_log**: 在MySQL暂时无法接收新连接时,等待连接队列的最大长度。 - **max_connections**: 允许的最大并发连接数。 - **max_connect_errors**:...

    mysql服务性能优化—my.cnf_my.ini配置说明详解(16G内存)

    - `sort_buffer_size`的设置需要权衡并发连接数和系统内存,过大可能导致内存资源紧张。 - 如果`Open_tables`接近`table_cache`,并且`Opened_tables`持续增加,可能需要增大`table_cache`以减少表打开的开销。 -...

    my.cnf-调优

    - **innodb_log_files_in_group**: InnoDB日志组中文件数量。 - **innodb_max_dirty_pages_pct**: 允许脏页的最大百分比。 - **innodb_lock_wait_timeout**: 等待锁的超时时间。 - **innodb_file_per_table**: 每张...

    mysql8.0.11多实例安装

    open_files_limit=60000 explicit_defaults_for_timestamp server-id=1203307 lower_case_table_names=1 character_set_server=utf8 federated max_connections=1000 max_connect_errors=100000 interactive_timeout...

    RockyLinux9.0 yum安装 mysql8.0

    open_files_limit = 65535 back_log = 600 max_connections = 5000 max_connect_errors = 1000 table_open_cache = 1024 external-locking = FALSE max_allowed_packet = 32M sort_buffer_size = 1M join_buffer_...

    MySQL 句柄数占用过多的解决方法

    5. **监控与调整其他InnoDB参数**:如`innodb_open_files`控制打开的表文件数量,`innodb_thread_concurrency`控制并发线程数等。 综上所述,解决MySQL句柄占用过多的问题需要深入理解数据库的工作原理和配置选项。...

    环境搭建php&mysql&svn

    open_files_limit = 10240 back_log = 600 max_connections = 5000 max_connect_errors = 6000 table_cache = 614 external-locking = FALSE max_allowed_packet = 4M sort_buffer_size = 1M join_buffer_...

    MySQL5.6主从复制搭建文档.docx

    - `max_connections`、`max_user_connections`和`open_files_limit`:限制并发连接数和可打开文件数,防止资源耗尽。 - `innodb_buffer_pool_size`:设置InnoDB缓冲池大小,用于缓存数据和索引,提高性能。 - `...

Global site tag (gtag.js) - Google Analytics