MySQL 服务停止,尽管重新启动=始终

MySQL 服务停止,尽管重新启动=始终

我有一个 Amazon t2.small EC2 -1 核和 2GB RAM它超过了 CentOS 和 Virtualmin 的最低要求

我的系统:

  • CentOS 7.5.1804
  • 虚拟分钟
  • MySQL 5.5.60-MariaDB
  • Apache 2.4.6

MySQL 服务在一个月前多次访问后总是停止工作,我可以从 Webmin 重新启动它,直到我读到 DigitalOcean 博客中的一篇文章,添加了 [重新启动=始终] 在文件中 [/etc/systemd/system/multi-user.target.wants/mariadb.service] 我通过终止进程来测试它,然后服务会自动重新启动22天不停歇

现在服务再次停止工作,我打开了 [mariadb.service] 文件,发现 [Restart=Always] 行仍然在那里,但服务随机停止了。

注意:我仍然可以从 Webmin 启动它,没有任何问题,但是由于 DB 连接,所有网站都变得不可用。

我需要追踪这个问题,但我没有处理此类问题的经验。如何解决?

MySQL 配置:我的配置文件

symbolic-links=0
innodb_file_per_table = 1
myisam_sort_buffer_size = 8M
read_rnd_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
sort_buffer_size = 512K
table_open_cache = 64
max_allowed_packet = 1M
key_buffer_size = 16M

来自{的一些行var/日志/消息}

Oct 22 16:49:49 ns1 kernel: Out of memory: Kill process 13092 (mysqld) score 97 or sacrifice child

Oct 22 16:49:49 ns1 kernel: Killed process 13092 (mysqld) total-vm:1065992kB, anon-rss:182972kB, file-rss:0kB, shmem-rss:0kB

Oct 22 16:49:49 ns1 kernel: [12822]    27 12822    28326       73      14        0             0 mysqld_safe


Oct 23 08:58:11 ns1 kernel: [12822]    27 12822    28326       74      14        0             0 mysqld_safe
Oct 23 08:58:11 ns1 kernel: [19703]    27 19703   266425    39874     150        0             0 mysqld

Oct 23 20:04:47 ns1 saslauthd[531]: do_auth         : auth failure: [user=mysql] [service=smtp] [realm=] [mech=pam] [reason=PAM auth error]

Oct 23 22:21:25 ns1 kernel: [12822]    27 12822    28326       74      14        0             0 mysqld_safe
Oct 23 22:21:25 ns1 kernel: [19703]    27 19703   266425    48494     161        0             0 mysqld
Oct 23 22:21:25 ns1 kernel: Out of memory: Kill process 19703 (mysqld) score 103 or sacrifice child
Oct 23 22:21:25 ns1 kernel: Killed process 19703 (mysqld) total-vm:1065700kB, anon-rss:193976kB, file-rss:0kB, shmem-rss:0kB
Oct 23 22:21:25 ns1 kernel: [12822]    27 12822    28326       74      14        0             0 mysqld_safe
Oct 23 22:39:58 ns1 kernel: [12822]    27 12822    28326       76      14        0             0 mysqld_safe
Oct 23 22:39:58 ns1 kernel: [19246]    27 19246   266716    16891      98        0             0 mysqld
Oct 23 22:40:02 ns1 kernel: [12822]    27 12822    28326       76      14        0             0 mysqld_safe
Oct 23 22:40:02 ns1 kernel: [19246]    27 19246   266938    17064      98        0             0 mysqld
Oct 23 22:40:05 ns1 kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Oct 23 22:40:05 ns1 kernel: mysqld cpuset=/ mems_allowed=0
Oct 23 22:40:05 ns1 kernel: CPU: 0 PID: 19357 Comm: mysqld Kdump: loaded Not tainted 3.10.0-862.11.6.el7.x86_64 #1

答案1

最后,我经过12天的测试,找到了解决MySQL在数百个页面访问后自动启动并被杀死的解决办法。

答案取决于系统操作系统(CentOS)和 MySQL Mariadb 服务

解决方案:只需在启动服务前添加几秒即可 - 在我的情况下,我添加了 45 秒

在 { 中的 [service] 部分下添加以下行/etc/systemd/system/multi-user.target.wants/mariadb.service} - 当然路径取决于你的系统操作系统和 MySQL 服务名称(并非所有都有 mariadb.service)

Restart=always
RestartSec=45s

不要忘记运行以下命令

sudo systemctl daemon-reload

sudo systemctl restart mariadb.service

答案2

不知道。我会先介绍一下常见的

  • 为了安全起见,检查磁盘空间状态 DF-H 和记忆 免费-m 正常运行时间(发生碰撞后立即检查)

  • 检查数据目录的所有权和权限是否未发生改变

答案3

从日志输出中的这一行: Oct 22 16:49:49 ns1 kernel: Out of memory: Kill process 13092 (mysqld) score 97 or sacrifice child

可以看出你的 systemd 确实耗尽了内存,并且 Linux OOM(内存不足)终止程序确实停止了你的 mysqld(MySQL 守护进程)进程。

从描述来看重启=部分,上面写着如果,它将不会重新启动the service is stopped with systemctl stop or an equivalent operation,也许 OOM killer 是 systemd 的等效物,这个我不知道。

危险路段

似乎你可以禁用 OOM 终止为您的流程添加OOMScoreAdjust=-1000禁用此功能的功能。

相关内容