Поделиться через


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

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

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

Решение.. Чтобы устранить эту ошибку, пользователь с правами администратора может предоставить права на создание или выполнение процедур с помощью команды 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. Скорее всего, есть много представлений с разными определяющими, имеющими разные разрешения, поэтому это может быть невозможно. ИЛИ
  • Измените файл дампа или скрипт 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 и выполните импорт еще раз для проверки успешного выполнения.

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION. SQL_LOG_BIN;
SET @@SESSION. SQL_LOG_BIN= 0; SET @@GLOBAL. GTID_PURGED='; SET @@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 позволяет восстановить пользователя, сбросить пароль и восстановить разрешения администратора, чтобы вы могли входить в систему с помощью данных администратора сервера и выполнять дальнейшие операции.