Устранение ошибок, часто возникающих во время или после миграции в База данных 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" host: "hostIP" (init_connect команда завершилась ошибкой)

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

Существуют некоторые параметры сервера, такие как require_secure_transport не поддерживаются на уровне сеанса, поэтому попытка изменить значения этих параметров может init_connect привести к ошибке 1184 при подключении к гибкому экземпляру сервера База данных Azure для 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 и роль администратора баз данных. В результате вы можете столкнуться с некоторыми распространенными ошибками, перечисленными ниже.

ERROR 1419: у вас нет прав супер и двоичного ведения журнала (возможно, потребуется использовать менее безопасную переменную 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 гибком сервере, так как журнал bin не предоставляет никаких угроз.

ОШИБКА 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, которые имеют разные разрешения, поэтому такое решение может оказаться невозможным. ИЛИ
  • Измените файл дампа или скрипт CREATE VIEW, удалив инструкцию DEFINER= из файла дампа. ИЛИ
  • Либо измените файл дампа или скрипт CREATE VIEW, указав в качестве значений DEFINER пользователя с правами администратора, который импортирует или выполняет файл скрипта.

Совет

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

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

При попытке импортировать файл дампа из гибкого экземпляра сервера База данных Azure для 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 вход администратора сервера предоставляется конечным пользователем во время создания сервера. Это имя входа позволяет создавать базы данных, добавлять новых пользователей и предоставлять разрешения. Если удалено имя входа администратора сервера, отозваны его разрешения или изменен его пароль, в приложении при установке подключения могут отображаться ошибки. Ниже приведены некоторые распространенные ошибки.

ERROR 1045 (28000): доступ запрещен для пользователя "имя пользователя"@'IP-адрес" (с помощью пароля: ДА)

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

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

Решение.

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

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

Следующие шаги

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