Содержание

Устраняем типичные ошибки в MySQL

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"

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

Устранение распространенных ошибок — База данных Azure для MySQL

  • Статья

Область применения: отдельный сервер Базы данных Azure для MySQL Гибкий сервер Базы данных Azure для MySQL

Важно!

База данных Azure для MySQL — отдельный сервер находится на пути прекращения поддержки. Мы настоятельно рекомендуем выполнить обновление до База данных Azure для MySQL — гибкий сервер. Дополнительные сведения о миграции на База данных Azure для MySQL — гибкий сервер см. в статье Что происходит с База данных Azure для MySQL отдельным сервером?

База данных Azure для MySQL — это полностью управляемая служба на базе версии MySQL для сообщества. Функциональные возможности MySQL в среде управляемой службы могут отличаться от возможностей MySQL в вашей собственной среде. Из этой статьи вы узнаете о некоторых распространенных ошибках, с которыми могут столкнуться пользователи при миграции в Базу данных Azure для MySQL или осуществлении в ней разработки.

Распространенные ошибки при подключении

ERROR 1184 (08S01). Прервано подключение 22 к базе данных «db-name» пользователя «user» узла «hostIP» (сбой команды init_connect)

Описанная выше ошибка возникает после успешного входа и настройки сеанса, но перед выполнением любой команды. Приведенное выше сообщение указывает, что для параметра сервера init_connect задано неверное значение, что приводит к сбою инициализации сеанса.

Некоторые параметры сервера, такие как require_secure_transport, не поддерживаются на уровне сеанса, поэтому попытка изменить значения этих параметров с помощью init_connect может привести к ошибке 1184 при подключении к серверу MySQL, как показано ниже.

mysql> show databases; ОШИБКА 2006 (HY000). Не удается обнаружить сервер MySQL. Нет соединения. Попытка повторного подключения… Идентификатор подключения: 64897. Текущая база данных: *** NONE *** ОШИБКА 1184 (08S01). Прервано подключение 22 к базе данных «db-name» пользователя «user» узла «hostIP» (сбой команды init_connect)

Решение. Сбросьте значение init_connect на вкладке «Параметры сервера» на портале Azure и задайте только поддерживаемые параметры сервера с помощью параметра init_connect.

Ошибки из-за отсутствия разрешения SUPER и роли администратора баз данных

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

ОШИБКА 1419. У вас нет разрешения SUPER, и включено ведение двоичного журнала (вы

можете использовать менее безопасную переменную log_bin_trust_function_creators)

Такая ошибка может произойти при создании функции или триггера, как показано ниже, или при импорте схемы. Инструкции DDL, например CREATE FUNCTION или CREATE TRIGGER, записываются в двоичный журнал, поэтому их может выполнять вторичная реплика. У потока реплики SQL есть полные права доступа, которые можно использовать для повышения привилегий. Для защиты от этой опасности ядро MySQL, помимо обычного обязательного разрешения CREATE ROUTINE, требует для серверов с включенным ведением журнала в двоичном формате наличия разрешения SUPER.

