mysqldump停止使用转换为MariaDB - set-gtid-purged = OFF问题?

时间:2018-02-20 01:13:30

标签: php mysql mariadb

我在共享服务器(webhostinghub)上运行夜间CRON作业来备份mySQl InnoDB数据库。 CRON作业运行一个php脚本,然后通过mysqldump发出passthrough()命令,如下所示;

$return = -1;
$command = "mysqldump -h localhost -u server_user -ppassword --add-drop-table --quick --set-gtid-purged=OFF server_database > ./backup/backup-2018-02-19.sql"; 

passthrough($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.

该脚本工作多年没有错误,最近开始创建零字节文件。

我从phpMyAdmin注意到:

Server type: MariaDB
Server version: 10.2.11-MariaDB-log - MariaDB Server
Protocol version: 10 

我不记得在MariaDB上,很明显我的提供商在没有提及的情况下转过身来(感谢webhostinghub),这就是问题所在。我知道他们应该99%兼容,但这是1%吗?

我删除了--set-gtid-purged=OFF参数,备份"出现"工作(我没有验证数据,但文件现在有数据)。

我无法记住为什么我添加--set-gtid-purged=OFF参数,它的作用对我来说并不完全明显。我知道它适用于全球交易标识符(GTID),但我不确定是否使用这些。我没有"复制"但希望我的导出和导入保持唯一的主要ID。我导入到我的localhost上的mysql数据库。

对于确定mysqldump数据库的等效MariaDB命令以及导入我的localhost mysql数据库时要注意的内容,我将不胜感激

由于

1 个答案:

答案 0 :(得分:2)

GTID-based replication in MariaDB的实现与MySQL完全不同,因此在mysqldump等工具中支持它的逻辑也不兼容。 MySQL set-gtid-purged版本中的mysqldump选项设置了一个不存在且在MariaDB中没有意义的变量,因此该选项也不存在。如果您一般不使用复制,特别是GTID,您可以从命令行中删除该选项,其余部分应该完全相同。它应该对主键没有影响,如果这是主要ID的意思。

"几乎完全兼容"对于发布行,包括5.5 ,MariaDB和MySQL之间的选项/语法级别是正确的。从MariaDB 10.0和MySQL 5.6开始,存在明显的差异。

这是list of known incompatibilities between MariaDB and MySQL。它可能不完整,但它应该涵盖大部分内容。

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