ПОМИЛКА 2002 (HY000): не вдається підключитися до локального сервера MySQL через сокет '/var/run/mysqld/mysqld.sock' (2)


441

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

ПОМИЛКА 2002 (HY000): не вдається підключитися до локального сервера MySQL через сокет '/var/run/mysqld/mysqld.sock' (2)

Як я можу це виправити? Я не в змозі відкрити LAMP, видалити його або перевстановити.


Можливо Перевстановлення це простіше: stackoverflow.com/a/31984482/763744
Zernel

Скиньте пароль, зупинивши MySQL і запустивши його в безпечному режимі, пропустивши --грантові таблиці
davejal

наберіть це у своєму терміналі "sudo apt-get install mysql-server"
Хамфрі

Запустіть або перезапустіть службу mysql і перевірте. sudo /etc/init.d/mysql start або sudo /etc/init.d/mysql перезапуск
Jitendra Patel

systemctl start mariadb.service
Thewebus

Відповіді:


253

Я колись мав цю проблему і вирішив її, встановивши 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-сервера, але вам потрібно встановити mysql-сервер, який є бінарними файлами та налаштуванням бази даних системи!
Седрік

99
sudo apt-get install mysql-serverвстановити mysql на ubuntu
буксируйте

9
Якби мені довелося пояснити технічно, я б сказав 1) Якщо ви використовуєте "mysql -u <ім'я_користувача> -х <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
Я отримую ту ж помилку. І я перевірив, і прив'язка за замовчуванням і в головному, і в my.cnf вже встановлена ​​на 127.0.0.1. Однак використання вашої команди вище дозволило мені підключитися. Доведеться продовжувати полювання, щоб зрозуміти, чому просто робити "mysql" - це помилка.
cchiera

1
Я отримую telnet: Неможливо підключитися до віддаленого хоста: Підключення відмовлено в результаті команди telnet. Однак apache все ще працює, як я в змозі відкрити localhost
Rishi Dua

@cchiera Ви знаєте, раніше у мене не було цієї помилки. Але коли я хотів підключитися до свого db через додаток для iOS за допомогою тунелю ssh, я отримав цю помилку 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. Введіть новий пароль і знову насолоджуйтесь своїм сервером так, як нічого не сталося

Це було взято з Скидання пароля кореня MySQL .


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

20
У MySQL 5.7 поле з паролем у полі таблиці mysql.user було видалено, тепер назва поля - "автентифікація_string", тому (5) має бутиupdate user set authentication_string=password('mynewpassword') where user='root';
Даніель,

Чи знаєте ви про спосіб зробити цей сценарій башти? Мені здається, це потрібно кожного разу, коли я перезавантажую коробку.
vphilipnyc

Щось говорить про те, що ви хочете вирішити проблему, але насправді слід намагатися з’ясувати, чому потрібно робити це кожен раз, і це виправити. Щодо сценарію, задайте нове запитання та опублікуйте те, що ви вже пробували, можливо, деякі інші можуть допомогти
davejal

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 служби mysql, і це спрацювало.
Оран

У моєму випадку помилка була змінена IP-адресу, тому я встановив bind-address = localhost
Nicolás Arias

@rshahriar в моєму /etc/my.cnf нічого не називається bind-address, чи це гарна ідея додати поле
RCBian

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

перезапуск служби mysql працював і для мене, але все ще не впевнений, де знайти журнал помилок, щоб з’ясувати причину і спробувати не допустити її повторення ...
Maleka

41

Я вирішив цю проблему, виконавши таку команду:

mysql.server start

А якщо ви перебуваєте на Mac і використовуєте brew для встановлення mysql, просто використовуйте:

brew services start mysql

35

У мене була схожа проблема. 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 посилається на / запускається, тому це насправді так само). Не впевнений, чому 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

31

У моєму випадку так, що диск був повний, і 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, перш ніж він вийде з ладу. Тоді я отримую "* Будь ласка, подивіться на syslog." та "ПОМИЛКА 2002 (HY000): не вдається підключитися до локального сервера MySQL через сокет" /var/run/mysqld/mysqld.sock '(111) ". Нарешті, я розумію, що намагається відновити себе, тому вбиваю і перезавантажую.
cwhsu

Трапляються (рідкісні) ситуації, коли "mysql start" не вдасться, тому вам потрібно використовувати аргумент "перезапуск". Якщо вам потрібно вбити процес демон, то краще використовувати аргумент «стоп» замість команди kill. Однак команда killall зручніша, ніж команда kill (killall mysqld).
Рейн

Вбивство процесу MySQL, а потім перезапуск MySQL працювало для мене, приємно
Vishal Shetty

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

Ваш сервер mysql може не працювати. Переконайтесь, що він працює, ввівши mysql.server startтермінал.


15

Перевірте "bind-adress"параметр у my.cnf.

Ще спробуйте з командою:

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h для господаря 127.0.0.1, тобто localhost

  • -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 та мовою паролем)

Насолоджуйтесь :)


Ви також не можете включити свій пароль з командного рядка для безпеки, використовуючи цей рядок: 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

Якщо ви XAMPP на вашому комп'ютері встановлений Linux, спробуйте скопіювати 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> <br> use mysql;<br>, і тепер ви можете використовувати <br>UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
Чарль К.

5

На сервері Debian Jessie моїм робочим рішенням було просто зробити

service mysql restart
service mysql reload

як користувач root

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.