ошибка: «Не удается подключиться к локальному серверу MySQL через сокет» /var/run/mysqld/mysqld.sock '(2)' - Отсутствует /var/run/mysqld/mysqld.sock

322

Моя проблема началась с того, что я больше не мог войти в систему как пользователь root при установке MySQL. Я пытался запустить mysql без включенных паролей ... но всякий раз, когда я запускал команду

# mysqld_safe --skip-grant-tables &

Я никогда не получу подсказку обратно. Я пытался следовать этим инструкциям, чтобы восстановить пароль .

Экран просто выглядит так:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

и я не получаю приглашение начать вводить команды SQL для сброса пароля.

Когда я убиваю его нажатием CTRL+ C, я получаю следующее сообщение:

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

Если я повторю команду и оставлю ее достаточно долго, я получу следующую серию сообщений:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

Но тогда, если я попытаюсь войти в систему как root, выполнив:

# mysql -u root

Я получаю следующее сообщение об ошибке:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Я проверил, и /var/run/mysqld/mysqld.sockфайл не существует. Папка делает, но не файл.

Кроме того, я не знаю, помогает ли это или нет, но я побежал, find / -name mysqldи он придумал:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

Я новичок в Linux и MySQL, поэтому я не знаю, нормально это или нет. Но я включаю эту информацию на случай, если она поможет.

Я наконец решил удалить и переустановить MySQL.

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

После повторной установки всех пакетов в том же порядке, что и выше, во время установки phpmyadmin я получил ту же ошибку:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Поэтому я попытался снова удалить / переустановить. На этот раз, после удаления пакетов, я также вручную переименовал все файлы и каталоги mysql mysql.badв соответствующие им места.

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

Затем я попытался переустановить mysql-serverи mysql-clientснова. Но я заметил, что это не запрашивает у меня пароль. Разве это не должно спрашивать пароль администратора?

точка
источник
У меня та же проблема. Я решил это только сейчас. stackoverflow.com/questions/18150858/…
Роберт
решается просто перезагрузкой сервера, затем перезапускаем службу mysql
bowpunya
@ Анто Это не дубликат. Этот /var/run/mysqld/mysqld.sockпропал. Проблема, на которую вы ссылались, содержит этот файл.
Мотоцикл
Ни один из ответов здесь или где-либо еще, которые я не мог найти, решил мою проблему. Поскольку это был новый проект, я перешел на PostgreSQL, и он просто работает! :-)
Джеймс Брэдбери

Ответы:

195

Чтобы найти все файлы сокетов в вашей системе, выполните:

sudo find / -type s

В моей системе Mysql server был открыт сокет по адресу /var/lib/mysql/mysql.sock

Как только вы найдете место открытия сокета, добавьте или отредактируйте строку в файле /etc/my.cnf с указанием пути к файлу сокета:

socket=/var/lib/mysql/mysql.sock

Иногда сценарий запуска системы, запускающий исполняемый файл командной строки, указывает флаг --socket=path . Этот флаг может переопределить расположение my.cnf, и это приведет к тому, что сокет не будет найден там, где файл my.cnf указывает, что он должен быть. Затем, когда вы попытаетесь запустить клиент командной строки mysql, он прочитает my.cnf, чтобы найти сокет, но не найдет его, поскольку он отличается от места, где его создал сервер. Так что, если вам не важно, где находится сокет, просто измените my.cnf для соответствия.

Затем остановите процесс mysqld. Как вы это сделаете, будет зависеть от системы.

Если вы являетесь суперпользователем в системе linux, попробуйте выполнить одно из следующих действий, если вы не знаете, какой метод использует ваша установка Mysql:

  • service mysqld stop
  • /etc/init.d/mysqld stop
  • mysqladmin -u root -p shutdown
  • Некоторые системы не настроены так, чтобы иметь элегантный способ остановить mysql (или по какой-то причине mysql не отвечает), и вы можете принудительно завершить mysql одним из следующих способов:
    • Один шаг: pkill -9 mysqld
    • Двухступенчатый (наименее предпочтительный):
      • Найдите идентификатор процесса MySQL либо pgrep mysqlилиps aux | grep mysql | grep -v grep
      • Предполагая, что идентификатор процесса 4969заканчиваетсяkill -9 4969

