Не вдається підключитися до локального сервера MySQL через сокет '/var/lib/mysql/mysql.sock' (2)


255

Під час підключення до mysql я отримую таку помилку:

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

Чи є рішення для цієї помилки? Що може бути причиною цього?


Я відповів на це тут, перевірте посилання нижче: stackoverflow.com/a/35577309/4773290
Pratik Patil

Відповіді:


222

Ви підключаєтесь до "localhost" чи "127.0.0.1"? Я помітив, що при підключенні до "localhost" використовується роз'єм розетки, але при підключенні до "127.0.0.1" використовується роз'єм TCP / IP. Ви можете спробувати використати "127.0.0.1", якщо роз'єм сокета не ввімкнено / не працює.


27
У цьому випадку ви, ймовірно, повинні перевірити, чи дійсно ваш сервер MYSQL працює.
Ян Тома

3
Ви також можете примусити використовувати сокет з параметром socket (-S з / usr / bin / mysql) і примусити TCP / IP, надавши порт (-P з / usr / bin / mysql.)
Kaoru

Використання повноцінного мережевого імені, окрім localhost, працювало для мене. Просто переконайтеся, що він оголошений у файлі "хостів" на стороні клієнта.
Фаб’єн Хаддаді

2
Примітка користувачам cygwin: якщо клієнт cygwin mysql намагається підключитися до локального сервера mysql WAMP, наприклад, використовуйте -h <ім'я хоста, крім localhost>. Не намагайтеся створити файл mysql.sock і оголошуйте його в будь-якому файлі my.cnf, він не працюватиме.
Фаб'єн Хаддаді

Неправильне ім’я хоста зробило мені таку саму помилку. Переглядаючи /etc/hostsфайл у моєму контейнері докера, показав мені ім'я хоста MySql mysql. Використання цього ж імені хоста в моїй конфігурації підключення вирішило проблему.
Стефан

188

Переконайтеся, що ваша служба mysql працює

service mysqld start

Потім спробуйте одну з наступних дій:

(якщо ви не встановили пароль для mysql)

mysql -u root

якщо ви вже встановили пароль

mysql -u root -p

5
про новіші випуски debian: service mariadb startтому що mariadb.org/debian-9-released-mariadb-mysql-variant
Захра

2
Дайте цьому хлопцеві медаль.
Сірай Алам

Це була відповідь для мене. Оскільки я використовую mariadb, рішення було виконати наступне: "sudo systemctl start mariadb". Після цього все було добре.
mohsen

Подаруйте @Zahra медаль
Ахмед C

28

Якщо ваш файл my.cnf (як правило, у папці тощо) правильно налаштовано

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

ви можете перевірити, чи виконується mysql, виконавши таку команду:

mysqladmin -u root -p status

спробуйте змінити свій дозвіл на папку mysql. Якщо ви працюєте локально, ви можете спробувати:

sudo chmod -R 777 /var/lib/mysql/

що вирішило це для мене


Це працює і для мене, але після того, як я перейду до останньої версії, тоді з’явиться ця проблема, чи можу я знати, чому це відбувається?
Бен

sudo chmod -R 777 / var / lib / mysql / Пропрацював для мене проблему, яку я мав при запуску контейнера
docker

23

Сервер MySQL не працює, або це не місце розташування його сокетного файлу (перевірте my.cnf).


У мене була проблема, описана вище, і це була проблема. Дякую.
oshirowanen

3
Де це було б для встановлення Homebrew?
pal4life

19

Швидше за все mysql.sock, не існує в Росії /var/lib/mysql/.

Якщо ви знайдете той самий файл в іншому місці, тоді позначте його:

Наприклад: у мене це є /data/mysql_datadir/mysql.sock

Переключити користувача на mysql та виконати, як зазначено нижче:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

Це вирішило мою проблему


перейменування mysql.sock на щось інше, потім перезапуск mysqld ("перезавантаження служби mysqld"), потім перейменування чогось іншого назад на mysql.sock працювало для мене. Незначна варіація щодо цієї відповіді, тож дякую.
Нечіткий аналіз

Ця відповідь може допомогти знайти mysql.sockфайл
Nobita

15

Якщо ви перебуваєте на останній RHEL, вам може знадобитися запустити mariadb (mysql db з відкритим кодом) замість mysql db:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

Тоді ви зможете отримати доступ до mysql звичайним способом:

mysql -u root -p

FYI також працює для CentOS 8.1. Після установки mariadb-serverта mariadbне забудьте запустити, mysql_secure_installationщоб очистити деякі небезпечні параметри за замовчуванням.
Діо Пхунг

