MySQL启动错误怎么解决 MySQL启动错误解决方法

一般情况下mysql的启动错误还是很容易排查的,但是今天我们就来说一下不一般的情况。拿到一台服务器,安装完mysql后进行启动,启动错误如下。

有同学会说,哥们儿你是不是buffer pool设置太大了,设置了96G内存。这明显提示无法分配内存嘛。如果真是这样也就不在这里进行分享了,哈哈。

我的服务器内存是128G。如下图:

服务器内存使用情况:

那么问题来了,既然还剩如此多的内存,为什么提示无法分配内存?

1. 首先想到会不会是有几条内存坏了?于是运维的同学进行了检查,给我的反馈是硬件一切正常。

2. 把mysql配置参数又检查了一遍,没有发现什么问题,线上一直就是使用这些参数。

3. 又把文件拷贝到另外一台机器,,另外一台服务器可以正常启动(2台机器硬件配置一致)。

那么如果排除硬件问题,mysql配置问题,那么剩下的就只有操作系统的内核参数配置了。于是把两台服务器进行了对比,最终发现了一个内核参数不一致。

复制代码,代码如下:

vm.overcommit_memory

mysql启动正常的服务器改参数的值是0,而mysql启动错误的这台服务器该值是2。

那么问题来了,这个参数到底是什么鬼?

竟然会让mysql分配内存失败,最后导致无法启动。经过查询资料知道了vm.overcommit_memory是什么鬼。

vm.overcommit_memory

默认值为:0

从内核文档里得知,该参数有三个值,分别是:

0:当用户空间请求更多的的内存时,内核尝试估算出剩余可用的内存。

1:当设这个参数值为1时,内核允许超量使用内存直到用完为止,主要用于科学计算.

2:当设这个参数值为2时,内核会使用一个决不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。

vm.overcommit_ratio

默认值为:50

这个参数值只有在vm.overcommit_memory=2的情况下,这个参数才会生效。

那么我们来看一下总的内存地址不能超过多少。其实是可以直接查看的。

[root@yayundeng 3306]# cat /proc/meminfo |grep -i commit
CommitLimit:  70144396 kB
Committed_AS:   135196 kB
[root@yayundeng 3306]# 

通过查看可以得知在70G的样子。那么这个是如何计算的呢?这个就是上面提到的一个公式。swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。

总虚拟内存 = 可用物理内存 × 百分比 + 交换分区

[root@yayundeng 3306]# cat /proc/meminfo | grep MemTotal
MemTotal:    132096808 kB
[root@yayundeng 3306]#
[root@yayundeng 3306]# free -k
       total    used    free   shared  buffers   cached
Mem:   132096808  1583944 130512864     0   10240   133220
-/+ buffers/cache:  1440484 130656324
Swap:   4095992     0  4095992
[root@yayundeng 3306]# cat /proc/sys/vm/overcommit_ratio
50
[root@yayundeng 3306]# 

总虚拟内存=132096808 * 50% + 4095992= 70144396 kB

那么最后的结果就是buffer pool不能超过70144396 kB - 135196 kB=70009200 KB=66G。实际上经过测试,buffer pool只能设置57G。

最后在看看总虚拟内存情况:

CommitLimit:最大可用虚拟内存

Committed_AS:已使用虚拟内存

[root@yayundeng 3306]# cat /proc/meminfo |grep -i commit
CommitLimit:  70144396 kB
Committed_AS:  65539208 kB

那么如果把内核参数vm.overcommit_memory恢复为默认值0,那么将不会受到约束。

复制代码,代码如下:

echo 0 > /proc/sys/vm/overcommit_memory

参考资料:

http://serverfault.com/questions/606185/how-does-vm-overcommit-memory-work
http://linuxperf.com/?p=102

总结:

说了这么多,那么为什么要修改内核参数vm.overcommit_memory的值呢?这个是因为这台服务器之前跑过GreenPlum数据库,拿到我手上的时候没有进行重装系统,那么还是建议如果拿到的机器之前跑过其他的业务,那么保险的方法还是重装一下系统,然后再部署自己的业务,不然真的会出现莫名其妙的问题。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索内存
, 服务器
, 内核
, 参数
, 配置
错误
mysql 1130错误解决、mysql 1142错误解决、mysql 1071错误解决、mysql 2003错误解决、mysql 2027错误解决,以便于您获取更多的相关知识。

时间: 2024-06-09 08:51:39

MySQL启动错误怎么解决 MySQL启动错误解决方法的相关文章

解决MySQL服务无法启动 系统发生1058错误

现象:mysql 服务无法启动,系统发生1058错误 我的mysql原安装好的,后来把服务禁掉,然后用mysqld-nt standalone启动,现在我想把服务重新启动,却无法启动. 解决方法: ◆1.运行 D:\mysql\bin>mysqld-nt -remove Service successfully removed. D:\mysql\bin>mysqld-nt --install Service successfully installed. D:\mysql\bin>ne

