一般情况下mysql的启动错误还是很容易排查的,但是今天我们就来说一下不一般的情况。拿到一台服务器,安装完mysql后进行启动,启动错误如下:
有同学会说,哥们儿你是不是buffer pool设置太大了,设置了96G内存。这明显提示无法分配内存嘛。如果真是这样也就不在这里进行分享了,哈哈。
我的服务器内存是128G。如下图:
服务器内存使用情况:
那么问题来了,既然还剩如此多的内存,为什么提示无法分配内存??。各位童鞋怎么看?
1 首先想到会不会是有几条内存坏了?于是运维的同学进行了检查,给我的反馈是硬件一切正常。
2 把mysql配置参数又检查了一遍,没有发现什么问题,线上一直就是使用这些参数。
3 又把文件拷贝到另外一台机器,,另外一台服务器可以正常启动(2台机器硬件配置一致)。
那么如果排除硬件问题,mysql配置问题,那么剩下的就只有 *** 作系统的内核参数配置了。于是把两台服务器进行了对比,最终发现了一个内核参数不一致。
复制代码代码如下:
vmovercommit_memory
mysql启动正常的服务器改参数的值是0,而mysql启动错误的这台服务器该值是2。
那么问题来了,这个参数到底是什么鬼?竟然会让mysql分配内存失败,最后导致无法启动。经过查询资料知道了vmovercommit_memory是什么鬼。
vmovercommit_memory
默认值为:0
从内核文档里得知,该参数有三个值,分别是:
0:当用户空间请求更多的的内存时,内核尝试估算出剩余可用的内存。
1:当设这个参数值为1时,内核允许超量使用内存直到用完为止,主要用于科学计算
2:当设这个参数值为2时,内核会使用一个决不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。
vmovercommit_ratio
默认值为:50
这个参数值只有在vmovercommit_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
那么如果把内核参数vmovercommit_memory恢复为默认值0,那么将不会受到约束。
复制代码代码如下:
echo 0 > /proc/sys/vm/overcommit_memory
参考资料:
>
总结:
说了这么多,那么为什么要修改内核参数vmovercommit_memory的值呢?这个是因为这台服务器之前跑过GreenPlum数据库,拿到我手上的时候没有进行重装系统,那么还是建议如果拿到的机器之前跑过其他的业务,那么保险的方法还是重装一下系统,然后再部署自己的业务,不然真的会出现莫名其妙的问题。
1、服务器名称:光明の世界服务器[商业服]服务器版本:172
官方网站:>
前置条件:
1、在阿里云服务器de系统是win service 2012。
2、服务器里自己安装了my sql 57
3、本地也安装了my sql 57
需求:想通过本地的mysql连接上远程的服务器的mysql,这样自己在本地 *** 作数据库比在服务器里数据库要好。
步骤:
一、增加允许远程连接 MySQL 用户 并授权。
在你安装路径下的bin文件夹里进行命令行的设置。
1、首先以 root 帐户登陆 MySQL
在服务器中打开命令行(shift+右键)
打开数据库管理员权限
mysql -uroot -p 123
我去,对应的是123是对应到数据库名。
果断改为
mysql -uroot -p
输入mysql的密码。
2、查看用户的权限
mysql> select host,user from user; (查看用户的权限情况)
3、创建远程登录用户并授权
进入到服务器的命令行里
输入
use mysql
在输入
grant all PRIVILEGES on discuz to ted@'123123123123' identified by '123456';
上面的语句表示将 discuz 数据库的所有权限授权给 ted 这个用户,允许 ted 用户在 123123123123 这个 IP 进行远程登陆,并设置 ted 用户的密码为 123456 。
注意:
(1)all PRIVILEGES 表示赋予所有的权限给指定用户,这里也可以替换为赋予某一具体的权限,例如:select,insert,update,delete,create,drop 等,具体权限间用“,”半角逗号分隔。
(2)discuz 表示上面的权限是针对于哪个表的,discuz 指的是数据库,后面的 表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“”,对于某一数据库的全部表授权为“数据库名”,对于某一数据库的某一表授 权为“数据库名表名”。
(3)ted 表示你要给哪个用户授权,这个用户可以是存在的用户,也可以是不存在的用户。
(4)123123123123 表示允许远程连接的 IP 地址,如果想不限制链接的 IP 则设置为“%”即可。
(5)123456 为用户的密码。
我最终使用的是把整个数据库的权限都ok,全部数据库的全部表,给root用户授权。没有设定远程连接IP地址。
4、执行更新权限(刷新权限)
flush privileges;
5、再一次查看数据库用户权限
mysql> select host,user from user; (再次查看用户的权限情况)
二、打开服务器上的防火墙阻止 3306 端口,可以公网访问。
MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 3306 端口,否则远程是无法通过 3306 端口连接到 MySQL 的。
如果您在安装 MySQL 时指定了其他端口,请在防火墙中开启您指定的 MySQL 使用的端口号。
找到防火墙的允许的应用,打开数据库的公用和专用。
三、在本地建立服务器数据库连接
1、点击这个
2、数据里填上连接的名字,服务器IP,以及连接数据库的名字和密码
3、点击configure server mangement
如果报这个错误,说明是服务器的3306端口与没有打开。
下面图连接成功
选择SSH login。。。。
输入服务器的公网IP和端口(我也不知道是啥端口我写的是本地跑的项目的本地接口)
一路next就ok。
该流程涉及员工、部门主管和行政主管三种角色,所以需先创建这三种角色,然后为角色添加用户。登陆后台,点击“软件管理”,进入“办公自动化系统”后点击“常用工具”,最后点击“角色”,如下图所示:
进入角色界面后点击“新建”按钮,进入角色创建页面,填写角色名称,然后点击“保存并新建”;
继续创建“部门主管”和“行政主管”角色。
创建用户以及为用户分配角色
创建用户和为用户分配角色,这部份需要回到后台主页,点击企业域管理,在企业与列表,选择添加了该软件的企业域,点击企业域名称进入企业域信息页面,选择用户,点击新建,进入用户列表页面,点击新建,即可新建用户和分配角色。如图所示:
用户列表页面
5
创建请假申请流程
完成创建用户和为用户分配角色后返回后台主页,选择软件管理,进入“办公自动化系统”软件,选择“请假申请模块”模块,点击“流程”按钮进入流程列表,接着点击“新建”按钮新建流程。我的世界0143ip:skymcme
我的世界0143服务器ip地址 —— 1、首先打开电脑,点击选择电脑左下角“开始”图标按钮。2、然后在新的界面里点击选择右侧“运行”按钮。3、之后在新的界面里在搜索框里输入“kipconfig”后点击选择“确定”按钮。4、然后在新的界面里就可以查看
我的世界0143有哪些服务器地址 —— ip:skymcme 端口:19132
我的世界怎么查看自己服务器的ip —— 1、首先,打开计算机,单击以选中计算机左下角的“开始”图标按钮,如下图所示,然后进入下一步。2、其次,完成上述步骤后,在新界面中单击右侧的“ 运行”按钮,如下图所示,然后进入下一步。3、接着,完成上述步骤后,在
怎么查看我的世界服务器ip地址 —— 启动游戏后点击多人游戏,选择一个。然后点击左下角的编辑就可以看到IP了。玩家可以在游戏中的三维空间里创造和破坏林林总总的方块,甚至在多人服务器与单人世界中体验不同的游戏模式。在高度的自由中,玩家们也自己创作出MYSQL没有启动的话,网站内容当然无法正常显示;你现在需要启动MYSQL,找到安装目录,找MySQL\MySQL
Server
50\bin\mysqld
启动,如果没有这个,你就再找找BIN下的其他进行启动
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)