Database exception 2002 возникла внутренняя ошибка сервера

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»

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-адрес, который дал мне отказ в соединении, и я понятия не имею, что не так.

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

I got an issue with the db connection in Yii2 while doing the setup on portal.azure.com server.
I have tried to check the connection, but that works fine with the mysqli connection.
For more details please find the attachments.

Database Exception (#2002):

enter image description here

PDOException:

enter image description here

Thanks

Pramod Gharu's user avatar

Pramod Gharu

1,1053 gold badges9 silver badges18 bronze badges

asked Dec 3, 2016 at 6:08

Deepak Jangra's user avatar

I resolved it by adding ‘host=’ in dsn->mysql as below:-
‘dsn’ => ‘mysql:host=u*-****-azure-******-f.cloudapp.net;dbname=****’

answered Dec 3, 2016 at 7:42

Deepak Jangra's user avatar

check runned or failed mysql service

answered Feb 17, 2022 at 16:10

user2557755's user avatar

How to solve error mysqli_sql_exception #2002 in codeigniter?


1 answer


@noemi_sporer 

The error mysqli_sql_exception #2002 is usually related to a problem with connecting to the database. To solve this issue, try the following steps:

  1. Check if the database server is running and accessible.
  2. Verify that the database host, username, and password specified in the CodeIgniter configuration file are correct.
  3. Ensure that the database specified in the configuration file exists and that the user has the necessary permissions to access it.
  4. Check if the firewall is blocking the connection to the database server.
  5. Try using an IP address instead of the hostname in the configuration file to see if the hostname resolution is causing the issue.

If none of these steps resolve the issue, you may want to consult the error logs or reach out to your hosting provider for further assistance.

Related Threads:

Постоянно выскакивает ошибка 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 сервера у меня случился сбой, который выдавал ошибку 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

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

Понравилась статья? Поделить с друзьями:
  • Data1 cab ошибка исправить
  • Dark souls ошибка установки
  • Dauntless произошла ошибка при подключении к игровым серверам
  • Data service ошибка
  • Dark souls remastered решение ошибки недостаточно памяти