首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库复制错误:./ phpMyAdmin /dbi/DBIMysqli.class.php#298

库复制错误:./ phpMyAdmin /dbi/DBIMysqli.class.php#298
EN

Stack Overflow用户
提问于 2017-03-20 00:57:50
回答 1查看 3.8K关注 0票数 0

只需在运行在ubuntu16.04上的MySQL5.7主服务器和运行在我的Asustor NAS204-TE上的MariaDB 10.0.28从服务器之间设置二进制日志复制。

经过几次尝试,复制工作正常,但我唯一担心的是,当我从主页单击' replication‘视图时,phpmyadmin会显示两条错误消息……

错误1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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()

因此,遵循一点逻辑,错误消息似乎围绕着列出连接到主服务器的从服务器。因此,我在错误上单击'Ignore All‘,然后单击'Show connected slaves’链接,该链接只显示一个提示,以确保在从服务器上设置了"--report-host=xxx“。我已经确认mysql (MariaDB)实例正在使用所需的参数在从服务器上启动,并通过主服务器上的命令行进入mysql,并发出SHOW slave HOSTS命令;给出了以下输出...

代码语言:javascript
复制
mysql> show slave hosts;
+-----------+----------+------+-----------+------------+
| Server_id | Host     | Port | Master_id | Slave_UUID |
+-----------+----------+------+-----------+------------+
|         2 | blacknas | 3306 |         1 |            |
+-----------+----------+------+-----------+------------+
1 row in set (0.00 sec)

我不清楚我的下一步应该是什么,以进一步调试这一点,所以我会感谢任何指示?

EN

回答 1

Stack Overflow用户

发布于 2017-03-29 05:56:46

好的,所以我自己回答这个问题,因为我得到的印象是,用PHP提交bug将需要一段时间。

这不是phpMyAdmin的错误,而是由PHP中的mysqli扩展生成的错误,可以使用以下代码重现(代码片段的功劳归功于nijel,他在github上发现了我的问题)……

代码语言:javascript
复制
<?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);
?>

我相信mysqli扩展出现问题的原因是因为发出的命令应该返回4个值,但在我的用例中,它只返回3个值。这是因为MariaDB从机没有实现server_uuid特性,而它的MySQL从机does.因此从从机到来宾的返回值是不完整的,这在某种程度上与错误消息所说的一致。我向PHP提交的bug有望澄清mysqli扩展是否应该更好地容忍这些细微差别。因为我的复制用例是由开发人员记录的,所以我本以为应该这样做,但是。

无论如何,为了证明我的理论,我创建了一个测试容器,部署了ubuntu lamp包和phpmyadmin,并重新创建了场景,但在主机和从机上都使用了mysql。在实现server_uuid时,“SHOW SLAVE HOSTS;”命令将返回所有4个值,并且上面的测试脚本和phpMyAdmin都不再发出牢骚声。

复制肯定是有效的,所以这更是一个烦人的问题,我将继续忍受。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42889395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档