我已经创建了一个脚本来清理InnoDB
存储引擎。一切工作正常,除了创建ib_logfile0
和ib_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
重新加载是否成功)