Ошибка сайта 2002

После перезапуска MySQL сервера у меня случился сбой, который выдавал ошибку ERROR 2002 (HY000). С такой проблемой я раньше не сталкивался, поэтому начал активно искать решение…

Непосредственно сам код ошибки выглядел так:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

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

Вообще, эта проблема не новая и интернет переполнен различными вариантами решения. Свое решение я нашел в этом посте на StackOverflow.

sudo chown -R _mysql:mysql /usr/local/var/mysql && sudo brew services restart mysql

После этого, проблема решилась и сервер успешно запустился, поэтому можно работать с данными дальше 😎

Постоянно выскакивает ошибка Error 2002

интервал примерно 40 минут — 1 час.

Uncaught exception waDbException:
Database error. See log for details. (2002)
## wa-system/database/waDbMysqliAdapter.class.php(33)
#0 wa-system/database/waDbAdapter.class.php(30): waDbMysqliAdapter->connect(Array)
#1 wa-system/database/waDbConnector.class.php(49): waDbAdapter->__construct(Array)
#2 wa-system/database/waModel.class.php(75): waDbConnector::getConnection('default', false)
#3 wa-system/contact/waContact.class.php(851): waModel->__construct()
#4 wa-system/waSystem.class.php(996): waContact->getLocale()
#5 wa-system/waSystem.class.php(1151): waSystem->getApps()
#6 wa-system/waSystem.class.php(538): waSystem->appExists('webasyst')
#7 wa-system/waSystem.class.php(485): waSystem->dispatchBackend('webasyst/')
#8 index.php(7): waSystem->dispatch()
#9 {main}
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111 "Connection refused")
## wa-system/database/waDbMysqliAdapter.class.php(33)
#0 wa-system/database/waDbAdapter.class.php(30): waDbMysqliAdapter->connect(Array)
#1 wa-system/database/waDbConnector.class.php(49): waDbAdapter->__construct(Array)
#2 wa-system/database/waModel.class.php(75): waDbConnector::getConnection('default', false)
#3 wa-system/user/waAuthUser.class.php(113): waModel->__construct()
#4 wa-system/user/waAuthUser.class.php(52): waAuthUser->updateLastTime()
#5 wa-system/user/waAuthUser.class.php(24): waAuthUser->init()
#6 wa-system/waSystem.class.php(240): waAuthUser->__construct(NULL, Array)
#7 wa-system/waSystem.class.php(281): waSystem::getCommonFactory('auth_user', 'waAuthUser', Array, NULL)
#8 wa-system/waSystem.class.php(526): waSystem->getUser()
#9 wa-system/waSystem.class.php(485): waSystem->dispatchBackend('webasyst/')
#10 index.php(7): waSystem->dispatch()
#11 {main}

интервал примерно 40 минут — 1 час.

Настроили автоочиску кэша SQL с интервалом в 1 час, т.к. быстро переполняется память.

Подскажите как исправить чтобы сайт не падал постоянно?

Работает на сервере VPS

Процессор 2 ядра 2x 2.13-2.5 ГГц

RAM 2 Гб

HDD 40 Гб RAID-10

IP-адреса 1 IPv4

Трафик Не ограничен 100 Mbps Shared

MySQL — система управления базами данных (СУБД) с открытым исходным кодом от компании Oracle. Она была разработана и оптимизирована специально для работы веб-приложений. MySQL является неотъемлемой частью таких веб-сервисов, как Facebook, Twitter, Wikipedia, YouTube и многих других.

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

Не удаётся подключиться к локальному серверу

Одной из распространённых ошибок подключения клиента к серверу является «ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)».

Эта ошибка означает, что на хосте не запущен сервер MySQL (mysqld) или вы указали неправильное имя файла сокета Unix или порт TCP/IP при попытке подключения.

Убедитесь, что сервер работает. Проверьте процесс с именем mysqld на хосте сервера, используя команды ps или grep, как показано ниже.

$ ps xa | grep mysqld | grep -v mysqld

Если эти команды не показывают выходных данных, то сервер БД не работает. Поэтому клиент не может подключиться к нему. Чтобы запустить сервер, выполните команду systemctl.

$ sudo systemctl start mysql        #Debian/Ubuntu
$ sudo systemctl start mysqld       #RHEL/CentOS/Fedora

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

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

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

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Если сервер работает (как показано) и вы по-прежнему видите эту ошибку, вам следует проверить, не заблокирован ли порт TCP/IP брандмауэром или любой другой службой блокировки портов.

Для поиска порта, который прослушивается сервером, используйте команду netstat.

$ sudo netstat -tlpn | grep "mysql"

Ещё одна похожая и часто встречающаяся ошибка подключения — «(2003) Can’t connect to MySQL server on ‘server’ (10061)». Это означает, что в сетевом соединении было отказано.

Следует проверить, работает ли в системе сервер MySQL (смотрите выше) и на тот ли порт вы подключаетесь (как найти порт, можно посмотреть выше).

Похожие частые ошибки, с которыми вы можете столкнуться при попытке подключиться к серверу MySQL:

