更改 MySQL 启动超时(尽管 mysql 已正确启动,但报告 [失败])

更改 MySQL 启动超时(尽管 mysql 已正确启动,但报告 [失败])

我已经创建了一个脚本来清理InnoDB存储引擎。一切工作正常,除了创建ib_logfile0ib_logfile1文件时innodb_log_file_size设置为1GB需要一段时间,这会导致/etc/init.d/mysql超时并报告失败,尽管在后台MySQL最终正常启动。

启动 mysql

$ /etc/init.d/mysql start
* Starting MariaDB database server mysqld  [fail] 

同时在日志中

$ tail -f /var/log/mysql.err
120426 11:19:55  InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 1024 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200 300 400 500 600 700 800 900 1000
120426 11:20:07  InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 1024 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200 300 400 500 600 700 800 900 1000
[...]
120426 11:20:24 [Note] /usr/sbin/mysqld: ready for connections.
# Version: '5.5.23-MariaDB-mariadb1~oneiric-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution

我正在寻找一种方法来防止启动脚本超时。当我查看时/etc/init.d/mysql,我可以看到${MYSQLD_STARTUP_TIMEOUT}变量,但不知道它设置在哪里。我也一直在寻找文档寻找这样的选项,但却找不到它。

Q1:我可以将自定义启动超时作为参数指定/etc/init.d/mysql吗?
Q2:我可以修改配置中的哪个选项来更改服务器启动超时?

答案1

我知道这是一个老问题,但我还是发帖以防其他人正在寻找更好/不同的答案。我遇到过类似的问题,但发生在安装升级时。我们的启动需要很长时间,因为它是 Galera 集群的一部分,需要复制它在停机期间遗漏的内容。

开始运行:

MYSQLD_STARTUP_TIMEOUT=900 /etc/init.d/mysql start

或者在具有 的系统上service,例如 Ubuntu:

sudo MYSQLD_STARTUP_TIMEOUT=900 service mysql start

就我的情况来说,升级请致电:

sudo MYSQLD_STARTUP_TIMEOUT=900 apt-get dist-upgrade

答案2

您可以在启动时使用以下选项:

# 900 is the default, 0 won't wait at all
--service-startup-timeout=900

在您的初始化脚本或 my.cnf 中它看起来像:

service_startup_timeout=900

更多文档位于此处 http://dev.mysql.com/doc/refman/5.5/en/mysql-server.html

要对启动脚本进行计时以查看其是否采用新的超时值,请结合使用 Linux 的 time 命令

# time /etc/init.d/mysql start

将报告的执行时间与超时值进行比较,看看当您更改超时时它是否会改变,如果没有,那么该选项要么没有按预期工作(也许 MariaDB 不支持它)要么在配置中声明不正确。

答案3

在现代发行版中,systemd 用于启动服务。如果您尝试过MYSQLD_STARTUP_TIMEOUT但没有成功,那么您可能正在使用这个。该/etc/init.d/mysql脚本不再使用,因此MYSQLD_STARTUP_TIMEOUT无效。

您需要找到您的mariadb.service文件。在我们的例子中,它不包含超时,因此使用了 MariaDB 默认值。只需添加:

TimeoutStartSec = 0

在该[Service]部分中,它永远不会超时。

创建包含此内容的自己的配置文件是一个好主意,这样它就不会被以后的重新安装覆盖。

在 Ubuntu 18.04 上,你将在以下位置找到此文件

/lib/systemd/system/mariadb.service

将您自己的文件放入

/etc/systemd/system/mariadb.service.d

systemctl daemon-reload记住在某处添加超时后运行(并可能检查/var/log/syslog重新加载是否成功)

相关内容