mysqldump 停止转换到 MariaDB - set-gtid-purged=OFF 问题?

mse*_*ert 2 php mysql mariadb

我在共享服务器 (webhostinghub) 上运行每晚的 CRON 作业来备份我的 mySQl InnoDB 数据库。CRON 作业运行一个 php 脚本,该脚本依次mysqldump通过passthrough()以下方式发出命令;

\n\n
$return = -1;\n$command = "mysqldump -h localhost -u server_user -ppassword --add-drop-table --quick --set-gtid-purged=OFF server_database > ./backup/backup-2018-02-19.sql"; \n\npassthrough($command, $return);    // note: I just added the $return parameter to see what it is returning which is `7` => non zero tells me there is some error but there is no further info I can find.\n
Run Code Online (Sandbox Code Playgroud)\n\n

该脚本运行多年,没有出现错误,最近开始创建零字节文件。

\n\n

我从 phpMyAdmin 注意到:

\n\n
Server type: MariaDB\nServer version: 10.2.11-MariaDB-log - MariaDB Server\nProtocol version: 10 \n
Run Code Online (Sandbox Code Playgroud)\n\n

我不记得曾参加过MariaDB,很明显我的提供商在没有提及的情况下将我切换了(感谢 webhostinghub),这就是问题所在。我知道它们应该是 99% 兼容的,但这就是 1% 吗?

\n\n

我删除了--set-gtid-purged=OFF参数,备份“似乎”已经工作(我尚未验证数据,但文件现在有数据)。

\n\n

我不记得为什么添加这个--set-gtid-purged=OFF参数,而且它的作用对我来说并不完全明显。我知道它用于全局事务标识符\xe2\x80\x99s (GTID\xe2\x80\x99s),但不确定我是否使用这些。我不“复制”,但希望我的导出和导入保留唯一的主 ID。我导入到本地主机上的 mysql 数据库中。

\n\n

如果您能帮助我确定数据库mysqldump的等效命令以及导入本地主机数据库MariaDB时需要注意的事项,我将不胜感激mysql

\n\n

谢谢

\n

ele*_*nst 5

MariaDB中基于GTID的复制的实现与MySQL完全不同,因此诸如工具等支持它的逻辑mysqldump也不兼容。set-gtid-purgedMySQL 版本中的选项mysqldump设置了一个不存在的变量,并且在 MariaDB 中没有任何意义,因此该选项也不存在。如果您一般不使用复制,特别是 GTID,则只需从命令行中删除该选项即可,其余部分应该以相同的方式工作。如果这就是您所说的主 id 的意思,它应该对主键没有影响。

MariaDB 和 MySQL 之间的选项/语法级别上的“几乎完全兼容”对于5.5 及以下版本的发行版来说是正确的。从 MariaDB 10.0 和 MySQL 5.6 开始,存在明显的差异。

以下是MariaDB 和 MySQL 之间已知的不兼容性的列表。可能不完整,但应该涵盖了大部分。

将 MySQL 服务器的转储加载到 MariaDB 服务器应该可以工作,除非 MySQL 服务器使用了 MariaDB 没有或以不同形式提供的某些语法或功能。将 MySQL 版本生成的转储加载mysqldump到 MariaDB 服务器中可能会导致问题,例如,如果它设置了 MariaDB 没有的变量(例如@@global.gtid_purged由 控制set-gtid-purged,可能还有更多)。在这种情况下,可能需要手动编辑转储。