После того, как вы это сделаете, вы можете поискать pid-файл /var/run/mysqld/и удалить его.

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

chmod 777 /var/run/mysqld/mysqld.sock

Если это решит проблему, вы можете настроить разрешения и владельца сокета в соответствии с вашими настройками безопасности.

Кроме того, каталог, в котором находится сокет, должен быть доступен пользователю, выполняющему процесс mysqld.

луч
источник
15
Пожалуйста, не рекомендуется использовать kill -9; Есть несколько способов, которые следует попробовать, прежде чем он достигнет этого.
Игнасио Васкес-Абрамс
@ не запускайте это в корне файла 'find. имя mysqld.sock. Я видел файл сокета в других местах, кроме / var / run. Как только вы найдете его, вам может понадобиться отредактировать файл my.cnf, указав, где он находится.
Рэй
@ray, я пытался запустить оригинальную команду другим способом (я нашел пост, посвященный Ubuntu, на другом сайте ..). Вот команды, которые я выполнил: «sudo service mysql stop» и «sudo mysqld --skip-grant-tables». После выполнения второй команды я получаю следующую ошибку: «InnoDB: невозможно заблокировать ./ibdata1, ошибка: 11». Я не могу найти этот файл ./ibdata1 ... InnoDB: Убедитесь, что у вас еще нет другого процесса mysqld
точка
2
@ не запускайте ps -aux | grep mysqldи посмотрите, работают ли какие-либо другие процессы mysql
Рэй
@ray. Я порву волосы, чувак. я решил сдуть MySQL и повторить попытку ... обратите внимание на мой обновленный пост.
точка
251

Попробуйте эту команду,

sudo service mysql start
Джо Ченг
источник
+1 my.cnf указывал на правильные каталоги, от службы mysql умер
wruckie
Я попробовал принятый ответ, но не смог найти mysql.sock, у меня это сработало. Спасибо
Джованна Афонсо
1
Я должен был использоватьsudo service mysqld start
Гэвин Миллер
10
sudo apt-get install mysql-serverесли он еще не установлен :)
aimme
17
Если вы столкнулись с этой проблемой, непременно запустите эту простую команду FIRST перед тестированием других компонентов, это займет всего секунду, а если сервер просто не работает и работает нормально после запуска, это просто означает, что Это автозапуск, который будет актуальной проблемой для решения.
Lizardx
137

Эта ошибка возникает из-за множественных установок mysql. Запустите команду:

ps -A|grep mysql

Убейте процесс, используя:

sudo pkill mysql

и затем выполните команду:

ps -A|grep mysqld

Также убейте этот процесс, запустив:

sudo pkill mysqld

Теперь вы полностью настроены, просто запустите следующие команды:

service mysql restart
mysql -u root -p

Иметь очень хорошо работающий MySQL снова

Хаммад Раза
источник
Привет, ребята, я бегал по сети, пытаясь это исправить. Моя проблема была в том, что я пытался настроить докер. Я хотел, чтобы он использовал каталог данных mysql, который ранее использовался mysql вне docker ... эта команда ps была лучшей!
Майкл
3
После почти 4+ часов работы в Интернете это наконец-то сработало. Должен быть главный ответ: +1:
Шивам Гаур
4
Не удалось выполнить задание для mysql.service, поскольку процесс управления завершился с кодом ошибки. Смотрите "systemctl status mysql.service" и "journalctl -xe" для подробностей.
Джон Джо
1
Не удалось выполнить задание для mysql.service, поскольку процесс управления завершился с кодом ошибки. Смотрите "systemctl status mysql.service" и "journalctl -xe" для подробностей.
Адиб Арои
Тнкс, вы экономите мое время.
Александур Атанасов
41

Решение намного проще.

  1. Во-первых, вы должны найти (в терминале с «sudo find / -type s»), где находится ваш mysql.sockфайл. В моем случае это было в/opt/lampp/var/mysql/mysql.sock
  2. Запустите Терминал и выполните команду sudo Nautilus
    Это запускает ваш файловый менеджер с привилегиями суперпользователя
  3. От Наутилуса перейдите туда, где находится ваш mysql.sockфайл
  4. Щелкните правой кнопкой мыши файл и выберите « Создать ссылку».
  5. Переименуйте файл ссылки, mysqld.sockзатем щелкните правой кнопкой мыши файл и вырежьте его.
  6. Перейдите /var/runи создайте папку с именем mysqldи введите ее
  7. Теперь щелкните правой кнопкой мыши и вставьте файл ссылки.
  8. Вуаля! Теперь у вас будет mysqld.sockфайл /var/run/mysqld/mysqld.sock:)
