[乐意黎]Centos里MySQL启动后无故停止,并抛 Warning: PDO::query(): MySQL server has gone away

阿里云ECS里Centos自建 MySQL数据库,启动后经常无故停止服务。

PHP程序有关MySQL的地方抛:

Warning: PDO::query(): MySQL server has gone away in /webpath/luxi.ren/index.php on line 141
Warning: PDO::query(): Error reading result set's header in /webpath/luxi.ren/index.php on line 141
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away in /webpath/index.php:141 Stack trace: #0 /webpath/index.php(141): PDO->query('SELECT * FROM `...') #1 {main} thrown in /webpath/luxi.ren/index.php on line 141


Centos控制台抛:

/usr/local/mysql/bin/mysqld_safe: line 198:  4614 Killed                  nohup /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=***6Z.err --pid-file=/usr/local/mysql/data/***6Z.pid < /dev/null > /dev/null 2>&1

/usr/local/mysql/bin/mysqld_safe: line 198:  4671 Killed                  nohup /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=iZwz99mho1vp798njmvvr6Z.err --pid-file=/usr/local/mysql/data/***6Z.pid < /dev/null > /dev/null 2>&1 > /dev/null 2>&1

MySQL日志抛错如下:

2018-07-02T04:42:52.137973Z 0 [Note] InnoDB: Number of pools: 1
2018-07-02T04:42:52.138093Z 0 [Note] InnoDB: Using CPU crc32 instructions
2018-07-02T04:42:52.139616Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
2018-07-02T04:42:52.139834Z 0 [ERROR] InnoDB: mmap(137428992 bytes) failed; errno 12
2018-07-02T04:42:52.139846Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2018-07-02T04:42:52.139851Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2018-07-02T04:42:52.139857Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2018-07-02T04:42:52.139861Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2018-07-02T04:42:52.139865Z 0 [ERROR] Failed to initialize builtin plugins.

2018-07-02T04:42:52.139868Z 0 [ERROR] Aborting

分析解决:

首先查看当前的内存和swap 空间大小(默认单位为k, -m 单位为M):

[root@aerchi.com ~]# free -m
                    total        used        free      shared  buff/cache   available
Mem:            992         613         238           0         140         235
Swap:             0           0           0

此处可以看到总内存是993M,SWAP不存在。

查看swap信息,包括文件和分区的详细信息

# swapon -s

或者

# cat /proc/swaps
 cat /proc/swaps

Filename                                Type            Size    Used    Priority

如果都没有,就需要手动添加交换分区。

添加交换空间有两种选择:添加一个交换分区或添加一个交换文件。

推荐添加一个交换分区;不过,若你没有多少空闲空间可用, 则添加交换文件。

一、增加swap交换文件

1、使用dd命令创建一个swap交换文件

dd if=/dev/zero of=/home/swap bs=1024 count=1024000

这样就建立一个/home/swap的分区文件,大小为1G。


[root@aier.xin ~]#  dd if=/dev/zero of=/home/swap bs=1024 count=1024000
1024000+0 records in
1024000+0 records out
1048576000 bytes (1.0 GB) copied, 17.305 s, 60.6 MB/s

2、制作为swap格式文件:

mkswap /home/swap

[root@aerchi.com ~]# mkswap /home/swap
Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=25f28f99-717a-4277-a203-dbffbc0e4215

3、再用swapon命令把这个文件分区挂载swap分区

/sbin/swapon /home/swap

[root@aier.xin.com ~]# /sbin/swapon /home/swap

swapon: /home/swap: insecure permissions 0644, 0600 suggested.

我们用free -m命令看一下,发现已经有交换分区了。

但是重启系统后,swap分区又变成0了。

4、为防止重启后swap分区变成0,要修改/etc/fstab文件

vim /etc/fstab

在文件末尾(最后一行)加上

/home/swap swap swap default 0 0

如图:


这样就算重启系统,swap分区还是有值。

如下图:


  1. swapoff -a    //关闭虚拟内存  
  2. swapon  -a    //开启虚拟内存 


删除swap交换文件

1、先停止swap分区

/sbin/swapoff /home/swap

2、删除swap分区文件

rm -rf /home/swap

3、删除自动挂载配置命令

vi /etc/fstab

这行删除

/home/swap swap swap default 0 0

这样就能把手动增加的交换文件删除了。
注意:
1、增加删除swap的操作只能使用root用户来操作。
2、装系统时分配的swap分区貌似删除不了。
3、swap分区一般为内存的2倍,但最大不超过2G

 

二、使用分区来做SWAP(虚拟内存).

1  使用fdisk来创建交换分区(假设 /dev/sdb2 是创建的交换分区)

2 使用 mkswap 命令来设置交换分区:
# mkswap /dev/sdb2

3 启用交换分区:

# swapon /dev/sdb2

4 写入/etc/fstab,以便在引导时启用:

/dev/sdb2 swap swap defaults 0 0

删除交换分区
步骤如下:
1、先停止swap分区

/sbin/swapoff /dev/sdb2

2、删除自动挂载配置命令

vi /etc/fstab

这行删除

/dev/sdb2 swap swap defaults 0 0

这样就能把手动增加的交换分区删除了。


另:

MySQL在Centos中占用内存过高的解决方法

修改 /etc/my.cnf 文件.
[root@aerchi.com ~]# vim /etc/my.cnf 
在最末尾添加:

performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256

然后,重启 MySQL

[root@aier.xin ~]# service mysqld restart
Shutting down MySQL..                                      [  OK  ]
Starting MySQL.                          [  OK  ]

-------------------------------------------------------------------

乐意黎

2018-07-02


发布了430 篇原创文章 · 获赞 415 · 访问量 925万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览