Вопрос или проблема
Он случайно сломался вчера (больше не запускается), и я не знаю, как это исправить.
Когда я выполняю:
sudo service mysql start
Выдает эту ошибку:
Job for mysql.service failed because the control process exited with error
code. See "systemctl status mysql.service" and "journalctl -xe" for details.
Вывод systemctl status mysql.service
:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)<br>
Active: inactive (dead) (Result: exit-code) since Mon 2016-09-05 15:10:31 CEST; 43s ago<br>
Process: 6515 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=1/FAILURE)<br>
Sep 05 15:10:31 vps310084 systemd[1]: mysql.service: Service hold-off time over, scheduling restart.<br>
Sep 05 15:10:31 vps310084 systemd[1]: Stopped MySQL Community Server.<br>
Sep 05 15:10:31 vps310084 systemd[1]: mysql.service: Start request repeated too quickly.<br>
Sep 05 15:10:31 vps310084 systemd[1]: Failed to start MySQL Community Server.<br>
Sep 05 15:10:33 vps310084 systemd[1]: mysql.service: Start request repeated too quickly.<br>
Sep 05 15:10:33 vps310084 systemd[1]: Failed to start MySQL Community Server.
Вывод journalctl -xe
:
Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel**
--
-- Unit mysql.service has failed.
--
-- The result is failed.
Sep 05 15:14:56 vps310084 systemd[1]: mysql.service: Unit entered failed state.
Sep 05 15:14:56 vps310084 systemd[1]: mysql.service: Failed with result 'exit-code'.
Sep 05 15:14:56 vps310084 systemd[1]: mysql.service: Service hold-off time over, scheduling restart.
Sep 05 15:14:56 vps310084 systemd[1]: Stopped MySQL Community Server.
-- Subject: Unit mysql.service has finished shutting down<br>
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mysql.service has finished shutting down.
Sep 05 15:14:56 vps310084 systemd[1]: mysql.service: Start request repeated too quickly.
Sep 05 15:14:56 vps310084 systemd[1]: Failed to start MySQL Community Server.
-- Subject: Unit mysql.service has failed
-- Defined-By: systemd
--
-- Unit mysql.service has failed.
--
-- The result is failed.
Скрипт запуска systemctl для Mysql не может выполнить эту команду
/usr/share/mysql/mysql-systemd-start pre
это не делает ничего, кроме проверки вашей среды, используя следующий код shell:
sanity () {
if [ ! -r /etc/mysql/my.cnf ]; then
echo "MySQL configuration not found at /etc/mysql/my.cnf. Please create one."
exit 1
fi
if [ ! -d /var/lib/mysql ] && [ ! -L /var/lib/mysql ]; then
echo "MySQL data dir not found at /var/lib/mysql. Please create one."
exit 1
fi
if [ ! -d /var/lib/mysql/mysql ] && [ ! -L /var/lib/mysql/mysql ]; then
echo "MySQL system database not found. Please run mysql_install_db tool."
exit 1
fi
}
если вы запустите его напрямую через sudo, вы получите одно из этих сообщений об ошибке, пожалуйста, следуйте его рекомендациям и попробуйте еще раз, пока не заработает.
Это не случайная поломка, это отсутствие файлов, проверьте bash_history пользователя root и любого пользователя, который может sudo.
Ответ или решение
Ваше описание проблемы с MySQL на Ubuntu 16.04 свидетельствует о том, что служба MySQL не может нормально запуститься из-за определенных неполадок в конфигурации. Давайте разберем это более подробно и предоставим рекомендации по устранению проблемы.
Теория
Когда вы видите ошибку "Job for mysql.service failed because the control process exited with error code", это означает, что система не может корректно запустить службу MySQL. Для более детального анализа причины сбоя полезно выполнить команды systemctl status mysql.service
и journalctl -xe
. Как следует из вывода вашей системы, проблемы связаны с выполнением предварительного скрипта /usr/share/mysql/mysql-systemd-start pre
, который проверяет наличие необходимых конфигурационных файлов и каталогов.
Пример
В вашем случае, скрипт пытается выполнить несколько проверок:
-
Конфигурационный файл MySQL:
/etc/mysql/my.cnf
. Если он отсутствует, то MySQL не сможет прочесть настройки и, соответственно, запуститься. -
Каталог данных MySQL:
/var/lib/mysql
. Этот каталог должен существовать, так как в нем хранятся данные базы данных. Если это директория отсутствует, MySQL не сможет получить доступ к вашим данным. -
Системная база данных MySQL:
/var/lib/mysql/mysql
. Эта база данных необходима для работы MySQL, так как она содержит системные таблицы, необходимые для управления базой данных.
Применение
Теперь, когда мы прояснили, что именно проверяет скрипт, давайте разберем шаги, которые вы можете предпринять для устранения проблемы:
Шаг 1: Проверка конфигурационного файла
Откройте терминал и проверьте наличие файла /etc/mysql/my.cnf
. Используйте команду:
sudo ls -l /etc/mysql/my.cnf
Если файл отсутствует, вы можете попробовать восстановить его из резервной копии или создать новый. Пример базовой конфигурации может выглядеть следующим образом:
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
Шаг 2: Проверка каталога данных MySQL
Убедитесь, что каталог /var/lib/mysql
существует и имеет правильные права доступа:
sudo ls -ld /var/lib/mysql
Если каталога нет, возможно, его следует создать и установить соответствующие права:
sudo mkdir /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql
Шаг 3: Проверка системной базы данных
Проверьте наличие системной базы данных:
sudo ls -ld /var/lib/mysql/mysql
Если она отсутствует, попробуйте инициализировать базу данных с помощью mysql_install_db
:
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
Шаг 4: Проверка истории изменений
Как было отмечено, причиной данной ситуации могут быть изменения, внесенные пользователем, имеющим административные права. Проверьте историю команд:
sudo cat /root/.bash_history
Также проверьте истории всех пользователей, которые могут использовать sudo
.
Шаг 5: Перезапуск и логирование
После выполнения вышеуказанных шагов, попробуйте перезапустить MySQL:
sudo systemctl start mysql
Если проблема не устранена, еще раз проверьте логи с помощью:
sudo journalctl -xe
Заключение
Таким образом, в большинстве случаев решение проблем с MySQL на Ubuntu 16.04 заключается в обеспечении соответствия необходимым условиям (наличие конфигурационных файлов, правильные права доступа и наличие системной базы данных). Ваш успех будет зависеть от тщательного анализа и восполнения отсутствующих компонентов. Рекомендуется также поддерживать резервные копии важных конфигурационных файлов и баз данных для быстрого восстановления в случае сбоя.