MariaDB 复制有时不起作用

MariaDB replication some times does not working

我在 Mysql 复制 (Master/Slave) 中遇到了以前从未遇到过的问题: 当我在我的 PHP 脚本上执行时,它在 mysql 控制台查询(如 "INSERT INTO")上执行时效果很好。它们在 mysql 从机上完美复制。 但是:如果我使用 Perl DBI 在 Perl 脚本上执行相同的操作,则不会。然后它只存储在 Mysql 主服务器上。在从属服务器上的 mysql.log 文件中,没有任何内容到达。自从我将两台服务器从 Mysql 迁移到 MariaDB 后,我就遇到了这个问题。 是否有 Perl DBI 客户端绝对应该做的复制工作?

我正在使用这个简单的代码来插入数据:

#!/usr/bin/perl
use DBI;
$dsn = 'dbi:mysql:database=mysql;host=myhostname';
$dbh = DBI->connect($dsn, 'mouser', 'password',
            { RaiseError => 1, AutoCommit => 0 }) || exit(1);
...
$sth = $dbh->prepare("INSERT INTO mydatabase.mytable (user, domain) VALUES('$account_name', '$domain')");
$sth->execute();
$dbh->commit();

有没有可能因为DBI要用mariadb驱动所以不复制?像 $dsn = 'dbi:mariadb:database=mysql;host=myhostname';如果存在?

明确一点:在切换到 MariaDB 后,使用 PHP 脚本插入的数据仍在复制,但使用 Perl 脚本插入的数据则不会。

我用这个简单的 Perl 脚本找到了复制失败的原因: 有写着:

$dsn = 'dbi:mysql:database=mysql;host=myhostname';
...
$sth = $dbh->prepare("INSERT INTO mydatabase.mytable (user, domain) VALUES('$account_name', '$domain')");

这不起作用,因为 DBI 连接到数据库 "mysql" 而不是 "mydatabase"(参见 "database=mysql")。即使 INSERT INTO 将行直接插入数据库 "mydatabase",MariaDB 主服务器也会忽略它进行复制。奇怪的是,它与 MySQL 完美配合,但不适用于 MariaDB(5.5.46 版)。也许它是 MariaDB 中的一个错误,我不知道。