为什么mariadb不断死亡?如何停止?


25

我在Ubuntu 15.10上将LAMP服务器运行MariaDB 10.0.23-0。运行sudo /etc/init.d/mysql start结果:

Job for mariadb.service failed because a timeout was exceeded. See "systemctl status mariadb.service" and "journalctl -xe" for details.

输出systemctl status mariadb.service为:

●mariadb.service-MariaDB数据库服务器
   已加载:已加载(/lib/systemd/system/mariadb.service;已启用;供应商预设:已启用)
  插入:/etc/systemd/system/mariadb.service.d
           └─从my.cnf-settings.conf迁移
   活动:自星期六2016-03-26 22:52:42美国东部时间以来失败(结果:超时);26s前
  进程:8707 ExecStart = / usr / sbin / mysqld $ MYSQLD_OPTS $ _WSREP_NEW_CLUSTER(代码=已退出,状态= 0 /成功)
  进程:8706 ExecStartPre = / usr / bin / install -m 755 -o mysql -g root -d / var / run / mysqld(代码=已退出,状态= 0 /成功)
 主PID:8707(代码=已退出,状态= 0 /成功)

3月26日22:52:39 boggan systemd [1]:mariadb.service:启动操作超时。终止。
3月26日22:52:39 boggan mysqld [8707]:2016-03-26 22:52:39 140105856617216 [注意] / usr / sbin / mysqld:正常关闭
3月26日22:52:39 boggan mysqld [8707]:2016-03-26 22:52:39 140105856617216 [Note]事件计划程序:清除队列。0场
3月26日22:52:39 boggan mysqld [8707]:2016-03-26 22:52:39 140104920164096 [注意] InnoDB:FTS优化线程退出。
3月26日22:52:39 boggan mysqld [8707]:2016-03-26 22:52:39 140105856617216 [Note] InnoDB:正在启动关机...
3月26日22:52:42 boggan mysqld [8707]:2016-03-26 22:52:42 140105856617216 [注意] InnoDB:关闭已完成;日志序列号3336953
3月26日22:52:42 boggan mysqld [8707]:2016-03-26 22:52:42 140105856617216 [注意] / usr / sbin / mysqld:关闭完成
3月26日22:52:42 boggan systemd [1]:无法启动MariaDB数据库服务器。
3月26日22:52:42 boggan systemd [1]:mariadb.service:设备进入失败状态。
3月26日22:52:42 boggan systemd [1]:mariadb.service:失败,结果为“超时”`

第一systemd行有点“好吧”。我知道它超时了。第二systemd,后mysqld线是一个有点神秘,因为它确实在事实上开始。依赖于数据库的应用程序(特别是OwnCloud)可以正常工作……MariaDB的运行随时都在变化。

建议使用另一个问题time /etc/init.d/mysql start来确定需要多长时间。我反复运行以确认时间-每次在90年代左右都需要几秒钟。

其他研究使我检查了文件权限,这很好。此外,它确实可以临时启动。我已经发挥了自己的最佳能力(在Linux方面,这无疑是有限的),并没有表现出任何进步。

因此,问题是…… 我如何获得MariaDB服务以保持运转?

另外,在写完这个问题后,我离开了机器,开始运行。一周后我回到了它(我之间没有碰过它)。使用完全相同的命令sudo /etc/init.d/mysql start成功。mysql守护进程启动并运行;它返回了一份[ ok ]报告。为了实验的缘故,我重新启动了,回到了我开始的地方。

如果很重要,则输出journalctl -xe为:

Apr 02 23:51:44 boggan systemd [1]:已停止提前读取所需的文件。
-主题:unitusdahead.service单元已关闭
-定义依据:systemd
-支持:http://lists.freedesktop.org/mailman/listinfo/systemd-devel
- 
-单位Uradadahead.service已关闭。
Apr 02 23:51:55 boggan mysqld [2645]:2016-04-02 23:51:55 140386161068800 [Note] InnoDB:Online DDL:Start
Apr 02 23:51:55 boggan mysqld [2645]:2016-04-02 23:51:55 140386161068800 [Note] InnoDB:在线DDL:开始读取表的聚集索引并创建临时文件
Apr 02 23:51:55 boggan mysqld [2645]:2016-04-02 23:51:55 140386161068800 [Note] InnoDB:在线DDL:读取表的聚集索引并创建临时文件结束
Apr 02 23:51:55 boggan mysqld [2645]:2016-04-02 23:51:55 140386161068800 [Note] InnoDB:在线DDL:已完成
Apr 02 23:51:55 boggan mysqld [2645]:2016-04-02 23:51:55 140386161068800 [Note] InnoDB:在线DDL:已完成
4月2日23:52:06 boggan dbus [713]:[系统]无法激活服务'org.bluez':超时
Apr 02 23:52:37 boggan systemd [1]:mariadb.service:启动操作超时。终止。
Apr 02 23:52:37 boggan mysqld [2645]:2016-04-02 23:52:37 140386097400576 [注意] / usr / sbin / mysqld:正常关闭
4月2日23:52:37 boggan内核:审核:类型= 1400审核(1459655557.935:31):apparmor =“ DENIED” operation =“ sendmsg” profile =“ / usr / sbin / mysqld” name =“ / run / systemd /通知“ pid = 2645 comm =” mysqld“ request_mask =” w“否认_mask =” w“ fsuid = 122 ouid = 0
4月2日23:52:37沼泽审计[2645]:AVC apparmor =“ DENIED” operation =“ sendmsg” profile =“ / usr / sbin / mysqld” name =“ / run / systemd / notify” pid = 2645 comm =“ mysqld“ required_mask =” w“被拒绝_mask =” w“ fsuid = 122 ouid = 0
Apr 02 23:52:37 boggan mysqld [2645]:2016-04-02 23:52:37 140386097400576 [Note]事件计划程序:清除队列。0场
Apr 02 23:52:37 boggan mysqld [2645]:2016-04-02 23:52:37 140385225500416 [注意] InnoDB:FTS优化线程退出。
Apr 02 23:52:37 boggan mysqld [2645]:2016-04-02 23:52:37 140386097400576 [Note] InnoDB:正在启动关机...
Apr 02 23:52:39 boggan mysqld [2645]:2016-04-02 23:52:39 140386097400576 [Note] InnoDB:关闭已完成;日志序列号3360838
Apr 02 23:52:39 boggan mysqld [2645]:2016-04-02 23:52:39 140386097400576 [注意] / usr / sbin / mysqld:关闭完成
4月2日23:52:39 boggan内核:审核:类型= 1400审核(1459655559.419:32):apparmor =“ DENIED” operation =“ sendmsg” profile =“ / usr / sbin / mysqld” name =“ / run / systemd /通知“ pid = 2877 comm =” mysqld“ request_mask =” w“否认_mask =” w“ fsuid = 122 ouid = 0
4月2日23:52:39沼泽审核[2877]:AVC apparmor =“ DENIED” operation =“ sendmsg” profile =“ / usr / sbin / mysqld” name =“ / run / systemd / notify” pid = 2877 comm =“ mysqld“ required_mask =” w“被拒绝_mask =” w“ fsuid = 122 ouid = 0
4月2日23:52:39沼泽审核[2645]:AVC apparmor =“ DENIED” operation =“ sendmsg” profile =“ / usr / sbin / mysqld” name =“ / run / systemd / notify” pid = 2645 comm =“ mysqld“ required_mask =” w“被拒绝_mask =” w“ fsuid = 122 ouid = 0
4月2日23:52:39 boggan内核:审核:类型= 1400审核(1459655559.419:33):apparmor =“ DENIED” operation =“ sendmsg” profile =“ / usr / sbin / mysqld” name =“ / run / systemd /通知“ pid = 2645 comm =” mysqld“ request_mask =” w“否认_mask =” w“ fsuid = 122 ouid = 0
Apr 02 23:52:39 boggan systemd [1]:无法启动MariaDB数据库服务器。
-主题:单位mariadb.service失败
-定义依据:systemd
-支持:http://lists.freedesktop.org/mailman/listinfo/systemd-devel
- 
-单位mariadb.service失败。
- 
-结果失败。
Apr 02 23:52:39 boggan systemd [1]:mariadb.service:装置进入失败状态。
Apr 02 23:52:39 boggan systemd [1]:mariadb.service:失败,结果为“超时”。

2
journalctl -xe输出被截断,您可以更新吗?请仔细查看apparmor="DENIED"消息(如果在您的操作系统上激活了apparmor),因为这可能是mariadb启动期间的问题。
tlo

@tlo我要...它将只需要等到今天晚上。我无法从自己所在的位置访问计算机。毕竟,当我坐在它旁边时,我无法使其正常运行,所以为什么还要麻烦地对其进行设置以进行远程访问。我也一定会研究一下apparmor。如果已激活,则默认情况下已激活。我没有更改系统安装的任何内容,只是添加了LAMP内容。
TJL

@tlo更新了输出,并在描述中添加了一些皱纹。我要不去敲它,而是走一两个小时,然后看看会发生什么……
TJL 2016年

1
@tlo谢谢您的帮助。凶手是罪魁祸首。
TJL

Answers:


28

从mysql升级到mariadb后,我遇到了完全相同的问题。奇怪的是,服务mariadb启动在超时时失败(在系统启动或手动启动时),而服务mysql启动成功。

TJL给出的解释是正确的,但更正对我没有用。

$ sudo aa-complain /usr/sbin/mysqld
Setting /usr/sbin/mysqld to complain mode.

ERROR: /etc/apparmor.d/usr.sbin.mysqld contains no profile

所以我禁用了配置文件(使用a-disable似乎等同于plutocrat的解决方案)

$ sudo aa-disable /usr/sbin/mysqld
Disabling /usr/sbin/mysqld.

我也禁用了mysqld-akonadi和mysqld-digikam。

重新加载Apparmor 还不够,因此我必须重新启动,并且mariadb可以很好地启动。


确认无法找到一种无需重新启动即可正常工作的方法。
Meetai.com

这个答案对我在Kubuntu 18.04.2 LTS上有用。complain并且... apparmor reload回答TJL)确实是不够的。
Marten Koetsier

25

凶手是罪魁祸首。尽管内容/etc/apparmor.d/usr.sbin.mysqld只不过是评论,并声称它在那里,以使apparmor不会在MariaDB上感到窒息,但这正是正在发生的事情。

Oracle博客上的AppArmor和MySQL提供了我所需要的信息,以了解发生了什么。

sudo aa-status向您显示保镖正在做什么;实际具有强制执行的政策,而不是仅仅抱怨的内容。

sudo apt-get install apparmor-utils 添加了一些使apparmor配置文件更易于处理的命令,例如...

sudo aa-complain /usr/sbin/mysqld将个人资料从“强制”转为投诉。(aa-enforce转回去。)

完成后,sudo service apparmor reload重新启动apparmor,然后瞧……就sudo /etc/init.d/mysql start可以了,服务器保持启动状态。


1
伙计们 确实有效。我有点慌张,因为这影响了我们的生产服务器,使它停机了几个小时。我和您一样都不是专家,我在网上搜索了/var/log/mysql/error.log文件中的各种错误。谢谢你的帮助!
Muqito

1
我也是。我从Ubuntu 14.04升级到16.04,并失去了运行MySQL的能力。现在可以了!非常感谢您详细介绍此:D。我一直在找几个星期!
Sawtaytoes

不太适合我,但是感谢的提示apparmor-utils。三年后我得到了ERROR: /etc/apparmor.d/usr.sbin.mysqld contains no profile
YetiCGN

14

我必须完全禁用apparmor中的mysql。一个AA抱怨不会为我做任何事情。所以...

ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/

然后重启


谢谢!这是解决我的问题的唯一方法!我还从mysql升级到了mariadb
Thomas Gatt

这对我也很有效,非常感谢
Eman

3

一个简单的解决方案是删除所有未知的AppArmor配置文件:

aa-remove-unknown
Removing '/snap/core/6350/usr/lib/snapd/snap-confine'
Removing '/usr/sbin/mysqld'

有用!


实际上,这是我需要做的事情,所以谢谢。ERROR: /etc/apparmor.d/usr.sbin.mysqld contains no profile鉴于文件仅包含注释,因此上面接受的答案将完全正确。也许在更新版本的AppArmor中,他们将其设置为在2016
。– YetiCGN

这是正确的答案(至少在2019年如此)。发生的情况是,在卸载MySql后,/usr/sbin/mysqld仍然将AppArmor配置文件加载到内核中。运行aa-remove-unknown(或重新启动)可以解决此问题。
zwets
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.