- 浏览: 89541 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (18)
- lr学习笔记 (0)
- mysql (15)
- innodb (2)
- replication (1)
- mysql view (0)
- mysql trigger (0)
- mysql知识汇总 (4)
- 字符集 (0)
- mutex (0)
- LOCK_open (0)
- kernel_mutex (0)
- insert (0)
- checkpoint (0)
- main thread (1)
- mysql sandbox (0)
- percona (0)
- create table (1)
- jdbc (0)
- rename table (0)
- mysqldump (0)
- deadlock (0)
- binlog (1)
- tpcc (0)
- mysql proxy (0)
- backup (0)
- metadata lock (1)
最新评论
今天上午不断的接到开发同学的反馈,测试环境的一台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 set global read_only操作
2014-12-02 15:43 9019最近了解mysql ... -
Flush tables with read lock
2014-09-14 11:57 0flush tables with read ... -
mysql flush logs
2014-05-11 21:23 13760最近遇到一台mysql机器,空间不足,查看 ... -
innodb insert buffer
2013-12-03 08:49 0参考 ... -
mysql备份之物力备份--xtrabackup
2013-09-06 13:43 0xtrabackup -
recover delete rows
2013-09-02 09:06 0链接: http://www.my ... -
关闭mysql的几种方式和区别
2013-09-04 18:58 2271关闭mysql的方式大致有下面几种: ... -
using join buffer查询结果错误
2013-08-27 17:48 0分页查询优化,引起结果不对 select t1.id ... -
jdbc prepared statement
2013-08-27 16:40 0prepared statement相关的 //Conne ... -
mysq 权限相关操作的实现
2013-08-03 11:27 0mysq grant用法 drop user的调用 ... -
mysql Binlog_cache_disk_use
2013-07-09 19:20 0mysql Binlog_cache_disk_use ... -
mysql slave 备库延迟是怎么得到的
2013-07-28 14:43 3400在mysql的备库的监控中有一项很重要的指标:Se ... -
mysql expire_logs_days是怎么生效的
2013-07-07 15:33 10027mysql主备复制是通过binlog完成的。 ... -
mysql my.cnf文件的option
2013-07-06 14:41 1543mysql的配置文件my.cnf里是由一个个 ... -
mysql 并发insert引起的死锁
2013-07-04 20:31 0参考链接 http:/ ... -
mysql compound in 查询
2013-07-03 21:41 898mysql可以使用row construc ... -
mysql jdbc系列
2013-06-23 18:28 0mysql jdbc系列 -
percona innodb_lazy_drop_table过程和bug
2013-06-23 10:00 0percona innodb_lazy_drop_table ... -
mysql启动失败,Bind on TCP/IP port: Address already in use?
2013-06-22 10:52 0什么原因导致这种情况的发生 http:/ ... -
mysql replication heartbeat
2013-06-20 10:52 0mysql replication,master_he ...
相关推荐
内容包括: 1.MySQL的Innodb引擎配置 1.如何配置MySQL服务器的最大连接数量 2.如何配置innodb_open_files,table_open_cache,innodb_file_io_threads和innodb_buffer_pool_size,innodb_log_file_size
适当的降低max_connections 或调整其他两个数值解决办法在 mysql bin > 中输入 mysql-nt –table_cache=764mysql-nt –innodb_open_files=2048 即可!!table_cache和max_connections 在my.ini 里可调Chang
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、...
4. Innodb_log_files_in_group:这个参数确定 MySQL 可以以循环方式将日志文件写到多个文件,推荐设置为 3。 5. Innodb_log_file_size:这个参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复...
open_files_limit=4161 query_cache_type=0 sort_buffer_size=256K table_open_cache=2000 ``` 这里的配置包括了各种性能参数,如缓冲区大小、最大连接数等,以优化MySQL的性能。 #### 四、使用InstallAnywhere ...
23. `innodb_log_buffer_size`, `innodb_log_file_size`, `innodb_log_files_in_group`: InnoDB 事务日志相关参数,用于保证高可用性和容错性。 24. `innodb_max_dirty_pages_pct`: 定义脏页在缓冲池中的最大比例,...
5. **字符集与大字段**:非默认字符集可能影响执行计划,大字段可能导致行迁移问题,字段长度过大则浪费存储空间。 6. **主键与索引**:无主键或索引的表在主从复制和数据一致性方面可能存在风险。 接下来,从索引...
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸. # 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制, # 所以不要设置的太高. innodb_write_io_threads = 4 innodb_read_io_...
- **innodb_log_files_in_group=3**:一个组中重做日志文件的数量。 - **innodb_max_dirty_pages_pct=60**:脏页比例达到该值时触发后台刷新,平衡性能和安全性。 - **innodb_lock_wait_timeout=120**:等待锁定的...
- **open_files_limit**: 设置服务器可以打开的最大文件数量。 - **back_log**: 在MySQL暂时无法接收新连接时,等待连接队列的最大长度。 - **max_connections**: 允许的最大并发连接数。 - **max_connect_errors**:...
- `sort_buffer_size`的设置需要权衡并发连接数和系统内存,过大可能导致内存资源紧张。 - 如果`Open_tables`接近`table_cache`,并且`Opened_tables`持续增加,可能需要增大`table_cache`以减少表打开的开销。 -...
- **innodb_log_files_in_group**: InnoDB日志组中文件数量。 - **innodb_max_dirty_pages_pct**: 允许脏页的最大百分比。 - **innodb_lock_wait_timeout**: 等待锁的超时时间。 - **innodb_file_per_table**: 每张...
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...
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_...
5. **监控与调整其他InnoDB参数**:如`innodb_open_files`控制打开的表文件数量,`innodb_thread_concurrency`控制并发线程数等。 综上所述,解决MySQL句柄占用过多的问题需要深入理解数据库的工作原理和配置选项。...
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_...
- `max_connections`、`max_user_connections`和`open_files_limit`:限制并发连接数和可打开文件数,防止资源耗尽。 - `innodb_buffer_pool_size`:设置InnoDB缓冲池大小,用于缓存数据和索引,提高性能。 - `...