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

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

Мануал

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

На протяжении многих лет он был выбором по умолчанию для веб-приложений и по-прежнему остается популярным по сравнению с другими механизмами баз данных.

См. также Как установить последний MySQL 8.0 на RHEL / CentOS и Fedora

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

Ваш сайт или веб-приложение работают на MySQL?

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

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

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

Одной из распространенных ошибок подключения клиента к серверу в 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 не заблокирован брандмауэром или любой службой блокировки портов.

$ ps xa | grep mysqld | grep -v mysqld

4 способа узнать, какие порты прослушиваются в Linux

$ sudo netstat -tlpn | grep "mysql"

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

Другая часто встречающаяся ошибка подключения -“(2003) Can’t connect to MySQL server on ‘server’ (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 'itsecforu'@'localhost';

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

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

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

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

Вы можете столкнуться с этой ошибкой Lost Connection to MySQL Server по одной из следующих причин: плохое сетевое соединение, время ожидания соединения или проблема со значениями 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 обнаруживает ошибку «too many connections», это означает, что все доступные соединения используются другими клиентами.

Количество соединений (по умолчанию 151) контролируется системной переменной max_connections;

Вы можете устранить проблему, увеличив ее значение, чтобы разрешить больше подключений в файле конфигурации /etc/my.cnf.

[mysqld]
max_connections=1000

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

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

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

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

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

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

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
или
$ sudo mysqladmin -i 5 -r status

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий