Не удается подключиться к локальному серверу MySQL через сокет '/var/mysql/mysql.sock' (38)

У меня возникла большая проблема с подключением к mysql. Когда я запускаю:

/usr/local/mysql/bin/mysql start

У меня есть следующая ошибка:

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

У меня есть mysql.sock в каталоге /var/mysql.

В /etc/my.cnf у меня есть:

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

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

и /etc/php.ini у меня есть:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock

Я перезапустил apache с помощью sudo /opt/local/apache2/bin/apachectl restart

Но у меня все еще есть ошибка.

В противном случае, я не знаю, соответствует ли это, но когда я делаю mysql_config --sockets, я получаю

--socket         [/tmp/mysql.sock]

Ответ 1

Если ваш файл my.cnf(обычно в папке /etc/mysql/ ) правильно настроен с помощью

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

вы можете проверить, работает ли mysql со следующей командой:

mysqladmin -u root -p status

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

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

который решил это для меня

Ответ 2

Вы уверены, что вы установили mysql, а также сервер mysql.

Например, чтобы установить сервер mySql, я буду использовать yum или apt для установки инструмента командной строки mysql и сервера:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server)

Включить службу MySQL:

/sbin/chkconfig mysqld on

Запустите сервер MySQL:

/sbin/service mysqld start

после этого установите пароль администратора MySQL:

mysqladmin -u root password 'new-password' (with the quotes)

Надеюсь, это поможет.

Ответ 3

Быстрое обходное решение, которое сработало для меня: попробуйте использовать локальный IP-адрес (127.0.0.1) вместо "localhost" в mysql_connect(). Это "заставляет" php подключаться через TCP/IP вместо Unix-сокета.

Ответ 4

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

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

Пробовал несколько способов и, наконец, решил это следующим образом.

sudo gksu gedit /etc/mysql/my.cnf

изменен

#bind-address       = 127.0.0.1

to

bind-address        = localhost

и перезапущен

sudo /etc/init.d/mysql restart

он работал

Ответ 5

Убедитесь, что вы используете mysqld: /etc/init.d/mysql start

Ответ 6

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

shutdown -h now

Это остановит запущенные службы перед отключением компьютера.

Основываясь на Centos, дополнительный метод для его восстановления снова при запуске этой проблемы заключается в перемещении mysql.sock:

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

service mysqld start

Перезапуск службы создает новую запись с именем mqsql.sock

Ответ 7

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

Например, на Ubuntu вы должны проверить /var/log/syslog. Поскольку в этот файл также может входить множество других вещей, вы, вероятно, захотите использовать grep для просмотра сообщений mysql и tail для просмотра только последних. Все это может выглядеть так:

grep mysql /var/log/syslog | tail -50

Не слепо вносить изменения в свою конфигурацию, потому что кто-то сказал: "Это работало для моей системы". Выясните, что на самом деле не так с вашей системой, и вы получите лучший результат намного быстрее.

Ответ 8

Другим обходным решением является редактирование /etc/my.cnf и включение узла в раздел [клиент]

 [client]
 #password       = your_password
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock

И затем перезапустите службу mysql.

Этот обходной путь был протестирован в: Версия сервера: 5.5.25a-log Распределение источников

Ответ 9

Я получил эту ошибку, когда задал задание cron для своего файла. Я изменил разрешения файла на 777, но он по-прежнему не работал у меня. Наконец, я получил решение. Может быть, это будет полезно для других.

Попробуйте выполнить эту команду:

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

Помните, что -h означает хост и -p означает порт.

Ответ 10

У меня была такая же проблема, и это было вызвано обновлением драйверов mysql при запуске сервера mysql. Я исправил его, просто перезапустив mysql и apache2:

sudo service mysql stop

sudo service mysql start

sudo service apache2 stop

sudo service apache2 start

Ответ 11

В моем случае я использовал Centos 5.5. Я обнаружил, что проблема в том, что служба mysql была остановлена ​​как-то. Поэтому я начал службу mysql с помощью команды:

 /etc/init.d/mysqld start

Итак, глупая ошибка.

Ответ 12

Если все работает отлично, и вы только начали видеть эту ошибку, прежде чем делать что-либо еще, убедитесь, что вы не находитесь на диске:

df -h

Если объем, в котором создается mysql.sock, используется на 100%, MySql не сможет его создать, и это станет причиной этой ошибки. Все, что вам нужно сделать, это удалить то, что вам не нужно, например старые файлы журналов.

Ответ 13

попробуйте с -h (host) и -P (порт):

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

Ответ 14

sudo service mysql start

Это должно служить вам просто прекрасно. Возможно, вы изменили некоторые команды, которые повлияли на конфигурации mysql.

Ответ 15

Есть много решений этой проблемы, но для моей ситуации мне просто нужно исправить DATE на машине/сервере (сервер Ubuntu 16.04).

i) Проверьте дату своего сервера и исправьте его.

ii) Запустите sudo /etc/init.d/mysql restart

Это должно начаться.

Ответ 16

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

Ответ 17

Я также обнаружил, что это проблема с разрешениями. Я сравнивал файлы MySQL с рабочей установкой (как с Debian 6), так и с изменениями прав собственности (где mydatabase - любая имеющаяся у вас база данных).

Собственность mysql:mysql:

chown mysql:mysql /var/lib/mysql
chown mysql:mysql /var/lib/mysql/ib*
chown mysql:mysql /var/lib/mysql/mydatabase
chown mysql:mysql /var/lib/mysql/mydatabase/*
chown mysql:mysql /var/lib/mysql/mysql/* 

Собственность mysql:root:

chown mysql:root /var/lib/mysql/mysql
chown mysql:root /var/run/mysqld 

Собственность mysql:adm:

chown mysql:adm /var/log/mysql
chown mysql:adm /var/log/mysql.err
chown mysql:adm /var/log/mysql.log* 

Ответ 18

вы всегда можете запустить сервер mysql, указав расположение файла mysql.sock с помощью параметра --socket, например

mysql --socket=/var/mysql/mysql.sock 

Это будет работать, даже если расположение файла сокета указано в другом месте в файле my.cnf.

Ответ 19

Если вы используете версию AVS (Amazon Web Services) Micro, то это проблема с памятью. Когда я бежал

mysql

с терминала он скажет

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

Итак, я попробовал следующее, и он просто потерпит неудачу.

service mysqld restart

После долгих поисков я обнаружил, что вам нужно создать файл подкачки для MySQL, чтобы иметь достаточно памяти. Инструкции перечислены: http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html.

Затем я смог перезапустить mysqld.

Ответ 20

Для тех, чье решение не работает, попробуйте:

cd /etc/mysql

проверить, присутствует ли my.cnf

nano my.cnf

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

bind-address = 127.0.0.1

Если нет, это может быть проблемой, просто выйдите из nano и сохраните файл.

и service mysql start

обратите внимание, что если у вас нет nano (его текстовый редактор), просто установите его с помощью apt-get install nano и один раз нажмите Ctrl + X для выхода, не забудьте сказать Y, чтобы сохранить и использовать тот же файл)

Ответ 21

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

/usr/sbin/mysqld --verbose --help 1>/dev/null

У меня появилась одна ошибка:

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ...
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled.
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296'
160816 19:24:33 [ERROR] Aborting

Простой grep -HR "innodb-online-alter-log-max-size" /etc/mysql/ показал мне, какой именно файл содержит оскорбительную строку, поэтому я удалил эту строку из файла.

Затем, проверяя мой файл /var/log/mysql/error.log, который у меня был:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 671088640 bytes!
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error.
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160816 22:46:46 [ERROR] Aborting

На основе этого вопроса принятое решение не сработает, потому что я даже не мог запустить сервер, поэтому я следил за тем, что некоторые из комментариев сказали и удалили мои файлы /var/lib/mysql/ib_logfile0 и /var/lib/mysql/ib_logfile1.

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

160816 22:52:15  InnoDB: Error: page 1415 log sequence number 82039318708
InnoDB: is in the future! Current system log sequence number 81640793100.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.

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

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql
$ mysql -u root -p < backup-all-databases.sql

Теперь все работает как ожидается.

Ответ 22

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

Ответ 23

Добавление

--protocol=tcp 

в список поддерживаемых вами графиков в вашем соединении.

Ответ 24

Это было достаточно для меня

sudo /etc/init.d/mysql restart

Ответ 25

Сегодня я столкнулся с этой проблемой. Ни один из этих ответов не дал исправления. Мне нужно было выполнить следующие команды (здесь fooobar.com/questions/24525/...) для запуска моей службы mysql:

sudo /etc/init.d/mysql stop
cd /var/lib/mysql/
ls ib_logfile*
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
... etc ...
/etc/init.d/mysql restart

Отчасти это было отмечено следующими ошибками в /var/log/mysql/error.log:

140319 11:58:21 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error.
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB
140319 11:58:21 [ERROR] Aborting

Я также видел полную ошибку на диске, но только при запуске команд без sudo. Если проверка разрешений не удалась, она сообщает полный диск (даже если ваш раздел даже не близок к полной).

Ответ 26

CentOS 7, 64 бит. Свежая установка.
В моем случае ошибка состояла в том, что у меня не было подходящего MySQL-сервера и MySQL-клиента.
Используя yum, я удалил mariadb и mysql-community edition. Я загрузил rpm для клиента и сервера из официального сайта MySQL и установил сервер и клиент.

При установке сервера мне было показано сообщение о том, что пароль для учетной записи root для MySQL хранился в файле, который я мог просматривать с помощью sudo cat /root/.mysql_secret.

Итак, после установки клиента и сервера, я проверил, работает ли MySQL (я думаю, что я перезагрузился до этого) с помощью команды sudo service mysql status, и я получил результат.

Работа MySQL (2601) [OK]

Я вошел в MySQL, используя пароль из файла .mysql_secret:
mysql -uroot -pdxM01Xfg3DXEPabpf. Обратите внимание, что dxM01Xfg3DXEPabpf - это пароль, указанный в файле .mysql_secret.

а затем введите следующую команду в приглашении mysql, чтобы изменить пароль root:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

С тех пор все отлично работало.

Ответ 27

sudo service mysqld start

Работал для меня, я использую Centos

Ответ 28

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


PythonAnywhere решил изменить имена хостов для подключения к базе данных, чтобы повысить эффективность и надежность, как подробнее здесь:

Официальное имя хоста, которое вы должны использовать для подключения к вашей учетной записи Экземпляр базы данных MySQL изменился с mysql.server на yourusername.mysql.pythonanywhere-services.com. Это обходит часть нашей инфраструктуры, которая начала показывать проблемы в последнее время недель, и он должен быть намного более эффективным и надежным, чем старый путь.

Следовательно, вам нужно будет обновить ваше имя хоста до значения, выделенного выше.

Ответ 29

У меня была эта проблема. после дня проверки, наконец, у меня есть ответ. Файл mysql.sock создается, когда MariaDB запускается и удаляется при завершении работы MariaDB. Он не будет существовать, если MariaDB не работает. возможно, вы не установили MariaDB. ВЫ МОЖЕТЕ ПОЛУЧИТЬ ИНСТРУКЦИЮ НИЖЕ: https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 ЛУЧШИЙ

Ответ 30

Я использовал 127.0.0.1 для -h вместо localhost, и все было в порядке. В другом случае было то, что было - ошибка выше.