Йоан Стеф
источник
4
Как вы находите свой файл mysql.sock? Я попытался найти / -name 'mysql.sock', но ничего не возвращает.
Мэтью Лок
2
@MatthewLock Прежде всего, убедитесь, что mysql запущен (с помощью «ps aux | grep mysql»), иначе mysql.sock не появится. Во-вторых, используйте «sudo find / -type s», который дает вам все сокеты в вашей системе, чтобы найти mysql.sock
narengi
35
Что если выходные данные sudo find / -type sне содержат ничего mysql.sock?
Джефф
1
Оно работает. Но я понятия не имею, почему эти разработчики никогда не делали эту работу в последние годы?
И Цзян
2
Если трудно найти, где находится mysql.sock через «find / -type s» - попробуйте использовать команду «mysql_config --socket». Вы можете установить его с помощью sudo apt-get install libmysqlclient-dev
alexche8
26

Просто нужно запустить MySQL Service после установки:

Для Ubuntu:

sudo service mysql start;

Для CentOS или RHEL:

sudo service mysqld start;
Пратик Патил
источник
Проверьте сначала это sudo systemctl status mysql.serviceи sudo systemctl start mysql.service. Это работает для меня
Byeongin Yoon
16

В Ubuntu с MySQL 5.6 и 5.7 существует ошибка, var/run/mysqld/которая исчезает, когда служба MySQL останавливается или перезагружается. Это предотвращает запуск MySQL вообще. Нашел этот обходной путь, который не идеален, но, по крайней мере, он запускается после остановки / перезагрузки:

mkdir /var/run/mysqld/
chown mysqld /var/run/mysqld/
motorbaby
источник
спасибо - исправил это для меня, мне пришлось переделывать каталог и сбрасывать владельца при каждом перезапуске службы mysql - не удалось найти сообщение об ошибке где-либо официально, иначе я бы разместил ссылку здесь :)
djoe
1
Не пробовал это, но, возможно, это поможет вам: создайте новый файл /etc/tmpfiles.d/mysql.conf: # systemd tmpfile settings for mysql # See tmpfiles.d(5) for details и затем, d /var/run/mysqld 0755 mysql mysql - после перезагрузки, mysql должен запуститься нормально. Это из bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1435823 , комментарий 3. Если у вас возникла эта проблема с MySQL 5.7, прокомментируйте Launchpad. Чем больше пользователей решат проблему, тем больше внимания она получит.
Motorbaby
Работал для меня ... должен был использовать mysql в качестве имени пользователя, а не mysqld, хотя
Эван Парсонс
Добавление строки /etc/tmpfiles.d/mysql.confв комментарий к motorbaby устранило эту проблему для меня. На ОС Centos 7 и использую mysql Ver 15.1 Distrib 10.3.11-MariaDB,.
turrican_34
Это исправило проблему для меня.
Шиката
14

Хорошо, просто скопируйте и вставьте эти коды: это должно быть сделано в терминале, на сервере, когда ваша база данных mysql не установлена ​​должным образом, и когда вы получаете эту ошибку: «Не удается подключиться к локальному серверу MySQL через сокет» / var / run / mysqld / mysqld.sock '(2)'.

Стоп MySql

sudo /etc/init.d/mysqld stop

Перезапустите или запустите

sudo /etc/init.d/mysqld restart or sudo /etc/init.d/mysqld start

Сделайте такую ​​ссылку и дайте ее системе

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

Запустите безопасную установку, которая управляет всем процессом, необходимым для настройки mysql.

/usr/bin/mysql_secure_installation
coolcool1994
источник
я получаю ту же Can't connectошибку, когда я пытаюсь запустить выше команды.
cjmling
Просто то, что я обнаружил, для тех, кто работает с Ubuntu. Если вы запустите mysqld с помощью /etc/init.d/mysqld start, вы все равно столкнетесь с этой проблемой. Вместо этого используйте службу mysql start, и все будет хорошо. Разозлило, но я в конце разобрался.
Адам Шорт
11

