Mariadb на Raspbian: Не удаётся подключиться к локальному MySQL серверу через сокет.

Вопрос или проблема

Я настраиваю “чистый” образ для своего домашнего 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", это может быть вызвано неправильными настройками сокетов или другими конфигурационными аспектами. Давайте разберем вашу ситуацию и предложим конкретные решения для устранения данной проблемы.

Шаги по решению проблемы

  1. Проверка конфигурации файлов:
    Вы уже изменили файл /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
  2. Перезапуск сервера:
    После внесения всех изменений в конфигурацию, не забудьте перезапустить службу MariaDB для применения новых настроек:

    sudo systemctl restart mariadb
  3. Проверка состояния службы:
    Убедитесь, что служба MariaDB запущена и работает без ошибок:

    sudo systemctl status mariadb
  4. Логи системы:
    Если проблема не решилась, стоит взглянуть в журналы, чтобы выявить возможные ошибки или предупреждения:

    journalctl -u mariadb
  5. Проверка прав доступа:
    Убедитесь, что директория /mnt/RaspberryData/mysql и файлы в ней имеют соответствующие права доступа, чтобы служба MariaDB могла их использовать. Вы можете использовать следующую команду для изменения прав:

    sudo chown -R mysql:mysql /mnt/RaspberryData/mysql
  6. Обновление и установка пакетов:
    Убедитесь, что все пакеты обновлены, и попробуйте выполнить установку зависимостей:

    sudo apt-get update
    sudo apt-get upgrade

    Возможно, какие-то зависимости не были корректно установлены.

Общие рекомендации

  • Использовать резервные копии: Перед внесением изменений в конфигурационные файлы всегда полезно делать резервные копии, например, переместив старую конфигурацию в файл с суффиксом .old.

  • Документация: Ознакомьтесь с официальной документацией MariaDB и Raspbian. В них часто можно найти дополнительные рекомендации по настройке и управлению MariaDB.

  • Тестирование изменений: После внесения каждого изменения производите перезапуск сервера и тестируйте подключение, чтобы понять, что конкретно влияет на вашу проблему.

Заключение

Устранение проблемы подключения к локальному серверу MySQL через сокет на Raspbian требует тщательной проверки конфигурации и понимания взаимодействия между различными файлами настройки. Основное внимание следует уделить путям к сокетам и правам доступа к директориям. Следуя вышеизложенным рекомендациям, вы сможете успешно настроить MariaDB и избежать подобных ошибок в будущем.

Оцените материал
Добавить комментарий

Капча загружается...