Я создал сценарий для уборка 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: Какую опцию я могу изменить, чтобы изменить время ожидания запуска сервера в конфигурации?
Я знаю, что это старый вопрос, но я отправляю его на случай, если кто-то еще ищет лучший / другой ответ. У меня была аналогичная проблема, но при установке обновлений. Наш запуск занимает много времени, так как он является частью кластера 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
Вы можете использовать следующую опцию при запуске:
# 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 /etc/init.d/mysql start
Сравните сообщенное время выполнения со значением тайм-аута, посмотрите, изменится ли оно при изменении тайм-аута, если нет, то параметр либо не работает должным образом (возможно, MariaDB не поддерживает его), либо он неправильно объявлен в конфигурации.
В современных дистрибутивах для запуска службы используется 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
чтобы убедиться, что перезагрузка прошла успешно)