2016-01-27 40 views
2

我有一个问题,我从来没有见过与MySQL复制(主/从): 它工作出色,当我执行我的PHP脚本,在mysql控制台查询如“INSERT INTO ”。他们完美地复制在mysql slave机器上。 但是:如果我使用Perl DBI在Perl脚本上执行相同的操作,则不行。然后它只存储在Mysql主服务器上。在从服务器上的mysql.log文件中,没有任何内容到达。自从我将两台服务器从Mysql迁移到MariaDB后,我遇到了这个问题。 有什么Perl DBI客户端应该绝对做的复制工作?MariaDB复制有时不起作用

我使用这个简单的代码中插入数据:

#!/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脚本插入的数据不是。

+1

需要说明的是:切换到MariaDB后,使用PHP脚本插入的数据仍在复制,但是用Perl脚本插入的数据不是? – ThisSuitIsBlackNot

+0

MariaDB与MySQL二进制兼容,所以DBD :: mysql驱动程序可以正常工作。 – ThisSuitIsBlackNot

+0

'mysql.log'与复制无关。被复制的东西进入主文件的“binlog”中;从那里它被传送到从站上的“中继日志”。 –

回答

2

我发现为什么复制失败,这个简单的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中的一个错误,我不知道。