ОШИБКА 2002 (HY000): не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2)


441

Я установил LAMP на Ubuntu 12.04 LTS (Precise Pangolin), а затем установил пароль root на phpMyAdmin . Я забыл пароль, и теперь я не могу войти. Когда я пытаюсь изменить пароль через терминал, я получаю:

ОШИБКА 2002 (HY000): не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2)

Как я могу это исправить? Я не могу открыть LAMP, удалить его или переустановить.


Вероятно, переустановить это проще: stackoverflow.com/a/31984482/763744
Zernel

Сбросьте пароль, остановив MySQL и запустив его в безопасном режиме, пропустив --grant таблицы
davejal

введите это в своем терминале "sudo apt-get install mysql-server"
Хамфри,

Запустите или перезапустите службу MySQL и проверьте. sudo /etc/init.d/mysql start или sudo /etc/init.d/mysql restart
Джитендра Патель

systemctl начало mariadb.service
Thewebus

Ответы:


254

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

Эта ошибка означает, что файл /var/run/mysqld/mysqld.sockне существует, если вы не установили mysql-server, то файл не будет существовать. Так что в этом случае установите его с

sudo apt-get install mysql-server

Но если mysql-serverон уже установлен и работает, вам необходимо проверить файлы конфигурации.

Конфигурационные файлы:

/etc/my.cnf
/etc/mysql/my.cnf
/var/lib/mysql/my.cnf

В /etc/my.cnfконфигурации файла сокета может быть, /tmp/mysql.sockи в /etc/mysql/my.cnfконфигурации файла сокета может быть /var/run/mysqld/mysqld.sock. Итак, удалите или переименуйте /etc/mysql/my.cnf, позвольте MySQL использовать /etc/my.cnf, тогда проблема может быть решена.


У вас может быть запущен демон mysql и установлено ядро ​​mysql-server, но вам нужно установить mysql-сервер, который является двоичными файлами И настройкой базы данных системы!
Седрик

99
sudo apt-get install mysql-serverустановить MySQL на Ubuntu
Towry

9
Если бы мне пришлось технически объяснять, я бы сказал: 1) Если вы используете «mysql -u <имя_пользователя> -h <MySQL_Server_address> -p», вы фактически запускаете клиент mysql для доступа к серверу mysql. Если у вас не установлен сервер mysql по адресу / IP-адресу, который вы указали с помощью '-h', появится сообщение об ошибке выше. Это потому, что он не может подключиться к серверу MySQL через сокет mysql.sock. 2) Если Mysql-сервер уже установлен, он должен быть запущен. Если это не так, вы увидите ту же ошибку. Так что запустите его на указанном вами сервере.
Майур Нагекар

1
Это также может произойти, если вы попытаетесь изменить каталог, в котором хранится база данных, но указать неверный каталог в файле конфигурации (например, опечатку). Вместо того, чтобы сообщать вам, что каталог опечаток не существует, он скажет вам, что у вас нет разрешения на доступ к нему.
Майкл

4
В качестве первого шага я бы порекомендовал попытку перезапустить процесс сервера (см. Отличия сервера от клиента). Попробуйте sudo /etc/init.d/mysql перезапустить. Обычно переустановка не требуется. Я бы порекомендовал вам сначала проверить файлы журналов. Не только лог-файл mysql, но также / var / log / syslog, так как у вас мог произойти сбой сервера, из-за которого mysql сломался как побочный эффект.
Рейн

212

Попробуй это:

mysql -h 127.0.0.1 -P 3306 -u root -p <database>

Также (чтобы увидеть, работает ли он):

telnet 127.0.0.1 3306 

Вероятно, это просто неправильная конфигурация my.cnfфайла /etc/somewhere(в зависимости от дистрибутива Linux ).


1
Я получаю ту же ошибку. И я проверил, и связывание по умолчанию в main и my.cnf уже установлено на 127.0.0.1. Однако использование вашей команды выше позволило мне подключиться. Придется продолжать охоту, чтобы понять, почему просто выполнение «mysql» приводит к ошибке.
cchiera

1
Я получаю telnet: Невозможно подключиться к удаленному хосту: соединение отклонено в результате команды telnet. Однако Apache все еще работает, так как я могу открыть localhost
Риши Дуа