Я столкнулся с той же ошибкой и обнаружил, что это произошло из-за обновления пакетов, поэтому после перезапуска системы я устранил ошибку.

Я думаю, что из-за обновления библиотек / пакетов sql произошла эта ошибка, поэтому попробуйте это, если вы делаете обновление :)

Таймур Чангайз
источник
1
Я сделал это после переустановки (или обновления), и теперь это работает. Нет больше сообщения сокета. Спасибо!
призрак
8

Есть много причин для этой проблемы, но иногда просто перезапустите сервер MySQL, это решит проблему.

sudo service mysql restart
Leopathu
источник
7

Использование XAMPP в Ubuntu:

  1. Создайте папку с именем туздЫ внутри / вар / запустить каталог. Вы можете сделать это с помощью команды sudo mkdir /var/run/mysqld.

  2. Создайте символическую ссылку на файл mysql.sock, который создается сервером XAMPP при его запуске. Вы можете использовать команду sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock.

Примечание: mysql.sock файл создается при запуске сервера и удаляется , когда сервер остановлен, так что иногда связь вы создали может оказаться сломанным , но он должен работать до тех пор , как вы запустили сервер , используя либо sudo /opt/lampp/lampp startили какой - либо другой средства.

  1. Запустите сервер, если он еще не запущен, и попробуйте снова запустить вашу программу.

Удачи! Надеюсь, на этот раз тебе это сойдет с рук.

Роберт Одох
источник
@MohsinKhan зайдите в localhost / phpmyadmin и импортируйте базу данных оттуда
Robert Odoch
6

Ответ шага загрузки пользователя работал для меня. Иногда необходимо отредактировать файл в /etc/mysql/my.cnfстроке добавления к клиенту

[client]
password = your_mysql_root_password
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock
user3002884
источник
Это дает мне:mysql: unknown variable 'Host=127.0.0.1'
Splaktar
@Splaktar: есть опечатка. Hostдолжны быть в нижнем регистре, hostи это будет работать. Также это решение сработало для меня.
Мохаммед Фейсал
Блестящий - это работает для меня и моей среды докера - мне нужно было только настроить ip, который в моем случае - ip 172.17.xx контейнера Docker MySQL
InforMedic
6

* Ошибка: «Не удается подключиться к локальному серверу MySQL через сокет« /var/run/mysqld/mysqld.sock '(2)'

решения

наконец, удалите и переустановите MySQL. **

  • sudo apt-get удалить MySQL-сервер
  • sudo apt-get удалить mysql-client
  • sudo apt-get удалить mysql-common
  • sudo apt-get удалить phpmyadmin

затем установите снова

  • sudo apt-get установить mysql-server-5.6

После этой операции будет использовано 164 МБ дополнительного дискового пространства.

  • Вы хотите продолжить? [Y / n] Y нажмите YES для полной установки

...... .......

  • Наконец вы получите эти строки ....

    Настройка libhtml-template-perl (2.95-1) ...

    Настройка mysql-common-5.6 (5.6.16-1 ~ exp1) ... Обработка триггеров для libc-bin (2.19-0ubuntu6) Обработка триггеров для ureadahead (0.100.0-16) ...

  • А потом

    root @ ubuntu1404: ~ # mysql -u root -p (для каждого первого пароля, который вы должны использовать)

  • Введите пароль:

  • Примечание: введенный пароль должен совпадать с паролем времени установки mysql (например, .root, system, admin, rahul и т. Д.)

    Затем введите

  • USE rahul_db (имя базы данных);

Спасибо.**

Буддешвар Ойхар
источник
пожалуйста, улучшите качество ответа
пн.
Это сработало для меня из-за нескольких установленных версий MySQL. также удалить mysql-server-5.6/5.5, mysql-client-5.6/5.5. Спасибо!
Луук Скеур
получил E: Package 'mysql-server-5.6' has no installation candidate, его нет в Ubuntu 18.04
juliocesar
6

Убедитесь, что путь к файлу недоступного сокета совпадает с «/var/run/mysqld/mysqld.sock», в противном случае измените путь на свой. Останови mysqld