13

У моєму випадку я перемістив файл сокета в інше місце всередині /etc/my.cnf від /var/lib/mysql/mysql.sockдо/tmp/mysql.sock

Навіть після перезапуску служби mysqld я все одно бачу повідомлення про помилку при спробі підключення. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Проблема полягає в тому, як налаштований клієнт. Запущена діагностика фактично покаже правильний шлях розетки. напрps aux | grep mysqld

Працює:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

Не працює:

mysql -uroot -p
mysql -uroot -p -hlocalhost

Ви можете вирішити цю проблему, додавши ту саму лінію сокета в [client]розділ всередині mysql config.


13

Просто відредагуйте /etc/my.cnf Додати наступні рядки доmy.cnf

[mysqld]

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

[client]

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

Перезапустіть mysql та підключіться знову

mysql -u користувача -p база даних паролів -h хост;


Єдина правильна відповідь. Цікаво, чому у неї недостатньо голосів.
CentAu

11

Перевірте, чи працює ваша служба mysqld чи ні, якщо її не запустити, запустіть службу.

Якщо ваша проблема не вирішена, знайдіть /etc/my.cnfі змініть наступні зміни, де ви бачите рядок, що починається з socket. Створіть резервну копію цього файлу перед цим оновленням.

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

Перейти

socket=/opt/lampp/var/mysql/mysql.sock -u root

1
Привіт Секар, я ввів "find / -name my.cnf", і я отримав дві локації. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. Отже, який з них використовувати .. Я задав питання тут .. stackoverflow.com/questions/32437796 / ...
Нана Partykar

7

MariaDB, розроблена спільнотою MySQL, стала спільною реалізацією MySQL у багатьох дистрибутивах.

Отже, спочатку слід почати,

$ sudo systemctl start mariadb

Якщо це не вдалося, спробуйте,

$ sudo systemctl start mysqld

Потім для запуску mysql,

$ mysql -u root -p

На сьогоднішній день у Fedora пакет називається mariadb І в Ubuntu він називається mariadb-server.

Тому вам, можливо, доведеться встановити його, якщо його ще не встановлено у вашій системі.


7

Переконайтеся, що у вас залишилось достатньо місця /var. Якщо демон Mysql не в змозі написати додаткову інформацію на диск, сервер mysql не запуститься, і це призведе до помилкиCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Подумайте про використання

expire_logs_days = 10
max_binlog_size = 100M

Це допоможе вам зменшити використання диска.


Дякую, я запускаю mysql на віртуальній скрипті Oracle, і коли я зробив дамп свого bd, у мене закінчилося місце, і я не міг запустити сервер mysql, коли я видалив файл дампа, я зміг перезапустити сервер mysql.
JayCee

1
Це вирішило це для мене. У мене було встановлено дуже велике значення innodb_buffer_pool_size для виробничих середовищ, і це призвело до краху mysql на моїй віртуальній машині.
Бенджамін Бріцзі

1
Я мав цю проблему при використанні phabricator і рішення повинно було змінитися innodb_buffer_pool_sizeв my.cnf. Визначення такої малої вартості, як innodb_buffer_pool_size = 50Mхороший тест для відмови від цієї гіпотези;)
Yercalamarino

Це була неясна проблема, перевіряли все, крім місця на диску. Звільнив простір від / var, він повернувся!
Nadjib Mami



4

Переконайтеся, що ви запустили сервер:

mysql.server start

Потім підключіться з користувачем root:

mysql -uroot

3

Якщо ваш mysql раніше працював і раптово зупинився, просто "перезавантажте" сервер.

З цією проблемою стикалися в моєму CentOS VPS .->

Постійно отримував

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

Перепробував усі методи, нарешті перезапустивши сервер, виправили проблеми ->

shutdown -r now

Сподіваюся, це допомагає !!



3

якщо ви змінюєте файли в / var / lib / mysql [наприклад, скопіюйте або замініть це], ви повинні встановити власника файлів на mysql, це так важливо, якщо перезапуск mariadb.service був помилковим

chown -R mysql: mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *


2

Спочатку введіть "сервіс mysqld start" та увійдіть


що ви хочете сказати? будь ласка, прочитайте faq, перш ніж задавати питання тут
Freak

На це питання успішно відповіли три роки тому. Цю точну відповідь було дано більш повно в минулому році.
Кайнарвон

2

Будь ласка, переконайтесь, що ви встановили MySQL-сервер правильно, я зустрічався з цією помилкою багато разів, і я думаю, що налагодження з сокета складно, я маю на увазі, що може бути легше перевстановити його.

