【问题标题】:MariaDB replication some times does not workingMariaDB 复制有时无法正常工作
【发布时间】:2016-05-05 01:57:41
【问题描述】:

Mysql 复制(主/从)有一个我以前从未见过的问题: 当我在我的 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 脚本插入的数据不会。

【问题讨论】:

  • 要明确一点:使用 PHP 脚本插入的数据在切换到 MariaDB 后仍在复制,但使用 Perl 脚本插入的数据不是?
  • MariaDB 与 MySQL 二进制兼容,因此 DBD::mysql 驱动程序工作正常。
  • mysql.log 与复制无关。被复制的东西进入主服务器的“binlog”;从那里它被转移到从站上的“中继日志”。
  • SHOW SLAVE STATUS;
  • 在 Perl 的每一步添加错误检查。

标签: perl mariadb


【解决方案1】:

我通过这个简单的 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 中的一个错误,我不知道。

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多