Не удается подключиться к локальному серверу 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]

45 ответов

Решение

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

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

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

mysqladmin -u root -p status

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

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

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

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

Вы уверены, что вы установили 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

затем установите пароль root для MySQL:

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

Я надеюсь, что это помогает.

I got the following error

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

Tried several ways and finally solved it through the following way

sudo gksu gedit /etc/mysql/my.cnf

модифицированный

#bind-address       = 127.0.0.1

в

bind-address        = localhost

and restarted

sudo /etc/init.d/mysql restart

это сработало

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

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

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

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

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

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

shutdown -h now

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

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

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

service mysqld start

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

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

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

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

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

Другой обходной путь - отредактировать /etc/my.cnf и включить хост в раздел [client].

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

А затем перезапустить службу MySQL.

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

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

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

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

sudo service mysql stop

sudo service mysql start

остановка службы sudo apache2

sudo service apache2 start

sudo service mysql start

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

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

df -h

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

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

 /etc/init.d/mysqld start

Так что.. глупая ошибка.

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

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

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

II) запустить sudo /etc/init.d/mysql restart

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

Если вы используете AWS (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.

Я также обнаружил, что это была проблема с разрешениями. Я сравнил файлы MySQL с работающей установкой (обе на Debian 6 squeeze) и мне пришлось внести следующие изменения в владельца (где 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* 

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

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

Вы всегда можете запустить сервер MySQL, указав расположение файла MySQL, используя --socket вариант как

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

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

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

cd /etc/mysql

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

nano my.cnf

и убедитесь, что у вас есть только один bind-адрес:

bind-address = 127.0.0.1

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

а также service mysql start

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

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

/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

Кажется, все работает сейчас, как и ожидалось.

sudo service mysqld start

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

Когда вы используете для подключения к MySQL, операционная система использует разъем сокета. Однако если вы используете IP-адрес, операционная система будет использовать соединитель TCP/IP. Таким образом, возможное решение, когда у вас возникают проблемы с соединителем сокета, — это попытка установить соединение с использованием TCP/IP, указав 127.0.0.1IP-адрес вместо localhost.

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


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

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

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

Добавление

--protocol=tcp 

к списку праматоров в твоей связи работало у меня.

Если кто-то ищет ошибку инициализации

Не удается подключиться к базе данных "/var/run/mysql/mysql.sock"

При запуске civicrm & drupal просто внесите следующие изменения в

settings.php и civicrm.settings.php

только в тех местах, где вы пытаетесь установить соединение БД

localhost to 127.0.0.1 # локальная установка

У меня только что была эта проблема. после дня окончательной проверки я получил ответ, что файл mysql.sock создается при запуске MariaDB и удаляется при выключении MariaDB. Это не будет существовать, если MariaDB не работает. может быть, вы не установили MariaDB. ВЫ МОЖЕТЕ СЛЕДОВАТЬ ЗА ИНСТРУКЦИЕЙ НИЖЕ: https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST

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

sudo /etc/init.d/mysql restart
Другие вопросы по тегам