ERROR 2003: Cannot connect to MySQL server on 'host_name' (111)
ERROR 2002: Cannot connect to local MySQL server through socket '/tmp/mysql.sock' (111)

Ошибки запрета доступа в MySQL

В MySQL учётная запись (УЗ) определяется именем пользователя и клиентским хостом, с которого пользователь может подключиться. УЗ может также иметь данные для аутентификации (например, пароль).

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

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

Увидеть разрешённые привилегии учётной записи можно, выполнив в консоли команду SHOW GRANTS
Входим в консоль (пример для Unix, для Windows консоль можно найти в стартовом меню):

В консоли вводим команду:

> SHOW GRANTS FOR 'tecmint'@'localhost';

Дать привилегии конкретному пользователю в БД по IP-адресу можно, используя следующие команды:

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

Ошибки запрещённого доступа могут также возникнуть из-за проблем с подключением к MySQL (см. выше).

Потеря соединения с сервером MySQL

С этой ошибкой можно столкнуться по одной из следующих причин:

  • плохое сетевое соединение;
  • истекло время ожидания соединения;
  • размер BLOB  больше, чем max_allowed_packet.

В первом случае убедитесь, что у вас стабильное сетевое подключение (особенно, если подключаетесь удалённо).

Если проблема с тайм-аутом соединения (особенно при первоначальном соединении MySQL с сервером), увеличьте значение параметра connect_timeout.

В случае с размером BLOB нужно установить более высокое значение для max_allowed_packet в файле конфигурации /etc/my.cnf в разделах [mysqld] или [client] как показано ниже.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

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

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

Слишком много подключений

Эта ошибка означает, что все доступные соединения используются клиентскими программами. Количество соединений (по умолчанию 151) контролируется системной переменной max_connections. Устранить проблему можно, увеличив значение переменной в файле конфигурации /etc/my.cnf.

[mysqld]
max_connections=1000

Недостаточно памяти

Если такая ошибка возникла, это может означать, что в MySQL недостаточно памяти для хранения всего результата запроса.

Сначала нужно убедиться, что запрос правильный. Если это так, то нужно выполнить одно из следующих действий:

  • если клиент MySQL используется напрямую, запустите его с ключом --quick switch, чтобы отключить кешированные результаты;
  • если вы используете драйвер MyODBC, пользовательский интерфейс (UI) имеет расширенную вкладку с опциями. Отметьте галочкой «Do not cache result» (не кешировать результат).

Также может помочь MySQL Tuner. Это полезный скрипт, который подключается к работающему серверу MySQL и даёт рекомендации по настройке для более высокой производительности.

$ sudo apt-get install mysqltuner     #Debian/Ubuntu
$ sudo yum install mysqltuner         #RHEL/CentOS/Fedora
$ mysqltuner

MySQL продолжает «падать»

Если такая проблема возникает, необходимо выяснить, заключается она в сервере или в клиенте. Обратите внимание, что многие сбои сервера вызваны повреждёнными файлами данных или индексными файлами.

Вы можете проверить состояние сервера, чтобы определить, как долго он работал.

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Чтобы узнать время безотказной работы сервера, запустите команду mysqladmin.

$ sudo mysqladmin version -p 

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

$ sudo mysqladmin -i 5 status

Или

$ sudo mysqladmin -i 5 -r status

Заключение

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

  • Первый и самый важный шаг — просмотреть журналы MySQL, которые хранятся в каталоге /var/log/mysql/. Вы можете использовать утилиты командной строки вроде tail для чтения файлов журнала.
  • Если служба MySQL не запускается, проверьте её состояние с помощью systemctl. Или используйте команду journalctl (с флагом -xe) в systemd.
  • Вы также можете проверить файл системного журнала (например, /var/log/messages) на предмет обнаружения ошибок.
  • Попробуйте использовать такие инструменты, как Mytop, glances, top, ps или htop, чтобы проверить, какая программа использует весь ресурс процессора или блокирует машину. Они также помогут определить нехватку памяти, дискового пространства, файловых дескрипторов или какого-либо другого важного ресурса.
  • Если проблема в каком-либо процессе, можно попытаться его принудительно остановить, а затем запустить (при необходимости).
  • Если вы уверены, что проблемы именно на стороне сервера, можете выполнить команды: mysqladmin -u root ping или mysqladmin -u root processlist, чтобы получить от него ответ.
  • Если при подключении проблема не связана с сервером, проверьте, нормально ли работает клиент. Попробуйте получить какие-либо его выходные данные для устранения неполадок.

Перевод статьи «Useful Tips to Troubleshoot Common Errors in MySQL»

Привет, Александр.
Поставил Денвер, и такая вот петрушка, вроде все установилось, но….

Денвер, MySQL сервер не отвечает, ошибка 2002

Денвер, MySQL сервер не отвечает, ошибка 2002 (45.64 Кб) Просмотров: 21228

MySQL сервер не отвечает, ошибка 2002.
Sergej
 
Сообщения: 24
Зарегистрирован: 15 сен 2014, 21:44

Re: Денвер, MySQL сервер не отвечает, ошибка 2002