1067错误启动错误与“服务mysql意外停止”解决方法

MYSQL启动报1067错误,系统日志中是"服务 mysql 意外停止" Mysql日志中则是:"Plugin 'FEDERATED' is disabled" 我在网上找到解决方案: 1.在MY.INI文件中的 [mysqld] 中增加一行tmpdir="D:/MySQL/data/"修改后,还是启动不了或者能启动但关机后又出现同样问题,接着我做了第二步,重启正常. 2.删除DATA目录下除数据库文件夹外的其他文件,重启mysql,问题解决.

mysql启动的error 2003和1067错误问题解决方法_Mysql

mysql安装好经常发现无法正常启动碰到最多的是error 2003的错误,以下为解决方法: mysqld -nt -remove mysqld -nt -install 重新启动mysql net start mysql 可能还会遇到服务1067错误的问题,原因大致有两个: (1)my.ini的basedir和datadir目录配置有问题,可如下面的例子修改: basedir=d:/MySQL5.0/#mysql安装位置 datadir=d:/MySQL5.0/data#数据存放位置 不过,一

mysql linux-linux上mysql可以正常启动,却打mysql提示错误进不去

问题描述 linux上mysql可以正常启动,却打mysql提示错误进不去 service mysqld start Starting mysqld: [ OK ] [root@chanct201 etc]# [root@chanct201 etc]# mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '--default-character-set=utf8' (2) [root@chanc

解决mysql使用GTID主从复制错误问题

解决mysql使用GTID主从复制错误问题 做MySQL主从的话肯定会遇到很多同步上的问题, 大多数都是由于机器宕机,重启,或者是主键冲突等引起的从服务器停止工作, 这里专门收集类似问题并提供整理解决方案,仅供参考! 1.主从网络中断,或主服务器重启,或从服务器重启,从会根据配置文件中的时间(默认1分钟)去自动重连主服务器,直到网络和服务均可正常连接,连接正常后可自动继续同步之前文件,不需要任何人工干预! 2.当主从因为人为原因出现不同步的时候,可以用下面命令进行同步:  代码如下 复制代码 L

Windows下PHP安装路径配置错误导致Apache无法启动怎么解决?

  这篇文章主要介绍了Windows下PHP安装路径配置错误导致Apache无法启动的解决方法,本文可以说是一个引号引发的悲剧,需要的朋友可以参考下 LoadModule php5_module "C(/D):/Program Files/php5/php5apache2_2.dll" PHP安装路径引起的apache无法启动错误 今天给一同事的PC机安装部署web服务的时候,按同事要求把所有程序文件放到安装目录的program files下,于是我把apache安装到了c:progr

解决Mysql错误:Can't create/write to file 'C:\WINDOWS\TEMP\#sql_1344_0.MYD' (Errcode: 17)

解决Mysql错误:Can't create/write to file 'C:\WINDOWS\TEMP\#sql_1344_0.MYD' (Errcode: 17)的问题,我所使用的系统是Windows Server http://www.aliyun.com/zixun/aggregation/19058.html">2003 SP2+php 5.2.2+mysql5.0.22+McAfee杀毒软件,当访问用户主页的时候发现mysql出错误,下面来说一下具体的解决方法,风信网 htt

解决mysql 1040错误Too many connections的方法_Mysql

从官方文档知道linux上面编译安装的mysql默认的连接为100个,这样对于网站的需求来说是远远不够的. mysql官方告诉我们需要修改max_connections的值,那么我们怎么去修改呢?有两种方法 1.修改配置文件文件 修改/etc/my.cnf这个文件,在[mysqld]中新增max_connections=N,如果你没有这个文件请从编译源码中的support-files文件夹中复制你所需要的*.cnf文件为到/etc/my.cnf.我使用的是my-medium.cnf,中型服务器配

MySQL下常见的启动失败与备份失败问题的解决教程_Mysql

启动失败重启服务器后-->重启应用服务(Confluence)-->报错,数据库连接失败(mysql设置了开机自启动)-->查看mysql数据库状态: [root@fisheye ~]# ps -ef | grep mysql root 25555 21974 0 11:28 pts/0 00:00:00 grep mysql 启动mysql服务器 [root@fisheye data]# service mysql start MySQL server PID file could n

MySQL下PID文件丢失的相关错误的解决方法_Mysql

今天同事A找到我,说是Mysql server X的负载很高,查询很慢.他自己捣鼓了一阵未果后,我们一起看了下. [root@redhat var]# uname -a Linux xxx 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux [root@redhat var]# mysql -u root -p -e "select version();" +--------