2016-01-27 42 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中的一個錯誤,我不知道。