$ sudo /etc/init.d/mysqld stop

Если процесс все еще запущен;

$ sudo pkill -9 mysqld

Удалите каталог mysql, где собирается создать сокет. Для меня это не позволило удалить, поэтому мне пришлось принудительно удалить.

$ sudo mkdir -p /var/run/mysqld

Установите право собственности на каталог

$ sudo chown mysql:mysql /var/run/mysqld

Запустите MySQL

$ sudo /etc/init.d/mysql start

Пытаюсь подключить mysql

$ sudo mysql -u dbuser -p
Sadee
источник
Да, это тот же самый ответ, который я дал 14 февраля 1919 в 11:56 (см. Ниже)
Инго
Вы спасатель жизни.
Сахиб Хан
5

Я думаю, что ваш сервер MySQL еще не запущен. Запустите сервер, используя одну из следующих команд.

#services mysql start

или

#/etc/init.d/mysql start
Susampath
источник
5

Временное решение

Может быть, кто-то сталкивается с этой проблемой. Я использую Mysql Workbench на Ubuntu 14 и получил эту ошибку.

mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when trying to connect

Найти файл сокета, запустив sudo find / -type s, в моем случае это было/run/mysqld/mysqld.sock

Итак, я только что создал ссылку на этот файл в tmpкаталоге.

sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
Билал
источник
Как вы можете видеть, расположение файла находится в /tmpпапке, поэтому он будет точно удален. Вы можете изменить .sockместоположение файла. Смотрите @ user3002884 ответ.
Билал
Я знаю, я только что завершил ваш ответ, чтобы другие пользователи знали раньше, что решение является временным, как папка
Алекс Бурдусель
Ты спас мне жизнь :)
Машпи Рахман
4

вы можете найти mysqld.sockв , /var/run/mysqldесли вы уже установили mysql-server наsudo apt-get install mysql-server

спенсер
источник
4

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

в /etc/my.cnfдобавьте эти строки:

[client]
socket=/var/lib/mysql/mysql.sock <= this path should be also same as is[mysqld]

И перезапустите сервис с помощью: service mysql restart

это сработало для меня

Каран
источник
4

Это уже упоминалось пару раз, но это сразу сработало для меня:

перезапуск службы mysql

Джек БеНимбл
источник
Интересно, чем это отличается от использования просто простой команды «mysql»
luminol
3

В моем случае два процесса mysqld были запущены .. убил необязательные процессы с помощью pkill -9 mysqld

amindri
источник
Мне нужно было добавить «sudo», чтобы убить процесс.
noti
3

Если в вашей системе много баз данных и таблиц, и если вы innodb_file_per_tableустановили в my.cnf, то на вашем сервере mysql, возможно, закончились открытые объекты / файлы (или, скорее, дескрипторы для этих объектов). Установите новое максимальное число. с участием

open-files-limit = 2048

и перезапустите MySQL. Этот подход может помочь, когда сокет вообще не создается, но на самом деле это не может быть реальной проблемой, есть основная проблема.

KNB
источник
2

У меня просто была эта проблема на Ubuntu 14.10

Повороты, которые mysql-serverбольше не были установлены (каким-то образом они были удалены), но я не мог просто установить его, потому что были некоторые сломанные пакеты и проблемы / конфликты зависимостей.

В конце концов мне пришлось переустановить MySQL

sudo apt-get remove mysql-client
sudo apt-get install mysql-server
роса
источник
2

Мое решение;

Ubuntu 18.04 (WSL)

/etc/mysql/my.cnf

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

/etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306

Я изменил порт. Это сработало для меня. Вы можете написать другой порт. Пример 3355

omfaer
источник
2

Зачем получать эту ошибку

Я получил новые обновления библиотек mysql, поэтому я обновил свою ОС Kubuntu после этого, получив эти ошибки.


Команды, которые я пробовал и как я это исправил.

MySql-сервер работает правильно, но когда я пытался подключить его, давая

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'.

Я проверил /var/run/mysqld/mysqld.sock'.этот каталог. Мои файлы не существовали.

Я также попробовал эти команды для подключения, но у меня не получилось.

 mysql -h 127.0.0.1 -P 3306 -u root -p

 sudo service mysql start

Потратив около 2 часов, я нашел решение

sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade -f

После этого все исправлено для меня.

Мухаммед Файзан Фарид
источник
Это помогло мне решить проблему. Я не понимаю, как это связано с проблемой
носка, которая
1

Изменение hostв 127.0.0.1работал для меня.

Отредактируйте файл /etc/mysql/my.cnfи добавьте указанную ниже строку в раздел:client

[client]
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

После того, как вы сделали с этим. Выполните следующую команду.

sudo service mysql start
Дулит Де Коста
источник
Это мой друг, помог мне :)
Bhargav Nanekalva
@NBhargav Я так счастлив, что ты мог решить твою проблему .. Приятель, приятель… 😇😇
Дулит Коста
1

Я также проверил бы конфигурацию mysql. Я столкнулся с этой проблемой на своем собственном сервере, но я был слишком поспешен и неправильно настроил innodb_buffer_pool_size для своей машины.

innodb_buffer_pool_size = 4096M

Обычно он работает нормально до 2048 года, но, думаю, у меня нет памяти, необходимой для поддержки 4 концертов.

Я полагаю, что это также может произойти с другими настройками конфигурации MySQL.

Greg
источник
1

У меня была похожая проблема на CentOS VPS. Если MySQL не запускается или продолжает падать сразу после запуска, попробуйте выполнить следующие действия:

1) Найдите файл my.cnf (мой был расположен в /etc/my.cnf) и добавьте строку:

innodb_force_recovery = X

замена X на число от 1 до 6, начиная с 1, а затем увеличивается, если MySQL не запускается. Значение 4, 5 или 6 может удалить ваши данные, поэтому будьте осторожны и прочтите http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html .

2) Перезапустите службу MySQL. Только SELECT будет работать, и это нормально на данный момент.

3) Сбрасывайте все ваши базы данных / схемы с помощью mysqldump одну за другой, не сжимайте дампы, потому что вам все равно придется распаковывать их позже.

4) Переместите (или удалите!) Только каталоги bd внутри / var / lib / mysql, сохранив отдельные файлы в корне.

5) Остановите MySQL и затем раскомментируйте строку, добавленную в 1). Запустите MySQL.

6) Восстановить все бд в 3).

Удачи!

Эйтор
источник
1

Попробуйте следующее в терминале:

sudo mysql

Как только это позволит вам, вы можете создать нового пользователя и предоставить привилегии, которые вы хотите для конкретной базы данных, к которой им нужен доступ.

Mysql 5.7 изменил некоторые вещи и по умолчанию использует плагин auth_socket (в отличие от mysql_native_password) для root, чтобы защитить аккаунт от взлома. Вы можете переопределить это, установив поле плагина для root, но если у вас нет веских причин, вам, вероятно, не стоит обойти защиту. Особенно, когда sudo mysqlэто проще, чем в mysql -u root -pлюбом случае.

Я узнал эту информацию - из всех мест - с сайта помощи Raspberry Pi . Сработал как шарм после того, как Lubuntu 18.04 выбил меня из колеи на пару часов.

JohanTux
источник
1

Сначала создайте dir / var / run / mysqld

с командой:

mkdir -p /var/run/mysqld

затем добавить правки в каталог

chown mysql:mysql /var/run/mysqld

после этой попытки

mysql -u root
Инго
источник
1

У меня была точно такая же проблема. Поработав в течение часа, я нашел способ исправить это без переустановки mysql-common, mysql-client, mysql-server.

Прежде всего, перейдите в "/ var / run / mysqld". Вы обнаружите, что mysql.sock не существует. Просто удалите весь каталог mysqld, создайте его заново и предоставьте ему необходимые привилегии.

# rm -rf /var/run/mysqld && mkdir /var/run/mysqld && chown mysql /var/run/mysqld/

Теперь убейте процесс mysql целиком. Вполне возможно, что он покажет вам, «ожидая очистки страницы» при запуске команды «/etc/init.d/mysql status», даже после закрытия службы.

Чтобы полностью закрыть сервис, используйте

# pkill -9 mysqld

После завершения процесса попробуйте запустить его снова, используя

# /etc/init.d/mysql start

И вы увидите, что это работает хорошо! И также не будет никакой проблемы в том, чтобы остановить это также.

xscorp7
источник