@cchiera Вы знаете, у меня не было этой ошибки раньше. Но когда я захотел подключиться к моей базе данных через приложение для iOS с помощью ssh tunnel, я получил эту ошибку 2013 года. Чтобы решить эту проблему, я должен был отредактировать /etc/my.cnfи прокомментировать #bind-address = 127.0.0.1 Ссылка 1 Ссылка 2 . Тогда я мог бы подключиться. После этого я понял, что теперь получаю эту ошибку 2002 года, которая привела меня к этому ответу, и теперь он снова работает. Конечно, я согласен с вами, получив объяснение, почему просто печатать mysqlбез -hошибок выдает ошибку.
Патрос

Примечание: mysql -h localhostне работает. Обязательно используйте mysql -h 127.0.0.1как указано в ответе.
Вадасамбар

Как я могу решить эту проблему, если я войду в систему с помощью команды в этом ответе?
Карлос А. Хименес Холмквист

128

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


Сбросить пароль

Выполните следующие действия (может быть полезно, если вы действительно забыли свой пароль и можете попробовать его в любое время, даже если в данный момент вы не находитесь в ситуации):

  1. Стоп mysql

    sudo /etc/init.d/mysql stop

    Или для других версий дистрибутива:

    sudo /etc/init.d/mysqld stop
  2. Запустите MySQL в безопасном режиме

    sudo mysqld_safe --skip-grant-tables &
  3. Войдите в MySQL, используя root

    mysql -uroot
  4. Выберите базу данных MySQL для использования

    use mysql;
  5. Сбросить пароль

    -- MySQL version < 5.7
    update user set password=PASSWORD("mynewpassword") where User='root';
    
    -- MySQL 5.7, mysql.user table "password" field -> "authentication_string"
    
    update user set authentication_string=password('mynewpassword') where user='root';
    
  6. Сбросить привилегии

    flush privileges;
  7. Перезагрузите сервер

    quit
  8. Остановите и запустите сервер снова

    Ubuntu и Debian:

    sudo /etc/init.d/mysql stop
    ...
    sudo /etc/init.d/mysql start
    

    На CentOS, Fedora и RHEL:

    sudo /etc/init.d/mysqld stop
    ...
    sudo /etc/init.d/mysqld start
    
  9. Войти с новым паролем

    mysql -u root -p
  10. Введите новый пароль и наслаждайтесь вашим сервером снова, как будто ничего не случилось

Это было взято из Сброс пароля root MySQL .


Обновление пароля пользователя не работало для меня, однако, как только я вошел в монитор MySQL и, используя базу данных mysql, repair table user use_frmпомог мне решить эту проблему. - stackoverflow.com/questions/4297592/…
Крейг ван Тондер

20
В MySQL 5.7 поле пароля в поле таблицы mysql.user было удалено, теперь имя поля - «authentication_string», поэтому (5) должно бытьupdate user set authentication_string=password('mynewpassword') where user='root';
Daniel

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

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

2
Это прекрасно сработало для меня, но мне сначала пришлось реализовать это решение: stackoverflow.com/questions/42153059/…
Эндрю Фокс,

68

Я попробовал следующие шаги:

  1. Войти как super userили использоватьsudo
  2. Открыть /etc/mysql/my.cnfс помощью Gedit
  3. Найдите bind-addressи измените его значение на IP-адрес хост-компьютера сервера базы данных. Для меня это было localhostили127.0.0.1
  4. Сохраните и закройте файл.
  5. Вернитесь к терминалу и выполните sudo service mysql start

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


4
Из этого я просто запустил sudo service mysql restart и все заработало.
Оран

В моем случае ошибкой было изменение IP-адреса, поэтому я установил bind-address = localhost
Николас Ариас

@rshahriar В моем /etc/my.cnf нет ничего, что называется bind-address. Хорошая идея добавить это поле
RCBian

@SilvioDelgado Нет, если вы когда-нибудь захотите подключиться через ssh-туннелирование. Объяснение здесь
Патрос

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

41

Я исправил эту проблему, выполнив следующую команду:

mysql.server start

И если вы используете Mac и используете brew для установки mysql, просто используйте:

brew services start mysql

36

У меня была аналогичная проблема. mysql не запускается:

sudo service mysql start
start: Job failed to start

