Вопрос или проблема
Я настраиваю “чистый” образ для своего домашнего Raspberry Pi с последним Raspbian, и сталкиваюсь с небольшой проблемой при установке базы данных mariadb.
На данный момент шаги, которые я предпринял, следующие:
sudo apt-get install -y mariadb-server
sudo nano /etc/mysql/my.cnf
Добавьте следующие строки в my.cnf:
[mysqld]
datadir=/mnt/RaspberryData/mysql
socket=/mnt/RaspberryData/mysql/mysql.sock
[client]
port=3306
socket=/mnt/RaspberryData/mysql/mysql.sock
Путь /mnt/RaspberryData/mysql
содержит информацию о базе данных из моей предыдущей установки, которая была настроена через жесткую ссылку. Это может быть, а может и не быть, проблемой.
Затем выполните:
sudo sytemctl start mariadb
journalctl -u mariadb
И вот когда у меня возникает проблема:
Jun 22 19:18:33 raspberrypi systemd[1]: Starting MariaDB 10.3.22 database server...
Jun 22 19:18:34 raspberrypi mysqld[2623]: 2020-06-22 19:18:34 0 [Note] /usr/sbin/mysqld (mysqld 10.3.22-MariaDB-0+deb10u1) starting as process 2623 ...
Jun 22 19:18:35 raspberrypi systemd[1]: Started MariaDB 10.3.22 database server.
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: Looking for 'mysql' as: /usr/bin/mysql
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: Version check failed. Got the following error when calling the 'mysql' command line client
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Jun 22 19:18:35 raspberrypi /etc/mysql/debian-start[2662]: FATAL ERROR: Upgrade failed
Как вы можете видеть, есть какой-то процесс обновления, который пытается подключиться через сокет, расположенный в /var/run/mysqld/mysqld.sock
, но этот путь пуст (только файл mysqld.pid
).
Я предполагаю, что руководства по переносу данных из одного места в другое пропустили какой-то процесс или что-то в этом роде, так как я действительно могу зайти в базу данных и выполнять запросы. Итак, что я здесь упускаю?
Хорошо, я нашел то, что осталось в моей конфигурации.
Имейте в виду, что это может быть немного чрезмерно (читайте: изменение большего количества файлов, чем должно), но пока кто-то более мудрый не придет, чтобы научить меня, я буду с этим счастлив:
Итак, давайте начнем с чтения файла my.cnf
:
# Конфигурационный файл MariaDB
#
# Инструменты MariaDB/MySQL читают конфигурационные файлы в следующем порядке:
# 1. "/etc/mysql/mariadb.cnf" (этот файл) для установки глобальных значений по умолчанию,
# 2. "/etc/mysql/conf.d/*.cnf" для установки глобальных параметров.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" для установки параметров только для MariaDB.
# 4. "~/.my.cnf" для установки пользовательских параметров.
Моя проблема заключалась в том, что был процесс обновления, который пытался использовать сокет, определенный где-то. Очевидно, “где-то” означало (надеюсь) “в конфигурационном файле”, поэтому я углубился в эти файлы:
Открыв sudo nano
в файлах из списка (особенно в тех, что находятся под /etc/mysql/mariadb.conf.d/*.cnf
), я обнаружил несколько записей для сокета, которые сохраняли исходное значение в папке /run/. Я изменил его на новую папку “на всякий случай”. Оказалось, что в одном из файлов была комментарий, что я должен не забыть обновить debian.cnf, если вы измените сокет
. Спасибо, мистер строитель базы данных, потому что вы в основном дали мне настоящий ответ, так как debian.cnf
, хотя над ним есть огромный комментарий “НЕ ТРОГАЙ”, имеет этот раздел ниже:
[mysql_upgrade]
host = localhost
user = root
password =
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
Что, похоже, и было причиной сбоя.
Итак, коротко: пройдитесь по всем файлам, перечисленным в my.cnf
, и измените значение сокета на всякий случай. Также debian.cnf
. И если вы чувствуете себя авантюрно, измените только debian.cnf
и, пожалуйста, скажите мне, что произошло.
У меня огромное количество всего, что нужно установить теперь, когда у меня работает база данных.
У меня было то же самое сообщение об ошибке после обновления с Raspberry Stretch на Buster.
/var/run/mysqld/mysqld.sock
не пуст (ls -all
), но вы не можете настроить данные внутри.
Я посмотрел на все файлы (sudo nano
), и один файл был ответом на мою проблему! К счастью, старая конфигурация (/etc/mysql/mariadb.conf.d/50-server.cnf.old
) была сохранена!
- Сохраните новый файл
50-server.cnf
под новым именем на случай, если что-то пойдет не так, например:50-server_very_old
- Используйте
sudo nano
, чтобы открыть50-server.cnf.old
и уберитеold
, затем сохраните, чтобы сделать его новой версией50-server.cnf
. - Перезагрузите систему, и все будет работать как прежде!
Ответ или решение
Проблема подключения к локальному серверу MySQL через сокет MariaDB на Raspbian
Когда вы устанавливаете MariaDB на Raspbian и сталкиваетесь с ошибкой "Can’t connect to local MySQL server through socket", это может быть вызвано неправильными настройками сокетов или другими конфигурационными аспектами. Давайте разберем вашу ситуацию и предложим конкретные решения для устранения данной проблемы.
Шаги по решению проблемы
-
Проверка конфигурации файлов:
Вы уже изменили файл/etc/mysql/my.cnf
, добавив строки для изменения директории данных и пути к сокету. Однако, нужно обратить внимание на несколько дополнительных конфигурационных файлов, которые могут переопределять ваши настройки.- Откройте файлы конфигурации в
/etc/mysql/mariadb.conf.d/
и убедитесь, что в них нет других определений каталога с сокетом. Например, в файле50-server.cnf
должен быть установлен правильный путь к вашему сокету:[mysqld] socket=/mnt/RaspberryData/mysql/mysql.sock
- Кроме того, в
debian.cnf
также проверьте наличие секции, связанной с сокетами:[mysql_upgrade] socket=/mnt/RaspberryData/mysql/mysql.sock
- Откройте файлы конфигурации в
-
Перезапуск сервера:
После внесения всех изменений в конфигурацию, не забудьте перезапустить службу MariaDB для применения новых настроек:sudo systemctl restart mariadb
-
Проверка состояния службы:
Убедитесь, что служба MariaDB запущена и работает без ошибок:sudo systemctl status mariadb
-
Логи системы:
Если проблема не решилась, стоит взглянуть в журналы, чтобы выявить возможные ошибки или предупреждения:journalctl -u mariadb
-
Проверка прав доступа:
Убедитесь, что директория/mnt/RaspberryData/mysql
и файлы в ней имеют соответствующие права доступа, чтобы служба MariaDB могла их использовать. Вы можете использовать следующую команду для изменения прав:sudo chown -R mysql:mysql /mnt/RaspberryData/mysql
-
Обновление и установка пакетов:
Убедитесь, что все пакеты обновлены, и попробуйте выполнить установку зависимостей:sudo apt-get update sudo apt-get upgrade
Возможно, какие-то зависимости не были корректно установлены.
Общие рекомендации
-
Использовать резервные копии: Перед внесением изменений в конфигурационные файлы всегда полезно делать резервные копии, например, переместив старую конфигурацию в файл с суффиксом
.old
. -
Документация: Ознакомьтесь с официальной документацией MariaDB и Raspbian. В них часто можно найти дополнительные рекомендации по настройке и управлению MariaDB.
-
Тестирование изменений: После внесения каждого изменения производите перезапуск сервера и тестируйте подключение, чтобы понять, что конкретно влияет на вашу проблему.
Заключение
Устранение проблемы подключения к локальному серверу MySQL через сокет на Raspbian требует тщательной проверки конфигурации и понимания взаимодействия между различными файлами настройки. Основное внимание следует уделить путям к сокетам и правам доступа к директориям. Следуя вышеизложенным рекомендациям, вы сможете успешно настроить MariaDB и избежать подобных ошибок в будущем.