【发布时间】: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 的每一步添加错误检查。