Если я отключил apparmor:

sudo aa-complain /etc/apparmor.d/*

проблема ушла. Проблема заключалась в том, что mysqld пытался получить доступ к /run/mysqld/mysqld.sock, но профиль apparmor давал разрешение только на /var/run/mysqld/mysqld.sock (/ var / run является символической ссылкой на / run, так что на самом деле это то же). Не уверен, почему mysqld не использует путь var, поскольку это то, что установлено во всех файлах конфигурации, но вы можете решить эту проблему, добавив следующее в /etc/apparmor.d/usr.sbin.mysqld

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,

Я не знал, что должен был позвонить "sudo service mysql start". В прошлый раз, когда я установил MySQL в Ubuntu, я думаю, что он автоматически запускался после установки. MariaDB на Manjaro требует, чтобы служба была явно запущена после установки.
dmiller309

32

В моем случае диск был переполнен и mysqld больше не запускался.

Попробуйте перезапустить службу MySQL.

> service mysql restart

или

> service mysql stop

> service mysql start

Если он не распознает stopкоманду, то это определенно место на диске. Вы должны выделить некоторое место в разделе mysqlили увеличить размер диска.

Проверьте место на диске с помощью

> df -h

2
То же самое случилось со мной - полный диск. Убрал немного места, перезагрузился и проблема ушла.
Даррен

2
Если это ваша проблема при выполнении: «/etc/init.d/mysqld start» сообщит вам, что ваш раздел на диске заполнен
Tickon

То же самое для меня, диск 100%. Убрал место и начал обслуживание нормально
Хьюго

28

Я решил это, убив mysqlпроцесс:

ps -ef | grep mysql
kill [the id]

И затем я снова запустил сервер с:

sudo /etc/init.d/mysql restart

Но startработает также:

sudo /etc/init.d/mysql start

Затем я вошел как admin, и я сделал.


ну, я на самом деле прерывал MySQL перед тем, как он завис. Тогда я получаю "* Пожалуйста, посмотрите на системный журнал." и «ОШИБКА 2002 (HY000): не удается подключиться к локальному серверу MySQL через сокет« /var/run/mysqld/mysqld.sock '(111) ». Наконец, я понимаю, что он пытается восстановить себя, поэтому я убиваю и перезапускаю его.
cwhsu

Существуют (редкие) ситуации, когда «запуск mysql» завершится неудачей, поэтому вам нужно использовать аргумент «restart». Если вам нужно уничтожить процесс демона, лучше использовать аргумент "stop" вместо команды kill. Однако команда killall более удобна, чем команда kill (killall mysqld).
Рейн

Убить процесс MySQL, а затем перезапустить MySQL, у меня
Вишал Шетти

21

Каким-то образом процесс сервера MySQL не создал сокет, или клиент ищет сокет в неправильном месте.

Моим первым предложением было бы проверить, работает ли сервер MySQL. Второе предложение может быть, сервер MySQL работает на другом хосте? Если так, добавьте -h <hostname>флаг к своему клиенту MySQL в терминале.

Если MySQL действительно работает и работает локально, проверьте ваш my.cnfфайл. Там должна быть строка, как

socket = /var/run/mysqld/mysqld.sock

Посмотрите, соответствует ли это местоположению сокета, которое вы упомянули в своем посте.

Из опыта я бы сказал, что наиболее вероятным сценарием является то, что ваш сервер MySQL либо вообще не работает, либо не работает на том же хосте, на котором вы запускаете клиент MySQL из терминала.


19

Я только что столкнулся с той же проблемой после перезапуска своего производственного сервера. Я использую Debian 8.1 (Jessie) на капле DigitalOcean.

Вот что я сделал, чтобы решить мою проблему:

  1. Проверьте, существует ли файл /var/run/mysqld/mysqld.sock. Если этого не произойдет, создайте его вручную, введя touch /var/run/mysqld/mysqld.sock(что я и должен был сделать).

  2. Таким образом, процесс MySQL может использовать этот файл. Сменить владельца указанного файла, введя chown mysql /var/run/mysqld/mysqld.sock.

  3. Как только «2» было сделано, перезапустите службу MySQL, введя service mysql restartили /etc/init.d/mysql restart.

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


1
Я заметил, что файла там нет, и просто перезапустил сервер mysql. Он автоматически создал файл и запустился просто отлично. Спасибо за лидерство.
Сожурн


15

Проверьте "bind-adress"параметр в my.cnf.

Еще попробуйте с командой:

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h для хоста 127.0.0.1, то есть localhost

  • -P (обратите внимание -P в верхнем регистре) для порта 3306, то есть порт по умолчанию для MySQL



11

Если вы используете Amazon EC2 , и у вас возникла эта проблема в экземпляре, то вам нужно только сделать:

sudo yum install mysql-server
sudo service mysqld restart

В Amazon EC2 не установлен сервер (установлен только клиент), поэтому в этом случае вам необходимо установить его на свой экземпляр, а затем попытаться

 mysql -u root -p

чтобы проверить, сработало ли это.


Не удалось перезапустить mysqld.service: модуль mysqld.service не найден. В Ubuntu 16.04
Ketav Chotaliya

9

Я думаю всякий раз, когда вы получаете ошибку

ОШИБКА 2002 (HY000): Не удается подключиться к локальному серверу MySQL через сокет '/var/lib/mysql/mysql.sock'

Сначала я рекомендую проверить, работает ли ваш mysqlдемон ... В большинстве случаев он не работает по умолчанию. Вы можете проверить это /etc/init.d/mysqld status.

Если он не запущен, сначала запустите его:

.../etc/init.d/mysqld start.

Бьюсь об заклад, это будет работать на 110%.


9

Вместо использования localhost:

mysql -u myuser -pmypassword -h localhost mydatabase

Используйте 127.0.0.1

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase

(также обратите внимание, что между -p и mypassword не должно быть пробела)

Наслаждаться :)


Вы также можете не включать свой пароль из командной строки для обеспечения безопасности, используя эту строку: mysql -u myuser -p -h 127.0.0.1 mydatabase MySQL спросит вас о вашем пароле и не отобразит его.
DDay

1
Это решило это для меня. Тем не менее, я до сих пор удивляюсь, почему 127.0.0.1работает, а localhostне ?!
not2savvy

9

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

apt-get remove --purge mysql\*

Затем установите его снова :

apt-get install mysql-server mysql-client

Это сработало для меня, и данные были сохранены.

Если PHP MySQL показывает ошибки, возможно, вам придется переустановить PHP MySQL :

apt-get install php5-fpm php5-mysql

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

9

Я также столкнулся с той же проблемой, это произойдет, если ваш mysql serverпо умолчанию не работает, он снова остановится через несколько секунд, поэтому вы снова запустите $ sudo service mysql start команду ( ), которую вы можете изменить, если знаете.

для этой команды использования

$ sudo service mysql start   

(введите пароль пользователя, если требуется, потому что мы используем sudo), а затем запустите

$ sudo mysql -u root -p          (put user password if required )

теперь вы получили свою базу данных


7

Если ваша установка была недавней, вы должны подтвердить, является ли ваша установка установочным SERVER ... как mysql-server-5.5 .. Может быть, вы установили только "mysql" ... это только клиент, а не сервер.


7

Если на вашем Linux-компьютере установлен XAMPP , попробуйте скопировать my.cnfфайл из /opt/lampp/etc/my.cnfв /etc/my.cnf.

Затем запустите mysql -u rootснова ... Теперь у вас должен быть правильный сокет и вы сможете запустить клиент MySQL.


7

Я тоже получил эту проблему, но я только что:

sudo service mysql restart 

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


7

Я НАШЕЛ РЕШЕНИЕ

Перед запуском команды:mysql_secure_installation

  • Шаг 1: sudo systemctl stop mariadb
  • Шаг 2: sudo systemctl start mariadb
  • Шаг 3: mysql_secure_installation

Затем он спросит пароль root, и вы можете просто нажать Enter и установить новый пароль root.


6

В моем случае порт 3306 по умолчанию использовался каким-то другим процессом, и поэтому он не запускался. После того, как я остановил другой сервис и сделал sudo service mysql start, он работал нормально. Кстати, вы можете использовать что-то вроде, sudo lsof -Pn -iTCP:3306чтобы увидеть, кто может использовать порт.


6

В моем случае это сработало, выполнив некоторые исследования и разработки:

Я могу подключиться к MySQL, используя

root-debian#mysql -h 127.0.0.1 -u root -p

Но это не работает с mysql -u root -p.

Я не нашел ни одного bind-addressв my.cnf . Поэтому я закомментировал параметр, socket=/var/lib/mysql/mysqld.sockпо my.cnfкоторому у меня возникла проблема с логином.

После перезапуска службы все прошло нормально:

root@debian:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.19 MySQL Community Server (GPL)

6

я решил эту проблему с перезапустить MySQL

/etc/init.d/mysql stop

а также

/etc/init.d/mysql start

это оно.


5

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


5

Откройте терминал и введите:

sudo apt-get purge mysql-client-core-5.6

sudo apt-get autoremove

sudo apt-get autoclean

sudo apt-get install mysql-client-core-5.5

sudo apt-get install mysql-server  

И клиент ядра базы данных MySQL, и пакеты MySQL Server будут иметь одинаковую версию 5.5. MySQL Client 5.5 и MySQL Server 5.5 являются текущими «лучшими» версиями этих пакетов в Ubuntu 14.04, как определено сопровождающими пакетов.

Если вы предпочитаете установить MySQL Client 5.6 и MySQL Server 5.6, вы также можете найти пакеты mysql-client-core-5.6 и mysql-server-5.6 в Центре программного обеспечения Ubuntu. Важно то, что номера версий клиента и сервера совпадают в любом случае.

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


5

Проверьте, есть ли у вас правильные права:

sudo chmod 755 /var/lib/mysql/mysql

У меня были такие же проблемы, и это работало на меня. После этого я смог запустить MySQL.


5

В моем случае кажется, что я действительно не смог убить процесс MySQL, когда я запускаю

sudo service mysql stop
ps -ef | grep mysql

Процесс mysql всегда был там, похоже, он блокировал файл сокета, и новый процесс mysql не смог создать его сам.

так что это помогло

cd /var/run
sudo cp mysqld/ mysqld.bc -rf
sudo chown mysql:mysql mysqld.bc/
sudo service mysql stop
sudo cp mysqld.bc/ mysqld -rf
sudo chown mysql:mysql mysqld -R
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

Теперь я могу войти в базу данных, используя

mysql -u root

Затем обновить пароль root:

UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;

PS : у меня были проблемы с обновлением root passwod, похоже, проблема с плагином "auth_socket", поэтому мне пришлось создать нового пользователя с полными привилегиями

insert into user set `Host` = "localhost", `User` = "super", `plugin` = "mysql_native_password", `authentication_string` = NULL, `password_expired` = "N", `password_lifetime` = NULL, `account_locked` = "N", `Select_priv` = "Y",
`Insert_priv` = "Y", `Update_priv` = "Y", `Delete_priv` = "Y", `Create_priv` = "Y", `Drop_priv` = "Y", `Reload_priv` = "Y", `Shutdown_priv` = "Y", `Process_priv` = "Y", `File_priv` = "Y",
`Grant_priv` = "Y",  `References_priv` = "Y", `Index_priv` = "Y", `Alter_priv` = "Y", `Show_db_priv` = "Y", `Super_priv` = "Y", `Create_tmp_table_priv` = "Y", `Lock_tables_priv` = "Y",
`Execute_priv` = "Y", `Repl_slave_priv` = "Y",  `Repl_client_priv` = "Y",  `Create_view_priv` = "Y", `Show_view_priv` = "Y", `Create_routine_priv` = "Y", `Alter_routine_priv` = "Y",
`Create_user_priv` = "Y",  `Event_priv` = "Y", `Trigger_priv` = "Y", `Create_tablespace_priv` = "Y";

Это создает пользователя «супер» без пароля, а затем вы можете подключиться с mysql -u super


спасибо за ответ, и я смог войти в MySQL, но в моих базах данных нет пользовательских таблиц.
Джон Джо

Это решение работает. Но прежде чем выполнить инструкцию sql для изменения пароля для пользователя root, вам необходимо выбрать базу данных. Выполните следующее утверждение <br> use mysql;<br> и теперь вы можете использовать егоUPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
Чарльз К.

5

На сервере Debian, Джесси, мое рабочее решение было просто сделать

service mysql restart
service mysql reload

как пользователь root

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.