mysql 总停止运行_记一次解决MySQL经常停止运行的问题 | kTWO-个人博客
问题背景
在多个月之前,也就是服务器刚刚搭建的时候,标题中的MySQL问题就出现了,很是奇怪,博客过一段时间就毫无征兆的挂掉了,提示连接数据库失败,然后重新启动一下MySQL服务就又可以正常运行了。但是这个问题总是像莫名其妙的发生,时不时的给我来一点小惊喜,小意外,我每次重启MySQL服务之后就又可以正常运行了,所以就没去怎么解决这个问题。但是最近真的是忍无可忍了,决定解决了它。
先说一下我的服务器情况:
服务器:CentOS 6.8
MySQL版本:5.5
找到MySQL错误日志文件位置
解决问题当然是要看问题出在哪里,好在MySQL有自己的错误日志可以供我们分析。那么错误日志在那里呢? 我们可以用下面的方法找到这个文件的位置:
第一步:登录MySQL终端;
第二步运行下面的命令来查找错误日志的文件位置;
mysql> show variables like '%log_error%';
1
mysql> show variables like '%log_error%';
输出如下:
+---------------+----------------------------------------+
| Variable_name | Value |
+---------------+----------------------------------------+
| log_error | /www/wdlinux/mysql-5.5.27/var/kTWO.err |
+---------------+----------------------------------------+
1 row in set (0.03 sec)
1
2
3
4
5
6
+---------------+----------------------------------------+
| Variable_name | Value |
+---------------+----------------------------------------+
| log_error | /www/wdlinux/mysql-5.5.27/var/kTWO.err |
+---------------+----------------------------------------+
1 row in set (0.03 sec)
从结果中我们可以看到,错误日志文件的位置在 /www/wdlinux/mysql-5.5.27/var/kTWO.err
查看并分析MySQL错误日志
错误日志已经找到了,我们打开看一下,通过我的分析,我的这个MySQL运行出错有多处,但是直接导致MySQL宕机的只有一处。日志内容如下:
170806 14:33:23 mysqld_safe Number of processes running now: 0
170806 14:33:23 mysqld_safe mysqld restarted
170806 14:33:23 InnoDB: The InnoDB memory heap is disabled
170806 14:33:23 InnoDB: Mutexes and rw_locks use GCC atomic builtins
170806 14:33:23 InnoDB: Compressed tables use zlib 1.2.3
170806 14:33:23 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
170806 14:33:23 InnoDB: Completed initialization of buffer pool
170806 14:33:23 InnoDB: Fatal error: cannot allocate memory for the buffer pool
170806 14:33:23 [ERROR] Plugin 'InnoDB' init function returned error.
170806 14:33:23 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
170806 14:33:23 [ERROR] Unknown/unsupported storage engine: InnoDB
170806 14:33:23 [ERROR] Aborting
上面的错误日志是MySQL运行停止的最近一次错误提示。
分析得知,The InnoDB memory heap is disabled这个错误导致了下面一系列的failed和ERROR,最终导致最好的Aborting(异常终止)。这句话的大概意思就是InnoDB内存堆是禁用的。
通过查阅资料发现,MySQL默认的配置使用了操作系统的内存分配器,禁用了InnoDB的内置内存分配器所至。默认的innodb_use_sys_malloc配置是决定内存的分配器,当配置为1时是使用操作系统内存的分配器,当配置为0时使用InnoDB的默认分配器。所以我们只要将这个配置修改为0即可。
解决方案
找到MySQL的配置文件修改innodb_use_sys_malloc配置项为0.
一般的MySQL配置文件位置在/etc/my.cnf
查看配置文件中的配置后发现了一个尴尬的问题,竟然没有找到这个innodb_use_sys_malloc配置项。原来MySQL在版本升级的时候曾经取消了这个配置。但是人工添加上也是可以生效的。
我们直接在[mysqld]下面直接添加innodb_use_sys_malloc=0即可。
然后重启MySQL服务,再次查看日志。
170806 16:43:51 InnoDB: Mutexes and rw_locks use GCC atomic builtins
170806 16:43:51 InnoDB: Compressed tables use zlib 1.2.3
170806 16:43:51 InnoDB: Initializing buffer pool, size = 128.0M
170806 16:43:51 InnoDB: Completed initialization of buffer pool
170806 16:43:51 InnoDB: highest supported file format is Barracuda.
170806 16:43:51 InnoDB: Waiting for the background threads to start
170806 16:43:52 InnoDB: 1.1.8 started; log sequence number 6012940
170806 16:43:52 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
170806 16:43:52 [Note] - '0.0.0.0' resolves to '0.0.0.0';
170806 16:43:52 [Note] Server socket created on IP: '0.0.0.0'.
发现之前的错误消失了,没有faild和error了。经过这几天的测试发现,宕机的问题已经解决了,没有再发生。
附上错误日志中的其他几个小问题的解决方案
第一项
170804 21:51:16 [Warning] IP address '182.18.22.153' could not be resolved: Temporary failure in name resolution
170804 21:51:16 [Warning] IP address '182.18.22.153' could not be resolved: Temporary failure in name resolution
170804 21:51:16 [Warning] IP address '182.18.22.153' could not be resolved: Temporary failure in name resolution
170804 21:51:16 [Warning] IP address '182.18.22.153' could not be resolved: Temporary failure in name resolution
170804 21:51:16 [Warning] IP address '182.18.22.153' could not be resolved: Temporary failure in name resolution
170804 21:51:16 [Warning] IP address '182.18.22.153' could not be resolved: Temporary failure in name resolution
170804 21:51:16 [Warning] IP address '182.18.22.153' could not be resolved: Temporary failure in name resolution
在日志中出现了大量的类似警告。
这个警告是在说找不到DNS服务器,在web服务中,很多的服务器都没有DNS服务,所以MySQL提示无法将该IP解析为主机名。
解决方案:在MySQL配置文件中[mysqld]添加skip-name-resolve,这将使MySQL不再通过DNS解析地址。
这个问题的解决还有一个方式,那就是在host文件中添加ip信息,但是这个方案并不可取,ip太多不可能全部添加上。
第二项
170805 17:42:57 [ERROR] Missing system table mysql.proxies_priv; please run mysql_upgrade to create it
上面的错误提示找不到系统的数据表mysql.proxies_priv,这个问题的来源在于我当初升级MySQL版本的时候没有更新系统数据表,导致新版的MySQL数据表不全。
解决方案:执行命令mysql_upgrade -u root -p 输入密码之后将自动更新修复系统数据表。
PS:以上问题都是博主亲自遇到并解决的经验之谈,难免有不到之处,若有不当还请各位指正。若问题依然没有解决可参见《解决MySQL经常停止运行(swap分区设置)》
mysql 总停止运行_记一次解决MySQL经常停止运行的问题 | kTWO-个人博客相关推荐
- mysql还书过程_记一次安装 MySQL 的过程
记一次安装 MySQL 的过程 一直以来我用的 MySQL 都是从官网下载的zip压缩包,解压后自己配置的.但是这次安装时遇到了几个坑,特别在这里记录一下. 再次更新, 今天安装 MySQL 8.0. ...
- mysql log-update 错误_记一次修复MySQL socker 错误
问题描述 初次往数据库中source 一个超大的文件,过了一会sql报错 table is full 然后去data 目录查看大小,发现一个表的ibd文件2G,果断删除了这个文件. 没想到继续报错. ...
- ubuntu下解决“无法获得锁 ”的方法_cppmylove的博客-CSDN博客_无法获得锁
ubuntu下解决"无法获得锁 "的方法_cppmylove的博客-CSDN博客_无法获得锁 E: 无法获得锁 /var/lib/dpkg/lock-frontend - open ...
- mysql share 字体 中文_简单明白彻底解决 MySQL 中文编码问题
1. 问题重现 mysql> create database school; mysql> use school; mysql> create table student(name ...
- java mysql安装教_大学java教案之MySQL安装图解
一.MYSQL的安装 1.打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行"setup.exe". 2.选择安装类型,有"Typ ...
- mysql导入数据表越来越慢,快速解决mysql导数据时,格式不对、导入慢、丢数据的问题...
快速解决mysql导数据时,格式不对.导入慢.丢数据的问题 如果希望一劳永逸的解决慢的问题,不妨把你的mysql升级到mysql8.0吧,mysql8.0默认的字符集已经从latin1改为utf8mb ...
- centos安装mysql 简书_在centos上安装mysql
由于mysql易主甲骨文以后,centos7担心mysql慢慢会封闭不再开源所以将yum里面的数据库更换名字为MariaDB.两者差不多没有太大区别. 如何在centos7上安装mysql 解决思路通 ...
- 程序连接不上mysql数据库文件_数据库问题(程序连接mysql错误)
今天服务器遇到了一个很熟悉的问题 输入 #mysql -u root -p ERROR 2002 (HY000):Can't connect to local MySQL server 随即上网找寻答 ...
- ubuntu安装mysql报错_在Ubuntu上安装mysql数据库和遇到的问题
如果上面没有成功,而出现了这样的问题的话: Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'(using pass ...
最新文章
- 【VMware中搭建iOS开发环境的引导工具】
- 广州Robotaxi铁三角又落地,文远知行商业化通行证摊牌
- android、ios、php之间AES加密解密
- Stata 17 for Win 最新中文附详细安装教程
- django QuerySet对象转换成字典对象
- 部署WSE3.0实战:性能、证书与WSE910错误
- ::在sql语句中是什么写法_不懂就问:SQL 语句中 where 条件后 写上1=1 是什么意思...
- 二元置信椭圆r语言_r语言二元期权barrier option实现案例
- 查找字符串末尾含关键字_EXCEL函数公式大全之利用FIND函数和RIGHT函数LEN函数取末尾字符...
- mysql员工与部门代码,springMVC入门实例(员工系统-Mysql)代码简单易懂
- 数据挖掘——数据预处理
- 在这个520特别的日子里,分享几个用的上的Python代码
- 手机号码或账号查询支付宝名字和性别
- 为什么计算机使用二进制,你知道吗?
- 青岛著名地标“石老人”坍塌!数字化三维重建助力景观修复!
- 【NVMe2.0b 14】NVMe Admin Command Set
- consul服务发现入门篇
- Ubuntu 20.04.2.0 LTS 更改默认关联视频播放器VLC的方法
- 商用车人机界面(HMI)必须与驾驶员建立信任
- info1110辅导quiz1