MYSQLDUMP + GTID = ERROR 1227 (42000) Access denied

Резервирование баз данных MySQL выполняется со следующим набором флагов (переменные понятны из их названий):

--force --routines --triggers --opt  --events --single-transaction --set-gtid-purged=ON -h $HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db

При восстановлении пользователем без расширенных привилегий будет ошибка:

mysql -u user_db_112 -h 10.5.15.62 -p < db_112 
Enter password: 
ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation

Потому что если нужно просто сделать копию схемы из имеющегося дампа, а не откатывать GTID, то в файле дампа нужно удалить строки

В начале дампа


— GTID state at the beginning of the backup

SET @@GLOBAL.GTID_PURGED=/*!80000 ‘+’*/ ‘1481356a-6b18-11eb-9eb2-005056bf2056:1,
6deca1ff-698c-11eb-b8c8-005056bf10a2:1-20,
890f62c8-e1fe-11e9-80e0-005056bf2156:1-995668816,
b57ab864-6a07-11eb-8f09-005056bf016a:1-7′;

В начале дампа

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE=’+00:00′ */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=’NO_AUTO_VALUE_ON_ZERO’ */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;

В конце дампа



— Dumping routines for database ‘db_112’

SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

Close Menu