MySQL调参踩坑之路

1、重启不起来,缺少pid文件

Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

查看日志文件,有这么一行:

[ERROR] Can't start server: can't check PID filepath: No such file or directory

缺少pid文件,需要新建一个。这个文件丢失的原因,大多数情况是因为mysqld非正常关闭。

解决方案:

看一下你的mysql配置文件my.cnf中pid文件的位置,我的位置是/var/run/mysqld/mysqld.pid,所以重新创建(一般需要sudo权限):

mkdir /var/log/mysqld
touch /var/log/mysqld/mysqld.pid
chown -R mysql:mysql /var/log/mysqld

重启即可。

2、No operations allowed after connection closed

使用jdbc时连接关闭,之所以会出现这个异常,是因为MySQL5.0以后针对超长时间DB连接做了一个处理,那就是如果一个DB连接在无任何操作情况下过了8个小时后(Mysql 服务器默认的“wait_timeout”是8小时),Mysql会自动把这个连接关闭。

解决方案:

将以下两个参数设置大一点:

wait_timeout
interactive_timeout

3、max_connections

如果用户数目很多,这个值要大于同时连接的用户数目。

(错误重现时再补上出错警告)

4、内存问题

出错信息:

运行一段时间后,报错:

No operations allowed after connection closed

且启动mysql的命令行出现下面错误:

/usr/local/mysql/bin/mysqld_safe: line 198:  4454 Killed                  nohup /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/sdb/mysqlstorage/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --open-files-limit=6165 --pid-file=/var/run/mysqld/mysqld.pid --socket=/sdb/mysqlstorage/mysql/mysql.sock < /dev/null > /dev/null 2>&1

估计是内存设置超过系统最大内存了。查看了一下日志文件,发现buffer pool大小为20G多(本机内存16G)。然而我的my.cnf中设置的innodb_buffer_pool_size是12G多,为什么会变成20G?

因为这里面有个计算公式,这个值不止与innodb_buffer_pool_size有关,还与innodb_buffer_pool_instance和innodb_buffer_pool_chunk_size有关,具体计算公式是:

innodb_buffer_pool_size = N * (innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances)

即innodb_buffer_pool_size 是innodb_buffer_pool_chunk_size和innodb_buffer_pool_instances乘积的整数倍,如果不是整数倍,则上取整,即增大innodb_buffer_pool_size使满足整数倍。

所以将调整一下它们之间的大小,使它们不超过最大内存情况下满足整数倍就可以了。

还要设置一下其他和内存相关的参数,使它们总和不超过最大内存。

5、Unable to lock ./ibdata1 error: 11

问题出现过程:开机后先启动了一下mysql,启动了一半想起参数有些参数忘记改了,就直接Ctrl+C关闭了。然后改完参数重启,启动不起来,查看日志文件,有以下错误:

[ERROR] InnoDB: Unable to lock ./ibdata1 error: 11

继续查看,还有这么一行提示:

[Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.

原因可能是:磁盘空间不够,或者这个文件被其他进程占用。

解决方法参考:传送门

6、InnoDB: Database page corruption on disk or a failed file read of page [page id: space=85, page number=5058528]. You may have to recover from a backup.

解决方案:传送门

。。。。未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值