2017-03-19 18 views
0

ubuntu 16.04で実行されているmysql 5.7マスタと、Asustor NAS AS204-TEで動作しているMariaDB 10.0.28スレーブ間のバイナリログ複製を設定するだけです。複製は問題なく働いているいくつかの試みが私の唯一の心配は、2つのエラーメッセージは、私はメインページから「レプリケーション」ビューにクリックしたときのphpMyAdminが表示された後phpMyAdminのレプリケーションエラー:./libraries/dbi/DBIMysqli.class.php#298

...

エラー1:

Warning in ./libraries/dbi/DBIMysqli.class.php#298 
mysqli_fetch_array(): Malformed server packet. Field length pointing 0 bytes after end of packet 

Backtrace 

./libraries/dbi/DBIMysqli.class.php#298: mysqli_fetch_array(
object, 
integer 1, 
) 
./libraries/DatabaseInterface.class.php#2760: PMA_DBI_Mysqli->fetchAssoc(object) 
./libraries/DatabaseInterface.class.php#2069: PMA_DatabaseInterface->fetchAssoc(object) 
./libraries/replication_gui.lib.php#612: PMA_DatabaseInterface->fetchResult(
string 'SHOW SLAVE HOSTS', 
NULL, 
NULL, 
) 
./libraries/replication_gui.lib.php#56: PMA_getHtmlForReplicationSlavesTable(boolean true) 
./server_replication.php#56: PMA_getHtmlForMasterReplication() 

エラー2:

Warning in ./libraries/dbi/DBIMysqli.class.php#298 
mysqli_fetch_array(): Error while reading a row 

Backtrace 

./libraries/dbi/DBIMysqli.class.php#298: mysqli_fetch_array(
object, 
integer 1, 
) 
./libraries/DatabaseInterface.class.php#2760: PMA_DBI_Mysqli->fetchAssoc(object) 
./libraries/DatabaseInterface.class.php#2069: PMA_DatabaseInterface->fetchAssoc(object) 
./libraries/replication_gui.lib.php#612: PMA_DatabaseInterface->fetchResult(
string 'SHOW SLAVE HOSTS', 
NULL, 
NULL, 
) 
./libraries/replication_gui.lib.php#56: PMA_getHtmlForReplicationSlavesTable(boolean true) 
./server_replication.php#56: PMA_getHtmlForMasterReplication() 

ので、少しロジック次のエラーメッセージがマスターに接続するスレーブをリストアップを中心に展開しているようです。だから私は、エラーで「すべてを無視」をクリックし、「--report-host = xxx」がスレーブに設定されていることを確認するためのヒント以外の何も表示していない「接続されたスレーブを表示する」リンクをクリックします。私は、必要なパラメータを持つスレーブからmysql(MariaDB)インスタンスが開始していることを確認し、マスターのコマンドラインからmysqlに入り、SHOW SLAVE HOSTSを発行しました。私に次の出力を与える...

私の次のステップはこれをさらにデバッグする必要があるので明確ではないので、どのポインタにも感謝しますか?

+0

誰もが代替案を提示できない限り、私はgithubの問題にこの問題をエスカレートする必要があるかもしれないと思っています。 – Kelvin

+0

[phpMyAdmin](https://github.com/phpmyadmin/phpmyadmin/issues/13117)の問題を提起しました。この問題は、PHPとMySQLの問題です。 [ubuntu](https://bugs.launchpad.net/ubuntu/+source/php-defaults/+bug/1675117)のバグを修正しました – Kelvin

+0

ubuntuのバグ修正を使って最新のPHP 7.0.17パッケージをテストしましたが、それでも問題が存在する。今、[バグ](https://bugs.php.net/bug.php?id=74320)をPHPで作成しました。 – Kelvin

答えて

0

私はPHPでバグの提出をしているような印象を受けています。

これはphpMyAdminの障害ではなく、PHPのmysqli拡張モジュールによってエラーが生成されており、次のコードを使用して再現できます(コードスニペットのクレジットはgijubで自分の問題を取り上げたnijelになります)。 ..

<?php 
error_reporting(E_ALL); 

$link = mysqli_connect("localhost", "my_user", "my_password"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$query = "SHOW SLAVE HOSTS"; 
$result = mysqli_query($link, $query); 

/* get associative array */ 
while (($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) !== null) { 
    print_r($row); 
} 

/* free result set */ 
mysqli_free_result($result); 

/* close connection */ 
mysqli_close($link); 
?> 

私が発行されているコマンドは、4つの値を返す必要がありますので、mysqli拡張モジュールが不平を言っている理由があるが、私のユースケースにはそれだけで3本を返すMariaDBスレーブがserver_uuidを実装していないためであると考えていますMySQLの対応版であるのに対して、does.のようになります。その結果、スレーブからゲストへの戻り値は不完全で、エラーメッセージの内容にいくらか揃っています。私がPHPで提出したバグは、mysqli拡張がこれらのニュアンスをより良く受け入れるべきかどうかを、うまく明確にするでしょう。私の複製ユースケースは開発者によって文書化されているので、私はそれをすべきだと思っていたでしょう。

私の理論をいくらか証明するために私はテストコンテナを作成し、ubuntuランプパッケージとphpmyadminをデプロイし、シナリオを再作成しましたが、マスターとスレーブの両方にmysqlを使用しました。 server_uuidが実装されているので、 'SLAVE HOSTS;を表示する'コマンドは4つの値と上記の両方のテストスクリプトとphpMyAdminの両方を返すことはありません。

レプリケーションは確かに機能しているので、これは私が一緒に暮らしていくほど面倒です。