Александр » 19 окт 2014, 13:20

Вообще, когда Денвер запускаешь, mysql сервер стартует?
Попробуй, отключив Антивирус и Брандмауэр запусти Денвер.
Для начала посмотри в диспетчере задач Windows, там должен быть процесс mysqld.exe
Если он там есть потом тебе нужно в командной строке Windows ввести:

Код: Выделить всё
telnet 127.0.0.1 3306

Должен быть какой-то ответ от MySQL сервера в виде строки с каким-то текстом (могут быть кракозябы) это значит, что сервер ответил.
Если же будет сообщение типа «Не у далось открыть подключение к этому узлу на порт 3306….» — значит не подключается.
Тогда пробуй команду:

Код: Выделить всё
telnet localhost 3306

Если она будет успешной, то возможно, проблема из серии настройки сети ipv6 и т. п.

http://forum.dklab.ru/viewtopic.php?t=38843

Если не успешно, смотри кто слушает порт 3306
В командной строке Windows выполни:

Код: Выделить всё
netstat -an

(в выводе правой кнопкой мыши ищи 3306)
или более детальная:

Код: Выделить всё
netstat -ab

Ну и на всякий случай убедись, что порт MySQL в конфигурационном файле задан как 3306, также посмотри файл ошибок MySQL
Стандартный проводник Windows может не показывать эти файлы, тогда пользуйся каким-нибудь файловым менеджером.
Где у тебя расположены эти файлы, см. на форуме Денвера, обычно конфигурационный лежит в Z:usrlocalmysql5 , файл ошибок в Z:usrlocalmysql5data

http://www.denwer.ru/faq/other.html#h30-15

Александр
 
Сообщения: 394
Зарегистрирован: 20 мар 2014, 17:05

Re: Денвер, MySQL сервер не отвечает, ошибка 2002

Sergej » 19 окт 2014, 14:43

В диспетчере такого процесса нет хотя изначально при загрузке денвер в командной строке пишет что-то вроде:

Что касаемо порта 3306 я так понимаю это к нему относится

Код: Выделить всё
# The following options will be passed to all MySQL client.

[client]

port                  = 3306

socket                = /tmp/mysql5.sock

character-sets-dir    = /usr/local/mysql-5.5/share/charsets

# Кодировка консоли mysql.exe по умолчанию.

default-character-set = cp1251

# The MySQL server

[mysqld]

# Обработывать запросы ТОЛЬКО с локальной машины (повышает безопасность).

# Если вы хотите, чтобы MySQL-сервер был доступен из сети,

# уберите следующую ниже директиву.

bind-address = 127.0.0.1

port                       = 3306

Это в файле my.ini прописано

Файл с ошибками подкрепляю, погляди пожалуйста может чего увидишь

Sergej
 
Сообщения: 24
Зарегистрирован: 15 сен 2014, 21:44

Re: Денвер, MySQL сервер не отвечает, ошибка 2002

Александр » 19 окт 2014, 17:30

Смотри в сторону конфигурационного файла и затребуемых там ресурсов памяти.

Вот похоже что обрывает процесс:

InnoDB: Error: auto-extending data file .ibdata1 is of a different size
InnoDB: 384 pages (rounded down to MB) than specified in the .cnf file:
InnoDB: initial 640 pages, max 0 (relevant if non-zero) pages!
141014 20:08:15 InnoDB: Could not open or create data files.
141014 20:08:15 InnoDB: If you tried to add new data files, and it failed here,
141014 20:08:15 InnoDB: you should now edit innodb_data_file_path in my.cnf back
141014 20:08:15 InnoDB: to what it was, and remove the new ibdata files InnoDB created
141014 20:08:15 InnoDB: in this failed attempt. InnoDB only wrote those files full of
141014 20:08:15 InnoDB: zeros, but did not yet use them in any way. But be careful: do not
141014 20:08:15 InnoDB: remove old data files which contain your precious data!
141014 20:08:15 [ERROR] Plugin ‘InnoDB’ init function returned error.
141014 20:08:15 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
141014 20:08:15 [ERROR] Unknown/unsupported storage engine: InnoDB
141014 20:08:15 [ERROR] Aborting

Пробей в Яндексе по этим ошибкам.
Вот, кажется наиболее простое (Дмитрий Кóтеров кстати, разработчик Денвера)

http://forum.dklab.ru/viewtopic.php?t=14113

http://forum.dklab.ru/viewtopic.php?p=72845#72845

Думаю примерно так: у MySQL есть разные движки для хранения данных, основные: MyISAM и InnoDB. InnoDB, кажется, в Денвере не используется.
В силу каких-то твоих особенностей (может ты раньше Mysql/Денвер устанавливал, но плохо удалил или еще бог знает что..), в общем, кажется этот InnoDB пытается создать дополнительное хранилище и натыкается на какое-то ограничение в конфигурации.
Тебе нужно почитать как в Денвере устроено конфигурирование MySQL (один конфигурационный файл или есть еще где-то, если в конфиге какие-то лимиты не прописаны, может они по умолчанию в MySQL идут).

