问题背景

在多个月之前,也就是服务器刚刚搭建的时候,标题中的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-个人博客相关推荐

  1. mysql还书过程_记一次安装 MySQL 的过程

    记一次安装 MySQL 的过程 一直以来我用的 MySQL 都是从官网下载的zip压缩包,解压后自己配置的.但是这次安装时遇到了几个坑,特别在这里记录一下. 再次更新, 今天安装 MySQL 8.0. ...

  2. mysql log-update 错误_记一次修复MySQL socker 错误

    问题描述 初次往数据库中source 一个超大的文件,过了一会sql报错 table is full 然后去data 目录查看大小,发现一个表的ibd文件2G,果断删除了这个文件. 没想到继续报错. ...

  3. ubuntu下解决“无法获得锁 ”的方法_cppmylove的博客-CSDN博客_无法获得锁

    ubuntu下解决"无法获得锁 "的方法_cppmylove的博客-CSDN博客_无法获得锁 E: 无法获得锁 /var/lib/dpkg/lock-frontend - open ...

  4. mysql share 字体 中文_简单明白彻底解决 MySQL 中文编码问题

    1. 问题重现 mysql> create database school; mysql> use school; mysql> create table student(name ...

  5. java mysql安装教_大学java教案之MySQL安装图解

    一.MYSQL的安装 1.打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行"setup.exe". 2.选择安装类型,有"Typ ...

  6. mysql导入数据表越来越慢,快速解决mysql导数据时,格式不对、导入慢、丢数据的问题...

    快速解决mysql导数据时,格式不对.导入慢.丢数据的问题 如果希望一劳永逸的解决慢的问题,不妨把你的mysql升级到mysql8.0吧,mysql8.0默认的字符集已经从latin1改为utf8mb ...

  7. centos安装mysql 简书_在centos上安装mysql

    由于mysql易主甲骨文以后,centos7担心mysql慢慢会封闭不再开源所以将yum里面的数据库更换名字为MariaDB.两者差不多没有太大区别. 如何在centos7上安装mysql 解决思路通 ...

  8. 程序连接不上mysql数据库文件_数据库问题(程序连接mysql错误)

    今天服务器遇到了一个很熟悉的问题 输入 #mysql -u root -p ERROR 2002 (HY000):Can't connect to local MySQL server 随即上网找寻答 ...

  9. ubuntu安装mysql报错_在Ubuntu上安装mysql数据库和遇到的问题

    如果上面没有成功,而出现了这样的问题的话: Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'(using pass ...

最新文章

  1. 【VMware中搭建iOS开发环境的引导工具】
  2. 广州Robotaxi铁三角又落地,文远知行商业化通行证摊牌
  3. android、ios、php之间AES加密解密
  4. Stata 17 for Win 最新中文附详细安装教程
  5. django QuerySet对象转换成字典对象
  6. 部署WSE3.0实战:性能、证书与WSE910错误
  7. ::在sql语句中是什么写法_不懂就问:SQL 语句中 where 条件后 写上1=1 是什么意思...
  8. 二元置信椭圆r语言_r语言二元期权barrier option实现案例
  9. 查找字符串末尾含关键字_EXCEL函数公式大全之利用FIND函数和RIGHT函数LEN函数取末尾字符...
  10. mysql员工与部门代码,springMVC入门实例(员工系统-Mysql)代码简单易懂
  11. 数据挖掘——数据预处理
  12. 在这个520特别的日子里,分享几个用的上的Python代码
  13. 手机号码或账号查询支付宝名字和性别
  14. 为什么计算机使用二进制,你知道吗?
  15. 青岛著名地标“石老人”坍塌!数字化三维重建助力景观修复!
  16. 【NVMe2.0b 14】NVMe Admin Command Set
  17. consul服务发现入门篇
  18. Ubuntu 20.04.2.0 LTS 更改默认关联视频播放器VLC的方法
  19. 商用车人机界面(HMI)必须与驾驶员建立信任
  20. info1110辅导quiz1

热门文章

  1. 记一次jvm疯狂gc导致CPU飙高的问题解决
  2. 职业兴趣测试——Holland
  3. 小米中台架构分享,小米市值2690亿是因为这群可爱的人
  4. 一个HR911130C网络变压器的坑
  5. 测试dali协议的软件,如何使用示波器分析DALI协议?
  6. 前程无忧51Job岗位爬取~~新手路过,请多指教
  7. 物流里程批量查询地图路程查询行驶里程查询
  8. hexo+yilia添加相册视屏功能
  9. Android 自定义控件之打造流布局实现热门搜索标签
  10. Shell经典日志框架