mysql: Too many connections
今天开多一个应用在 APP SERVER 上,报告一个错误:
ERROR 1040 (00000): Too many connections
这倒是从来没碰到过,不过在 console 下可以用 root 登录 (console 下用其他用户也不可登录,Too many connections)
mysql -uroot -p
mysql > show processlist;
...
这里列了100个链接!!其中只有2个链接是Query,其他的都是Sleep!!
mysql> show variables like '%connect%';
+--------------------------+-------------------+
| Variable_name | Value |
+--------------------------+-------------------+
| character_set_connection | latin1 |
| collation_connection | latin1_swedish_ci |
| connect_timeout | 5 |
| init_connect | |
| max_connect_errors | 10 |
| max_connections | 100 |
| max_user_connections | 0 |
+--------------------------+-------------------+
7 rows in set (0.00 sec)
这里的 max_connections 是100,我没有特别配置过,这是一个系统默认值。修改 /etc/my.cnf 如下:
[mysqld]
thread_cache_size=120
max_connections=150
把链接数提高到150
然后重启mysql。暂时能解决这个问题。
回想APP上的应用,想起来上面有个程序,是开了100个线程来访问数据库的,并且是每次访问时打开connection,完成sql语句后就关闭。可是为什么这些链接会状态全部是 Sleep 而不释放链接呢?
相关文档:
1.在ORACLE中用select * from all_users显示所有的用户,而在MYSQL中显示所有数据库的命令是show
databases。对于我的理解,ORACLE项目来说一个项目就应该有一个用户和其对应的表空间,而MYSQL项目中也应该有个用户和一个库。在
ORACLE(db2也一样)中表空间是文件系统中的物理容器的逻辑表示,视图、触发器和存储过程也可 ......
一. 建表与初始化数据
在mysql的test数据库中建立一张新表:tbl_user,建表语句如下:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `tbl_user` (
`userid` varchar(50) NOT NULL,
`name` varchar(50) default '',
`blog` varchar(50) default '',
  ......
可以适用任何sql , 自动识别字段名, gzip压缩 , 带输出buffer , 支持分库分表
需要辅助代码和Makefie , 下面是主程序代码,
/**
* mysql数据表dump程序
* @author : cheng limin
* @date : 2010-1-18
*
* 使用样例:
*./dump_mysql -c ../conf/dump.conf
* -t xml
* -s ......
Mysql的字符集是比较麻烦的,默认的对我们来说根本就没什么用,我们是要用到中文的,所以一定得改字符集,如果字符集不对会有很多的问题,有乱码还有就是我们在程序里插入中文时会给你说mysql Data truncation: Data too long for column,你千万别以为是你的字段设得不够长,你设得再长他都会报错,所以改字符集吧
我们一般装好数 ......