Может потребуется удалить файл типа .ibdata1 не знаю. Все удаления лучше делай в последюю очередь, даже лучше не удалять, наверное, а просто переименовывать.

Последний раз редактировалось Александр 24 ноя 2014, 14:42, всего редактировалось 1 раз.

Александр
 
Сообщения: 394
Зарегистрирован: 20 мар 2014, 17:05

Re: Денвер, MySQL сервер не отвечает, ошибка 2002

Sergej » 20 окт 2014, 20:10

Спасибо помогло, теперь надо разобраться с ограничениями, он выкидывает какие то лимиты на загрузку файлов

Sergej
 
Сообщения: 24
Зарегистрирован: 15 сен 2014, 21:44

Re: Денвер, MySQL сервер не отвечает, ошибка 2002

Sergej » 21 окт 2014, 19:46

Привет! Как всегда нужна твоя помощь, с денвером вроде разобрался, но вот досада при закачке файлов сайта на сервер возникают проблемы, судя по различным комментариям в инете это нормально, при возникновении каких любо проблем в самом phpadmyn отражаются какие именно необходимо решить вопросы, так все и шло изначально, но вдруг столкнулся с такой проблемой (#1064 — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near »2014-08-‘ at line 1) и никак не могу найти толкового ответа, может подскажешь что это?

Sergej
 
Сообщения: 24
Зарегистрирован: 15 сен 2014, 21:44

Re: Денвер, MySQL сервер не отвечает, ошибка 2002

Александр » 21 окт 2014, 20:53

Привет.
Т. е. ты хочешь залить на локальный mysql-сервер дамп, сделанный на хостинге? ты его случайно не открывал простым блокнотом и потом пересохранял?
Пришли мне на почту сам дамп что ли.
Чтобы сразу исключить и на будущее, почитай про BOM

http://mywordpress.ru/support/viewtopic.php?id=2461

вот еще

http://sqlinfo.ru/articles/info/15.html

Я тебе, кстати, писал когда-то, что стандартными windows редакторами не пользуйся т. к. там всякие «сюрпризы» могут быть, используй либо notepad++ либо notepad2

http://notepad-plus-plus.org

Александр
 
Сообщения: 394
Зарегистрирован: 20 мар 2014, 17:05

Re: Денвер, MySQL сервер не отвечает, ошибка 2002

Sergej » 21 окт 2014, 21:26

Я его открывал и пересохранял но через notepad++

Sergej
 
Сообщения: 24
Зарегистрирован: 15 сен 2014, 21:44

Re: Денвер, MySQL сервер не отвечает, ошибка 2002

Александр » 21 окт 2014, 22:16

Я смотрю, дамп имеет кодировку Windows-1251. Похоже, что при экспорте на хостинге в PhpMyAdmin или какая программа там еще, не знаю.. была выставлена кодировка Windows-1251 (синоним CP1251) а нужна UTF-8, насколько я понимаю..
И ты наверное пытаешься на Денвере залить через PhpMyAdmin этот файл как файл, имеющий кодировку UTF-8.
Примерно так, в общем, похоже на какую-то несогласованность в кодировках.

И еще, смотрю в дампе стоит тип ENGINE=InnoDB. Похоже хостер так настроил СУБД тип InnoDB и экспорт в Windows 1251.
Короче, в такой ситуации, думаю тебе пока не стоит заливать базу назад на хостинг…
Но для локальных экспериментов попробуй в Notepad++ перекодировать этот файл в UTF8 без BOM и поиском/заменой поменяй InnoDB на MyISAM.
Локально не страшно пробовать. На хостинг, опять повторяю, наверное лучше пока тебе не пытаться базу перезаливать, пока не разберешься что к чему.

Александр
 
Сообщения: 394
Зарегистрирован: 20 мар 2014, 17:05

Re: Денвер, MySQL сервер не отвечает, ошибка 2002

Sergej » 21 окт 2014, 22:50

Понял буду пробовать

Sergej
 
Сообщения: 24
Зарегистрирован: 15 сен 2014, 21:44


Вернуться в SQL

I need help bad…I got this error trying to display a database using php:

mysqli_connect(): (HY000/2002): Can’t connect to local MySQL server
through socket ‘/Applications/MAMP/tmp/mysql/mysql.sock’ (2) in
/Applications/MAMP/htdocs/databases.php on line 7 Database connection
failed: Can’t connect to local MySQL server through socket
‘/Applications/MAMP/tmp/mysql/mysql.sock’ (2) (2002)

I’ve been trying to fix it for days, reading through this forum from people with the same issues, and applying the fixes (like this one http://tinyurl.com/q4cpxzj) with absolutely no luck.

Here’s some steps I’ve tried: Going into php.ini file and changing the socket to /tmp/mysql.sock (I also tried changing it to /Applications/MAMP/tmp/mysql/mysql.sock to see what happens, no good).

Tried doing the same to /etc/my.cnf file. No good.

Tried a bunch of other things I can’t even remember anymore.

Also, I’m using Mac 10.10.2 and I have MAMP installed. According to MAMP, only Apache is working (green light by Apache and nothing on MySQL) but I’ve downloaded MySQL and according to System Pref it is running, although it won’t let me stop MySQL server for some reason (when I click stop it would stop then restart again on its own).

Please help…

If it matters, here’s the php:

<?php
  // 1. Create a database connection
  $dbhost = "localhost";
  $dbuser = "widget_cms";
  $dbpass = "*********";
  $dbname = "widget_corp";
  $connection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
  // Test if connection succeeded
  if(mysqli_connect_errno()) {
    die("Database connection failed: " . 
         mysqli_connect_error() . 
         " (" . mysqli_connect_errno() . ")"
    );
  }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
    <head>
        <title>Databases</title>
    </head>
    <body>

    </body>
</html>

<?php
  // 5. Close database connection
  mysqli_close($connection);
?>

I need help bad…I got this error trying to display a database using php:

mysqli_connect(): (HY000/2002): Can’t connect to local MySQL server
through socket ‘/Applications/MAMP/tmp/mysql/mysql.sock’ (2) in
/Applications/MAMP/htdocs/databases.php on line 7 Database connection
failed: Can’t connect to local MySQL server through socket
‘/Applications/MAMP/tmp/mysql/mysql.sock’ (2) (2002)

I’ve been trying to fix it for days, reading through this forum from people with the same issues, and applying the fixes (like this one http://tinyurl.com/q4cpxzj) with absolutely no luck.

Here’s some steps I’ve tried: Going into php.ini file and changing the socket to /tmp/mysql.sock (I also tried changing it to /Applications/MAMP/tmp/mysql/mysql.sock to see what happens, no good).

Tried doing the same to /etc/my.cnf file. No good.

Tried a bunch of other things I can’t even remember anymore.

Also, I’m using Mac 10.10.2 and I have MAMP installed. According to MAMP, only Apache is working (green light by Apache and nothing on MySQL) but I’ve downloaded MySQL and according to System Pref it is running, although it won’t let me stop MySQL server for some reason (when I click stop it would stop then restart again on its own).

Please help…

If it matters, here’s the php:

<?php
  // 1. Create a database connection
  $dbhost = "localhost";
  $dbuser = "widget_cms";
  $dbpass = "*********";
  $dbname = "widget_corp";
  $connection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
  // Test if connection succeeded
  if(mysqli_connect_errno()) {
    die("Database connection failed: " . 
         mysqli_connect_error() . 
         " (" . mysqli_connect_errno() . ")"
    );
  }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
    <head>
        <title>Databases</title>
    </head>
    <body>

    </body>
</html>

<?php
  // 5. Close database connection
  mysqli_close($connection);
?>

Я пытаюсь использовать соединение PHP для подключения базы данных MySQL, которая находится на phpmyadmin. Ничего особенного в соединении просто пытаюсь увидеть, успешно оно установлено или нет. Я использую MAMP для размещения базы данных, соединение, которое я пытаюсь использовать, это:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "root";

try {
    $conn = new PDO("mysql:host=$servername;dbname=AppDatabase", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 
}
catch(PDOException $e)
{
    echo "Connection failed: " . $e->getMessage();
}
?>

Я использовал почтальон, чтобы проверить, работает ли соединение, но я продолжаю получать это сообщение об ошибке:

Ошибка подключения: SQLSTATE [HY000] [2002] Подключение отклонено

Прежде чем я получил сообщение об ошибке:

Ошибка подключения: SQLSTATE [HY000] [2002] Нет такого файла или каталога

Это было потому, что я установил имя сервера в localhost, изменив его на IP-адрес, который дал мне отказ в соединении, и я понятия не имею, что не так.

Любая помощь по этому поводу будет принята с благодарностью.

Скрипт:

<?php
$db_host        = ;
$db_user        = ;
$db_password        = ;
$db_name    = ;

	
	$link = mysqli_connect($db_host, $db_user, $db_password, $db_name);
	if (!$link) {
    	die('<p style="color:red">'.mysqli_connect_errno().' - '.mysqli_connect_error().'</p>');
	}
		
	echo "<p>Вы подключились к MySQL!</p>";
?>

выводит код:
2002 — php_network_getaddresses: getaddrinfo failed: Name or service not known
скрипт находится на хостинге: hostiman.ru
В чём суть ошибки?

I am trying to use a PHP connection to connect MySQL Database which is on phpmyadmin. Nothing fancy about the connection just trying to see whether the connection is successful or not. I am using MAMP to host the database, the connection I am trying to use is this:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "root";

try {
    $conn = new PDO("mysql:host=$servername;dbname=AppDatabase", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 
}
catch(PDOException $e)
{
    echo "Connection failed: " . $e->getMessage();
}
?>

I have been using postman to test to see if the connection is working, but I keep receiving this error message:

Connection failed: SQLSTATE[HY000] [2002] Connection refused

Before I was receiving an error message of:

Connection failed: SQLSTATE[HY000] [2002] No such file or directory

This was because I had set the servername to localhost, through changing this to the IP address it has given me connection refused and I have no idea what is wrong.

Any help regarding this would be appreciated.

Udhav Sarvaiya's user avatar

asked Apr 1, 2015 at 15:57

Jonck's user avatar

4

I found the reason why the connection was not working, it was because the connection was trying to connect to port 8888, when it needed to connect to port 8889.

$conn = new PDO("mysql:host=$servername;port=8889;dbname=AppDatabase", $username, $password); 

This fixed the problem, although changing the server name to localhost still gives the error.

Connection failed: SQLSTATE[HY000] [2002] No such file or directory

But it connects successfully when the IP address is entered for the server name.

answered Apr 1, 2015 at 21:15

Jonck's user avatar

JonckJonck

1,5591 gold badge10 silver badges15 bronze badges

4

I spent quite a few hours in a docker environment where all my containers are docker containers and I was using Phinx for migrations. Just to share different responses with different configurations.

Working solutions

"host" => "db", // {docker container's name} Worked
"host" => "172.22.112.1", // {some docker IP through ipconfig - may change on every instance - usually something like 172.x.x.x} Worked

Non-working solutions

"host" => "127.0.0.1", // SQLSTATE[HY000] [2002] Connection refused
"host" => "docker.host.internal", //  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name does not resolve
"host" => "localhost", //  SQLSTATE[HY000] [2002] No such file or directory

I was running Phinx in following way.

docker compose --env-file .env run --rm phinx status -e development

answered Jun 21, 2022 at 11:01

GoharSahi's user avatar

GoharSahiGoharSahi

4661 gold badge8 silver badges21 bronze badges

2

In my case MySQL sever was not running. I restarted the MySQL server and issue was resolved.

//on ubuntu server
sudo /etc/init.d/mysql start

To avoid MySQL stop problem, you can use the «initctl» utility in Ubuntu 14.04 LTS Linux to make sure the service restarts in case of a failure or reboot. Please consider talking a snapshot of root volume (with mysql stopped) before performing this operations for data retention purpose[8]. You can use the following commands to manage the mysql service with «initctl» utility with stop and start operations.

$ sudo initctl stop mysql
$ sudo initctl start mysql

To verify the working, you can check the status of the service and get
the process id (pid), simulate a failure by killing the «mysql»
process and verify its status as running with new process id after
sometime (typically within 1 minute) using the following commands.

$ sudo initctl status mysql         # get pid
$ sudo kill -9 <pid>                # kill mysql process
$ sudo initctl status mysql         # verify status as running after sometime

Note : In latest Ubuntu version now initctl is replaced by systemctl

answered Oct 16, 2018 at 9:52

vinod's user avatar

vinodvinod

2,8201 gold badge18 silver badges23 bronze badges

3

Using MAMP I changed the host=localhost to host=127.0.0.1. But a new issue came «connection refused»

Solved this by putting 'port' => '8889', in 'Datasources' => [

Udhav Sarvaiya's user avatar

answered Mar 31, 2019 at 9:55

Quentin Vaisala's user avatar

1. server cert verify flag

I was required to use SSL to connect, and needed to set PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT to false in the new PDO options array, besides the entry PDO::MYSQL_ATTR_SSL_CA for the CA file.

Without it, the mysql log on the server helpfully mentions

2021-07-27 17:02:51 597605 [Warning] Aborted connection 597605 to db: 'unconnected' user: 'unauthenticated' host: '192.168.10.123' (This connection closed normally without authentication)

where I was definitely passing the right db and username and such in the DSN. An empty options array will show the db and user in the error log, at least. I am sure there is a valid, technical reason for these things.
I am adding this information so I can more easily find it, the next time I end up on this page..

2. host in connection string

In the context of SSL, I’ve also seen the error when using the IP address instead of the hostname to connect, if the hostname was used as CN (Common Name) in the certificate.

answered Jul 27, 2021 at 15:20

MSpreij's user avatar

MSpreijMSpreij

1,14313 silver badges20 bronze badges

Using MAMP ON Mac, I solve my problem by renaming

/Applications/MAMP/tmp/mysql/mysql.sock.lock

to

/Applications/MAMP/tmp/mysql/mysql.sock

answered Jul 11, 2020 at 15:58

Dey's user avatar

DeyDey

8439 silver badges21 bronze badges

For me was php version from mac instead of MAMP, PATH variable on .bash_profile was wrong. I just prepend the MAMP PHP bin folder to the $PATH env variable. For me was:

/Applications/mampstack-7.1.21-0/php/bin
  1. In terminal run vim ~/.bash_profile to open ~/.bash_profile

  2. Type i to be able to edit the file, add the bin directory as PATH variable on the top to the file:

    export PATH=»/Applications/mampstack-7.1.21-0/php/bin/:$PATH»

  3. Hit ESC, Type :wq, and hit Enter

  4. In Terminal run source ~/.bash_profile
  5. In Terminal type which php, output should be the path to MAMP PHP install.

answered Jan 29, 2020 at 15:11

Mahdiyeh's user avatar

MahdiyehMahdiyeh

73510 silver badges12 bronze badges

I had the same issue on a docker container from php:8.0-fpm-alpine image. I just added the following line in the Dockerfile and it fixed the issue:

RUN apk add mysql-client

answered Oct 12, 2021 at 19:58

Omid Ebrahimi's user avatar

Omid EbrahimiOmid Ebrahimi

1,1502 gold badges20 silver badges38 bronze badges

I had a similar problem once, turned out the User in the database was created with something like:

CREATE USER 'webpage'@'localhost' IDENTIFIED BY 'password';

worked fine when the connection details php script had localhost, but not when the IP address was there. A quick swap (ip address when creating user and localhost in connection details) revealed those two things have to match.

answered Aug 12, 2022 at 19:49

csfrancis555's user avatar

1

For everyone if you still strugle with Refusing connection, here is my advice. Download XAMPP or other similar sw and just start MySQL. You dont have to run apache or other things just the MySQL.

answered Jan 26, 2021 at 17:05

PatrikPika's user avatar

1

MySQL — система управления базами данных (СУБД) с открытым исходным кодом от компании Oracle. Она была разработана и оптимизирована специально для работы веб-приложений. MySQL является неотъемлемой частью таких веб-сервисов, как Facebook, Twitter, Wikipedia, YouTube и многих других.

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

Не удаётся подключиться к локальному серверу

Одной из распространённых ошибок подключения клиента к серверу является «ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)».

Эта ошибка означает, что на хосте не запущен сервер MySQL (mysqld) или вы указали неправильное имя файла сокета Unix или порт TCP/IP при попытке подключения.

Убедитесь, что сервер работает. Проверьте процесс с именем mysqld на хосте сервера, используя команды ps или grep, как показано ниже.

$ ps xa | grep mysqld | grep -v mysqld

Если эти команды не показывают выходных данных, то сервер БД не работает. Поэтому клиент не может подключиться к нему. Чтобы запустить сервер, выполните команду systemctl.

$ sudo systemctl start mysql        #Debian/Ubuntu
$ sudo systemctl start mysqld       #RHEL/CentOS/Fedora

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

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

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

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Если сервер работает (как показано) и вы по-прежнему видите эту ошибку, вам следует проверить, не заблокирован ли порт TCP/IP брандмауэром или любой другой службой блокировки портов.

Для поиска порта, который прослушивается сервером, используйте команду netstat.

$ sudo netstat -tlpn | grep "mysql"

Ещё одна похожая и часто встречающаяся ошибка подключения — «(2003) Can’t connect to MySQL server on ‘server’ (10061)». Это означает, что в сетевом соединении было отказано.

Следует проверить, работает ли в системе сервер MySQL (смотрите выше) и на тот ли порт вы подключаетесь (как найти порт, можно посмотреть выше).

Похожие частые ошибки, с которыми вы можете столкнуться при попытке подключиться к серверу MySQL:

ERROR 2003: Cannot connect to MySQL server on 'host_name' (111)
ERROR 2002: Cannot connect to local MySQL server through socket '/tmp/mysql.sock' (111)

Ошибки запрета доступа в MySQL

В MySQL учётная запись (УЗ) определяется именем пользователя и клиентским хостом, с которого пользователь может подключиться. УЗ может также иметь данные для аутентификации (например, пароль).

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

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

Увидеть разрешённые привилегии учётной записи можно, выполнив в консоли команду SHOW GRANTS
Входим в консоль (пример для Unix, для Windows консоль можно найти в стартовом меню):

В консоли вводим команду:

> SHOW GRANTS FOR 'tecmint'@'localhost';

Дать привилегии конкретному пользователю в БД по IP-адресу можно, используя следующие команды:

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

Ошибки запрещённого доступа могут также возникнуть из-за проблем с подключением к MySQL (см. выше).

Потеря соединения с сервером MySQL

С этой ошибкой можно столкнуться по одной из следующих причин:

  • плохое сетевое соединение;
  • истекло время ожидания соединения;
  • размер BLOB  больше, чем max_allowed_packet.

В первом случае убедитесь, что у вас стабильное сетевое подключение (особенно, если подключаетесь удалённо).

Если проблема с тайм-аутом соединения (особенно при первоначальном соединении MySQL с сервером), увеличьте значение параметра connect_timeout.

В случае с размером BLOB нужно установить более высокое значение для max_allowed_packet в файле конфигурации /etc/my.cnf в разделах [mysqld] или [client] как показано ниже.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

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

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

Слишком много подключений

Эта ошибка означает, что все доступные соединения используются клиентскими программами. Количество соединений (по умолчанию 151) контролируется системной переменной max_connections. Устранить проблему можно, увеличив значение переменной в файле конфигурации /etc/my.cnf.

[mysqld]
max_connections=1000

Недостаточно памяти

Если такая ошибка возникла, это может означать, что в MySQL недостаточно памяти для хранения всего результата запроса.

Сначала нужно убедиться, что запрос правильный. Если это так, то нужно выполнить одно из следующих действий:

  • если клиент MySQL используется напрямую, запустите его с ключом --quick switch, чтобы отключить кешированные результаты;
  • если вы используете драйвер MyODBC, пользовательский интерфейс (UI) имеет расширенную вкладку с опциями. Отметьте галочкой «Do not cache result» (не кешировать результат).

Также может помочь MySQL Tuner. Это полезный скрипт, который подключается к работающему серверу MySQL и даёт рекомендации по настройке для более высокой производительности.

$ sudo apt-get install mysqltuner     #Debian/Ubuntu
$ sudo yum install mysqltuner         #RHEL/CentOS/Fedora
$ mysqltuner

MySQL продолжает «падать»

Если такая проблема возникает, необходимо выяснить, заключается она в сервере или в клиенте. Обратите внимание, что многие сбои сервера вызваны повреждёнными файлами данных или индексными файлами.

Вы можете проверить состояние сервера, чтобы определить, как долго он работал.

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Чтобы узнать время безотказной работы сервера, запустите команду mysqladmin.

$ sudo mysqladmin version -p 

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

$ sudo mysqladmin -i 5 status

Или

$ sudo mysqladmin -i 5 -r status

Заключение

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

  • Первый и самый важный шаг — просмотреть журналы MySQL, которые хранятся в каталоге /var/log/mysql/. Вы можете использовать утилиты командной строки вроде tail для чтения файлов журнала.
  • Если служба MySQL не запускается, проверьте её состояние с помощью systemctl. Или используйте команду journalctl (с флагом -xe) в systemd.
  • Вы также можете проверить файл системного журнала (например, /var/log/messages) на предмет обнаружения ошибок.
  • Попробуйте использовать такие инструменты, как Mytop, glances, top, ps или htop, чтобы проверить, какая программа использует весь ресурс процессора или блокирует машину. Они также помогут определить нехватку памяти, дискового пространства, файловых дескрипторов или какого-либо другого важного ресурса.
  • Если проблема в каком-либо процессе, можно попытаться его принудительно остановить, а затем запустить (при необходимости).
  • Если вы уверены, что проблемы именно на стороне сервера, можете выполнить команды: mysqladmin -u root ping или mysqladmin -u root processlist, чтобы получить от него ответ.
  • Если при подключении проблема не связана с сервером, проверьте, нормально ли работает клиент. Попробуйте получить какие-либо его выходные данные для устранения неполадок.

Перевод статьи «Useful Tips to Troubleshoot Common Errors in MySQL»

Ошибка #2002 при входе в localhost/tools/phpmyadmin/

Предположим Вы решили заняться изучением языка программирования PHP, для этого Вы установили Denwer — локальный веб-сервер, и вот дошли до того момента когда Вам необходимо создать базу данных для сайта. Но при переходе в PhpMyAdmin по пути — localhost/tools/phpmyadmin видите следующее сообщение:

Добро пожаловать в phpMyAdmin 
Ошибка

Ответ MySQL: 
#2002 — ����������� �� �����������, �.�. �������� ��������� ������ ������ �� �����������.

Сервер не отвечает (либо локальный сокет сервера MySQL неверно настроен). 

Ошибка при указании соединения для controluser в конфигурации.

Название страницы: В доступе отказано.

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

Для решения данной проблемы попробуйте:

  1. Перезапустить денвер.
  2. Перезагрузить компьютер.
  3. Открыть сайт в другом браузере.
  4. Зайти в папку где хранятся файлы от денвера, открыть папки usr -> local -> mysql-5.5 -> bin и запустить файл mysql_upgrade.exe
  5. В крайнем случае полностью удалите денвер и установите снова.

Так же стоит убедиться что придуманное Вами доменное имя не используется в сети интернет.

Сайт на движке Bitrix может работать исправно и вдруг в самый неподходящий момент при заходе на сайт может возникнуть ошибка «Mysql connect error localhost 2002 No such file or directory 400».

Возможные причины:

  1. Закончилось свободное место на диске.
  2. Некорректные данные для подключения к базе данных.
  3. Проблема с базой данных.

Первым делом нужно зайти в панель управления хостингом и проверить, не закончилось ли место на диске (в разных системах может быть по-разному, к примеру — Инструменты — Свободное место). Если гипотеза подтвердилась, идем в менеджер файлов — www/названиеСайта/bitrix/backup — удаляем лишние бэкапы, либо пишем запрос в техподдержку хостинга, чтобы почистили место на диске, заодно можно будет в дальнейшем сделать так, чтобы на диске оставлять резерв, чтобы место внезапно не кончалось в будущем.

Возможно, на сайте не включен дебаг-режим и ошибки вы не увидите, чтобы включить дебаг-режим: менеджер файлов — www/названиеСайта/bitrix/php_interface — в файле dbconn.php в $DBDebug и $DBDebugToFile заменить с false на true.

Чтобы изменить настройки подключения к базе данных, в том же файле dbconn.php можно изменить значения в $DBLogin, $DBPassword, $DBName на нужные. Также настройки подключения к БД хранятся в файле www/названиеСайта/bitrix.settings.php (поля database, login, password соответственно).

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

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Ошибка сайт пока не может обработать этот запрос
  • Ошибка сайт неожиданно разорвал соединение
  • Ошибка сайт выполнил переадресацию слишком много раз
  • Ошибка сажевого фильтра фольксваген каравелла

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии