JAV*_*VAC 13 mysql mysql5 mysql-workbench
我已经配置了 GTID 的 MySQL 主从设置。我取回了 master 的数据备份并将其导入到单个测试服务器。它无法导入为
ERROR 1839 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = ON
我试过--set-gtid-purged=OFFand AUTO,但没有运气。
小智 33
如果你运行一个
SHOW MASTER STATUS\G
Run Code Online (Sandbox Code Playgroud)
你会看到这样的:
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000299
Position: 780437462
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 075d81d6-8d7f-11e3-9d88-b4b52f517ce4:1-616637650,
e907792a-8417-11e3-a037-b4b52f51dbf8:1-25385296642
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
因为当启用 GTID 时,所有服务器都有自己的 uuid,并且有事务。我想您使用 mysqldump 创建了转储,如果您查看该文件的开头,您会发现类似以下内容:
--
-- GTID state at the beginning of the backup
--
SET @@GLOBAL.GTID_PURGED='075d81d6-8d7f-11e3-9d88-b4b52f517ce4:1-616648986,
e907792a-8417-11e3-a037-b4b52f51dbf8:1-25385296642';
Run Code Online (Sandbox Code Playgroud)
这是无法执行的命令。
您有以下选择:
从 mysql 转储文件中删除此命令。只需删除它。所有插入都将出现在从属设备上,因为它是本地事务
如果你想防止这种情况发生,你也可以在 slave 上重置 master
mysql> RESET MASTER;
这个命令会清理slave上的'Executed_Gtid_Set'变量,这样就可以直接导入dumpfile了,前面提到的set_global_gtid_purged变量就会起作用
创建 mysqldump 时,可以跳过 GTID 设置部分,--set-gtid-purged=OFF为 mysqldump添加参数。
笔记:
如果 GTID 子集在 master 和 slave 之间的 master 上不同(如果您想在复制设置中使用它),那么复制将不起作用,我建议进行二进制转储和恢复,因为将 slave 的 GTID 完全设置为 master 的。
使用 GTID 会出现很多新问题,但您的副本设置将更加一致。值得与之合作。
小智 5
如果您像我一样并且不想重新运行转储,因为这是一个非常长的操作,您可以在事后删除这些行。
find . -name '*.sql' -type f -exec perl -0 -i.bak -pe 's/SET \@\@GLOBAL\.GTID_PURGED=\x27.*?\x27;//gs' {} +
Run Code Online (Sandbox Code Playgroud)
在包含 .sql 文件的文件夹中运行此命令。它将把旧版本保存为.bak。
这对我有用。
| 归档时间: |
|
| 查看次数: |
25710 次 |
| 最近记录: |