Назад | Перейти на главную страницу

Изменение тайм-аута запуска MySQL (сообщается [ошибка], хотя mysql запущен правильно)

Я создал сценарий для уборка 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 чтобы убедиться, что перезагрузка прошла успешно)