CREATE FUNCTION f1(i INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
  RETURN i;
END;

Решение. Чтобы устранить эту ошибку, на портале в колонке параметров сервера задайте для log_bin_trust_function_creators значение 1, а затем выполните инструкции DDL или импортируйте схему, чтобы создать нужные объекты. Вы можете оставить для log_bin_trust_function_creators значение 1 для сервера, чтобы эта ошибка не возникала в будущем. Хотя мы рекомендуем рассматривать переменную log_bin_trust_function_creators как угрозу безопасности, как описано в документации сообщества MySQL, эта угроза минимальна в Базе данных Azure MySQL, так как двоичный журнал не подвергается каким-либо угрозам.

ОШИБКА 1227 (42000) в строке 101. Доступ запрещен — для выполнения этой операции необходимо иметь (по крайней мере одно) разрешение SUPER; операция завершилась ошибкой с кодом выхода 1

Описанная выше ошибка может произойти при импорте файла дампа или создании процедуры, содержащей предложения DEFINER.

Решение. Чтобы устранить эту ошибку, пользователь с правами администратора может предоставить права на создание или выполнение процедур с помощью команды GRANT, как показано в следующих примерах.

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb. myproc TO 'someuser'@'somehost';

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

DELIMITER;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`127.0.0.1`*/ /*!50003
DELIMITER;;
/* Modified to */
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`AdminUserName`@`ServerName`*/ /*!50003
DELIMITER ;
ОШИБКА 1227 (42000) в строке 295. Доступ запрещен — для выполнения этой операции необходимо иметь (по крайней мере одну) привилегию SUPER или SET_USER_ID.

Описанная выше ошибка может возникнуть при выполнении инструкций CREATE VIEW с DEFINER при импорте файла дампа или выполнении скрипта. В Базе данных Azure для MySQL нельзя назначить какому-либо пользователю привилегии SUPER или SET_USER_ID.

Решение.

  • Для выполнения инструкции CREATE VIEW по возможности используйте пользователя с правами DEFINER. Вполне вероятно, что существует множество представлений с разными пользователями с правами definer, которые имеют разные разрешения, поэтому такое решение может оказаться невозможным. OR
  • Измените файл дампа или скрипт CREATE VIEW, удалив инструкцию DEFINER= из файла дампа. OR
  • Либо измените файл дампа или скрипт CREATE VIEW, указав в качестве значений DEFINER пользователя с правами администратора, который импортирует или выполняет файл скрипта.

Совет

Для изменения файла дампа используйте sed или perl, а для изменения инструкции DEFINER= — скрипт SQL.

ОШИБКА 1227 (42000) в строке 18. Доступ запрещен — для выполнения этой операции необходимо иметь (по крайней мере одно) разрешение SUPER

Эта ошибка может возникнуть, когда вы пытаетесь импортировать файл дампа с сервера MySQL с включенным GTID на целевой сервер Базы данных Azure для MySQL. Mysqldump добавляет инструкцию SET @@SESSION.sql_log_bin=0 в файл дампа с сервера, где используются GTID, что отключает ведение двоичного журнала при перезагрузке файла дампа.

Решение. Чтобы эта ошибка не возникала при импорте, удалите или закомментируйте приведенные ниже строки в файле mysqldump и выполните импорт еще раз для проверки успешного выполнения.

ЗАДАЙТЕ @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; ЗАДАЙТЕ @@SESSION.SQL_LOG_BIN= 0; ЗАДАЙТЕ @@GLOBAL.GTID_PURGED=»; ЗАДАЙТЕ @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

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

Ошибка 1045 (28000): доступ запрещен для пользователя «имя_пользователя»@»IP-адрес» (используется ли пароль: да)

Описанная выше ошибка возникает в следующих случаях:

  • имя пользователя не существует;
  • имя пользователя удалено;
  • пароль пользователя изменен или сброшен.

Решение.

  • Проверьте, существует ли указанное имя пользователя в качестве допустимого на сервере или это имя было случайно удалено. Для выполнения следующего запроса войдите учетную запись пользователя в Базе данных Azure для MySQL:

    select user from mysql.user;
    
  • Если вы не можете войти в MySQL для выполнения приведенного выше запроса, рекомендуем сбросить пароль администратора с помощью портала Azure. Сброс пароля на портале Azure позволяет восстановить пользователя, сбросить пароль и восстановить разрешения администратора, чтобы вы могли входить в систему с помощью данных администратора сервера и выполнять дальнейшие операции.

Дальнейшие действия

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

  • Опубликуйте свой вопрос на странице вопросов и ответов на сайте Microsoft Q&A& или Stack Overflow.
  • Отправьте сообщение электронной почты команде разработчиков службы «База данных Azure для MySQL» по адресу @Ask Azure DB for MySQL. Этот адрес не является псевдонимом службы технической поддержки.
  • Обратитесь в Службу поддержки Azure, отправив запрос с портала Azure. Чтобы устранить проблему, связанную с учетной записью, отправьте запрос в службу поддержки на портале Azure.
  • Чтобы отправить отзыв или отправить запрос на новые возможности, создайте запись через UserVoice.

MySQL: 12 наиболее распространенных ошибок, с которыми вы можете столкнуться авторы Чинтан Мехта, Анкит Бхавсар, Субхаш Шах и Хетал Оза. Эта книга содержит советы и рекомендации по решению проблем, с которыми вы можете столкнуться при администрировании решения MySQL.

[/box]

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

1. Доступ запрещен

MySQL предоставляет систему привилегий, которая аутентифицирует пользователя, который подключается с хоста, и связывает пользователя с привилегиями доступа к базе данных. Привилегии включают SELECT, INSERT, UPDATE и DELETE и могут идентифицировать анонимных пользователей и предоставлять привилегии для определенных функций MySQL, таких как LOAD DATA INFILE и административные операции. Ошибка отказа в доступе может возникать по многим причинам. Во многих случаях проблема возникает из-за учетных записей MySQL, которые клиентские программы используют для подключения к серверу MySQL с разрешения сервера.

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

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

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

Системная переменная connection_timeout определяет количество секунд, в течение которых сервер mysqld ожидает пакет соединения перед ответом на тайм-аут соединения. Иногда эта ошибка может возникать, когда клиент пытается установить начальное соединение с сервером, а значение connection_timeout установлено на несколько секунд. В этом случае проблему можно решить, увеличив значение connection_timeout в зависимости от расстояния и скорости соединения. SHOW GLOBAL STATUS LIKE и Aborted_connects можно использовать, чтобы определить, сталкиваемся ли мы с этим чаще. Можно с уверенностью сказать, что увеличение значения connection_timeout является решением, если сообщение об ошибке содержит пакет авторизации чтения. Возможно, проблема может возникнуть из-за больших значений Binary Large OBject (BLOB), чем max_allowed_packet. Это может привести к потере соединения с ошибкой сервера MySQL с клиентами. Если наблюдается ошибка ER_NET_PACKET_TOO_LARGE, это подтверждает, что значение max_allowed_packet должно быть увеличено.

3. Ошибка ввода пароля при неправильном вводе

Клиенты MySQL запрашивают пароль, когда клиентская программа вызывается с параметром —password или -p без значения пароля. Ниже приведена команда:

 > mysql -u user_name -p

Введите пароль: 

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

4. Хост имя_хоста заблокирован

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

 Хост 'имя_хоста' заблокирован из-за множества ошибок подключения.

Разблокировать с помощью «mysqladmin flush-hosts» 

Системная переменная max_connect_errors определяет разрешенное количество последовательных прерванных запросов на подключение. При наличии невыполненных запросов max_connect_errors без успешного подключения mysqld предполагает, что что-то не так, и блокирует хост от дальнейших подключений до тех пор, пока не будет выполнен оператор FLUSH HOSTS или команда mysqladmin flush-hosts.

mysqld по умолчанию блокирует хост после 100 ошибок подключения. Его можно настроить, установив значение max_connect_errors при запуске сервера следующим образом:

 > mysqld_safe --max_connect_errors=10000 

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

 mysql> SET GLOBAL max_connect_errors=10000 ; 

Сначала следует проверить, что с TCP/IP-подключениями от хоста все в порядке, если для определенного хоста получена ошибка host_name is block. Увеличение значения переменной max_connect_errors не помогает, если в сети есть проблемы.

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

Эта ошибка указывает на то, что все доступные подключения используются для других клиентских подключений. max_connections — это системная переменная, которая управляет количеством подключений к серверу. Значение по умолчанию для максимального количества подключений – 151. Мы можем установить большее значение, чем 151, для системной переменной max_connections, чтобы поддерживать больше подключений, чем 151. клиенты для подключения. Одно дополнительное подключение зарезервировано для аккаунтов с правами CONNECTION_ADMIN или SUPER. Эта привилегия может быть предоставлена ​​администраторам с доступом к привилегии PROCESS. С этим доступом администратор может подключиться к серверу, используя зарезервированное соединение. Они могут выполнить команду SHOW PROCESSLIST для диагностики проблем, даже если исчерпано максимальное количество клиентских подключений.

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

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

 mysql: Недостаточно памяти в строке 42, 'malloc. c'

mysql: требуется 8136 байт (8 КБ), используемая память: 12481367 байт (12189 КБ)

ОШИБКА 2008: Клиенту MySQL не хватило памяти 

Чтобы устранить проблему, мы должны сначала проверить правильность запроса. Ожидаем ли мы, что запрос вернет так много строк? Если нет, мы должны исправить запрос и выполнить его снова. Если запрос правильный и не нуждается в исправлении, мы можем подключить mysql с опцией –quick. Использование параметра –quick приводит к вызову функции C API mysql_use_result() для получения набора результатов. Функция добавляет больше нагрузки на сервер и меньше на клиента.

7. Слишком большой пакет

Коммуникационный пакет является одним из следующих:

  • Один оператор SQL, который клиент MySQL отправляет на сервер MySQL
  • Одна строка, отправленная клиенту MySQL с сервера MySQL
  • Событие двоичного журнала, которое отправляется с главного сервера репликации на подчиненное устройство репликации

Размер пакета 1 ГБ — это максимально возможный размер пакета, который может быть передан на сервер или клиент MySQL 8 или с них. Сервер или клиент MySQL выдает ошибку ER_NET_PACKET_TOO_LARGE и закрывает соединение, если получает пакет больше, чем max_allowed_packet bytes.

Размер max_allowed_packet по умолчанию составляет 16 МБ для клиентской программы MySQL. Чтобы установить большее значение, можно использовать следующую команду:

 > mysql --max_allowed_packet=32M 

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

8. Таблица заполнена

Ошибка заполнения таблицы возникает в одном из следующих условий:

  • Диск заполнен
  • Таблица достигла максимального размера

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

9. Невозможно создать/записать в файл

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

 Невозможно создать /запись в файл 'sqla3fe_0. ism' 

Возможное решение этой ошибки — запустить сервер mysqld с параметром –tmpdir. Ниже приведена команда:

 > mysqld --tmpdir C:/temp 

10. Рассинхронизация команд

Если функции клиента вызываются в неправильном порядке, будет получена ошибка рассинхронизации команд. Это означает, что команда не может быть выполнена в клиентском коде. Например, если мы выполним mysql_use_result() и попытаемся выполнить другой запрос перед выполнением mysql_free_result(), может возникнуть эта ошибка. Это также может произойти, если мы выполним два запроса, которые возвращают набор результатов, не вызывая функции mysql_use_result() или mysql_store_result() между ними.

11. Игнорирование пользователя

При обнаружении учетной записи в таблице пользователей с недопустимым паролем при запуске сервера mysqld или при перезагрузке сервером таблиц привилегий возникает следующая ошибка:

 Найден неправильный пароль для пользователя 'some_user' @'некоторый_хост'; ignoring user 

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

12. Таблица tbl_name не существует

Следующая ошибка указывает на то, что указанная таблица не существует в базе данных по умолчанию:

 Таблица 'tbl_name' не существует

Не удается найти файл: 'tbl_name' (ошибка: 2) 

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

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

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

Читать далее

MySQL 8.0 обычно доступен с дополнительными функциями

Базовый веб-сайт с использованием базы данных Node.js и MySQL

 

Как исправить ошибку MySQL 1064 (методы 5)

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

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

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

Начнем!

Почему возникает ошибка MySQL 1064

Ошибка MySQL 1064 является синтаксической ошибкой. Это означает, что проблема возникает из-за того, что MySQL не понимает, что вы от него просите. Однако существует множество различных ситуаций, которые могут привести к такого рода недопониманию между вами и вашей базой данных.

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

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

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

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

О нет, вы получаете ошибку MySQL 1064…😭 Не отчаивайтесь! Вот 5 проверенных решений, чтобы исправить это немедленно 🙏Нажмите, чтобы твитнуть

Как исправить ошибку MySQL 1064 (5 методов)

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

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

1. Исправьте опечатки в командах

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

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

Альтернативой ручной проверке вашей работы является использование такого инструмента, как EverSQL:

Средство проверки синтаксиса EverSQL

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

2. Замена устаревших команд

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

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

Удаление устаревших команд вручную

После того, как вы определили, какая команда, вероятно, вызывает проблему, вы можете просто использовать функцию «найти и заменить», чтобы удалить устаревшую команду и добавить новую версию. Например, если вы использовали storage_engine и обнаружили, что он больше не работает, вы можете просто заменить все экземпляры новой командой default_storage_engine .

3. Назначение зарезервированных слов

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

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

4. Добавить недостающие данные

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

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

5. Используйте режим совместимости для переноса баз данных WordPress

Это окончательное решение ошибки 1064 не так просто, как другие в нашем списке. Однако, если вы переносите свой сайт WordPress на новый хост или иным образом перемещаете его на другой сервер, вам необходимо предпринять дополнительные шаги, чтобы избежать проблем с вашей базой данных.

Самое простое решение — использовать плагин миграции, который включает режим совместимости, например WP Migrate DB:

WP Migrate DB плагин WordPress

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

WP Migrate DB settings

Установите флажок рядом с Совместимость со старыми версиями MySQL перед началом переноса сайта. Таким образом, вы сможете избежать каких-либо проблем во время процесса.

Информация

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

Резюме

Ошибки базы данных могут нарушить ваши планы и даже поставить под угрозу стабильность вашего веб-сайта. Знание того, как решить такие проблемы, как ошибка MySQL 1064, поможет вам быстро реагировать и свести к минимуму время простоя вашего сайта.

Есть пять способов исправить ошибку MySQL 1064, когда вы сталкиваетесь с ней, в зависимости от ее наиболее вероятной причины:

  1. Исправьте опечатки в командах.
  2. Заменить устаревшие команды.
  3. Назначение зарезервированных слов.
  4. Добавить недостающие данные.
  5. Перевести базы данных WordPress в режим совместимости.

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

  • Простая настройка и управление в панели управления MyKinsta
  • Экспертная поддержка 24/7
  • Лучшее оборудование и сеть Google Cloud Platform на базе Kubernetes для максимальной масштабируемости
  • Интеграция Cloudflare корпоративного уровня для скорости и безопасности
  • Глобальный охват аудитории с 35 центрами обработки данных и 275 точками присутствия по всему миру

Начните с бесплатной пробной версии нашего хостинга приложений или хостинга баз данных. Ознакомьтесь с нашими планами или поговорите с отделом продаж, чтобы найти наиболее подходящий вариант.