Якщо ви використовуєте CentOS 7, ось правильний спосіб його встановлення:

Перш за все, додайте джерело спільноти mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

Потім ви можете встановити його yum install mysql-community-server

Почніть його з systemctl: systemctl start mysqld


1

Моя проблема полягала в тому, що я успішно встановив mysql і він працював чудово.

Але одного дня сталася та сама помилка.

Не вдається підключитися до локального сервера MySQL через сокет '/var/lib/mysql/mysql.sock' (2)

І жодного файлу mysql.sock не існувало.

Це забруднення вирішило мою проблему, і mysql знову запустився:

Увійдіть як корінь:

sudo su -

Виконати:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

Тест як корінь:

mysql -u root -p

mysql має бути запущений.

Я сподіваюся, що це може допомогти і комусь іншому.


1

Зауважте, що, хоча mysql читає інформацію про розташування сокетфайлу з файлу my.cnf, програма mysql_secure_installation, здається, не робить це правильно часом.

Отже, якщо ви схожі на мене і перетасуєте речі під час встановлення, ви можете потрапити в ситуацію, коли ви зможете підключитися до бази даних за допомогою mysql просто чудово, але річ неможливо захистити (не використовуючи цей скрипт у будь-якому випадку).

Щоб виправити це, пропозиція від sreddy працює добре: зробіть софтпосилання, звідки сценарій очікував би сокета до того, де він є насправді. Приклад:

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

(Я використовую / tmp / як місце за замовчуванням для розеток)


1

На мене це спрацювало з такими змінами

Який би шлях для socket був згаданий у [mysqld] і той самий у [client] у my.cnf та перезапустіть mysql

[mysqld] socket = / var / lib / mysql / mysql.sock

[client] socket = / var / lib / mysql / mysql.sock


1

Один із способів відтворення цієї помилки: Якщо ви мали намір підключитися до іноземного сервера, але замість цього підключитись до неіснуючого локального:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

Тому вам потрібно вказати хост так:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $

1

Це може бути дурним пропозицією, але переконайтеся, що на 100% впевненість, що ваш БД все ще розміщений у localhost. Наприклад, якщо мережевий адміністратор обрав (або змінив) хостинг Amazon DB, вам знадобиться саме це ім'я хоста!


Я використовую хостинг-провайдера 1and1 і отримав цю помилку після ssh-ing для хоста. Виправлення полягало в тому, щоб просто вказати ім'я хоста "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520"
грабувати

1

У моєму випадку я імпортував нову базу даних, і після цього знову не зміг підключитися. Нарешті я зрозумів, що це космічна проблема.

Таким чином, ви можете видалити останню базу даних і розширити ваш жорсткий диск, або що я зробив, відновив знімок моєї віртуальної машини.

Про всяк випадок, якщо хтось вважає це корисним


0

зіткнувшись з цією проблемою під час спроби підключити mysql у клієнті SSH, виявив, що потрібно додати шлях до сокета до команди, яка корисна при перемиканні між сокетами.

> mysql -u user -p --socket=/path/to/mysql5143.sock

0

Це проблема, якщо у вас не вистачає місця на диску. Рішення - звільнити деякий простір від жорсткого диска.

Будь ласка, прочитайте докладніше, щоб отримати пояснення:

Якщо ви працюєте з MySQL в LINUX, перевірте вільний простір жорсткого диска за допомогою командного диска безкоштовно:

 df 

якщо ви отримуєте щось подібне:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

Тоді це проблема і тепер у вас є рішення!

Оскільки mysql.sock хоче бути створений у папці mysql, яка майже завжди знаходиться під кореневою папкою, не може досягти цього через відсутність місця.

Якщо ви періодично даєте команду ls під каталогом mysql (у openSUSE 11.1 знаходиться в / var / lib / mysql), ви отримаєте щось на зразок:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

Файл mysql.sock з’являється та зникає часто (потрібно спробувати виділити ls, щоб потрапити на екземпляр із файлом mysql.sock у папці).

Це викликано недостатньою кількістю дискового простору.

Я сподіваюся, що я допоможу деяким людям !!!! Дякую!



0

Спробуйте спочатку 2, 3 рішення. Помилка is style popup & Якщо ви не можете знайти/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

Перевірте місце в / var /

df

Якщо каталог заповнений, видаліть кілька непотрібних файлів / каталогів

rm /var/cache/*

Можливо, ваше питання зараз буде відсортовано.


0

Якщо ви знаходитесь в оболонці sf.net , спробуйте:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

Змініть {LETTER} та {GROUP ID}, як показано у вашій базі даних MySQL профілю адміністратора проекту.

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