Поиск по сайту:

Полезные советы по устранению распространенных ошибок в MySQL


MySQL — широко используемая система управления реляционными базами данных с открытым исходным кодом (RDMS), принадлежащая Oracle. На протяжении многих лет он был выбором по умолчанию для веб-приложений и до сих пор остается популярным по сравнению с другими механизмами баз данных.

Читайте также: как установить последнюю версию MySQL на RHEL/CentOS и Fedora

MySQL был разработан и оптимизирован для веб-приложений – он является неотъемлемой частью основных веб-приложений, таких как Facebook, Twitter, Википедия, YouTube и многие другие.

Ваш сайт или веб-приложение работает на базе MySQL? В этой подробной статье мы объясним, как устранять проблемы и распространенные ошибки на сервере базы данных MySQL. Мы опишем, как определить причины проблем и что делать для их решения.

1. Невозможно подключиться к локальному серверу MySQL.

Одной из распространенных ошибок соединения клиента с сервером в MySQL является «ОШИБКА 2002 (HY000): невозможно подключиться к локальному серверу MySQL через сокет '/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 заблокирован брандмауэром или любой службой блокировки портов. .

ps xa | grep mysqld | grep -v mysqld

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

sudo netstat -tlpn | grep "mysql"

2. Не могу подключиться к серверу MySQL.

Другая часто встречающаяся ошибка подключения: «(2003) Невозможно подключиться к серверу MySQL на «сервере» (10061)», что означает, что в сетевом соединении отказано.

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

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

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

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

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

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

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

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

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

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

Вы можете предоставить привилегии конкретному пользователю в конкретной базе данных для удаленного IP-адреса, используя следующие команды в оболочке MySQL.

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

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

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

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

Если проблема связана с таймаутом соединения, особенно когда MySQL пытается использовать начальное соединение с сервером, увеличьте значение параметра connect_timeout. . Но если значения BLOB превышают max_allowed_packet, вам необходимо установить более высокое значение для max_allowed_packet в вашем /etc Файл конфигурации /my.cnf в разделе [mysqld] или [client], как показано.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

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

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

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

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

[mysqld]
max_connections=1000

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

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

Первый шаг — убедиться в правильности запроса, если это так, то выполните следующие действия:

  • если вы используете клиент MySQL напрямую, запустите его с помощью --quick switch, чтобы отключить кэшированные результаты или
  • если вы используете драйвер MyODBC, в пользовательском интерфейсе конфигурации имеется дополнительная вкладка для флагов. Установите флажок «Не кэшировать результат».

Еще одним замечательным инструментом является MySQL Tuner – полезный сценарий, который подключается к работающему серверу MySQL и дает рекомендации по его настройке для повышения производительности.

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

Советы по оптимизации и настройке производительности MySQL можно найти в нашей статье: 15 полезных советов по настройке и оптимизации производительности MySQL/MariaDB.

7. MySQL продолжает падать

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

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

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

Альтернативно, выполните следующую команду mysqladmin, чтобы узнать время безотказной работы сервера MySQL.

sudo mysqladmin version -p 

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

sudo mysqladmin -i 5 status
OR
sudo mysqladmin -i 5 -r status 

Итог: определение причины проблемы или ошибки

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

Так как же это определить? Следующие пункты помогут вам определить, что именно вызывает проблему:

  1. Первый и самый важный шаг — просмотреть журналы MySQL, которые хранятся в каталоге /var/log/mysql/. Вы можете использовать утилиты командной строки, такие как Tail, для чтения файлов журналов.
  2. Если служба MySQL не запускается, проверьте ее статус с помощью systemctl или используйте команду journetctl (с флагом -xe) под systemd, чтобы изучить проблему.
  3. Вы также можете проверить файл системного журнала, такой как /var/log/messages или аналогичный, для поиска причин вашей проблемы.
  4. Попробуйте использовать такие инструменты, как Mytop, gls, top, ps или htop, чтобы проверить, какая программа использует весь процессор или блокирует компьютер, или проверить, не хватает ли вам памяти, дискового пространства, файловых дескрипторов или какого-либо другого важного ресурса. .
  5. Предполагая, что проблема заключается в каком-то вышедшем из-под контроля процессе, вы всегда можете попытаться завершить его (с помощью утилиты pkill или kill), чтобы MySQL работал нормально.
  6. Предположим, что сервер mysqld вызывает проблемы, вы можете запустить команду: mysqladmin -u root ping или mysqladmin -u rootprocesslist, чтобы получить какие-либо ответ от него.
  7. Если проблема связана с вашей клиентской программой при попытке подключения к серверу MySQL, проверьте, почему она не работает нормально, попробуйте получить от нее какие-либо выходные данные для устранения неполадок.

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

  1. Изучите MySQL/MariaDB для начинающих – Часть 1
  2. Как отслеживать базы данных MySQL/MariaDB с помощью Netdata в CentOS 7
  3. Как перенести все базы данных MySQL со старого на новый сервер
  4. Mytop — полезный инструмент для мониторинга производительности MySQL/MariaDB в Linux
  5. 12 лучших практик обеспечения безопасности MySQL/MariaDB для Linux

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