boxmoe_header_banner_img

Hello! 欢迎来到悠悠畅享网!

文章导读

phpMyAdmin多服务器配置教程:解决登录界面不显示服务器列表问题


avatar
作者 2025年8月27日 11

phpMyAdmin多服务器配置教程:解决登录界面不显示服务器列表问题

本教程详细阐述了在phpMyAdmin中配置多个数据库服务器的方法,旨在解决登录界面无法正确显示服务器下拉列表的问题。通过分析常见的配置误区,并提供官方推荐的循环配置模式及示例代码,帮助用户高效管理本地和远程数据库实例,确保phpMyAdmin能够正确识别并列出所有已配置的服务器。

问题背景:phpMyAdmin多服务器配置挑战

在管理多个数据库环境时,例如同时操作本地开发数据库和远程docker实例,phpmyadmin是一个常用的工具。然而,许多用户在尝试配置多个数据库服务器时,会遇到登录界面无法正确显示服务器下拉列表的问题。常见的现象包括:phpmyadmin只显示一个服务器、显示空白页面,或者在尝试手动调整 $i 变量时出现异常行为。

最初的尝试可能是在 /etc/phpmyadmin/config.inc.php 文件中,通过复制粘贴配置块并手动递增 $i 来添加服务器。例如,将一个服务器的配置放在 if 语句块中,然后尝试在外部或另一个 if 块中配置第二个服务器,并期待 $i 的递增能使其生效。然而,这种手动且分散的配置方式往往会导致phpMyAdmin无法正确识别和加载所有服务器,从而无法在登录界面提供服务器选择下拉框。

phpMyAdmin多服务器配置核心原理

phpMyAdmin通过读取 config.inc.php 文件中的 $cfg[‘Servers’] 数组来识别和管理所有可用的数据库服务器。这个数组是一个关联数组,其键值通常从 1 开始递增,每个键对应一个独立的服务器配置。理解其核心原理是成功配置多服务器的关键:

  1. 索引从1开始: $cfg[‘Servers’] 数组的第一个服务器配置应该使用 $cfg[‘Servers’][1],而不是 $cfg[‘Servers’][0]。
  2. 独立的配置块: 每个服务器的配置都应该是一个独立的配置块,包含其特有的连接参数、认证方式、显示名称等。
  3. 自动化管理: 对于多个服务器,最推荐且最健壮的方法是使用循环结构(如 foreach)来遍历一个服务器列表,并为每个服务器动态生成配置。这避免了手动管理索引 $i 可能导致的错误。

标准多服务器配置实践

为了正确地在phpMyAdmin中配置多个服务器,并确保登录界面显示服务器下拉列表,推荐采用以下标准配置模式。这种模式通常可以在phpMyAdmin的官方示例配置文件(如 config.manyhosts.inc.php)中找到。

核心思想是定义一个包含所有服务器主机地址的数组,然后通过循环遍历这个数组,为每个主机地址生成一个独立的服务器配置。

立即学习PHP免费学习笔记(深入)”;

示例代码:配置多个数据库服务器

以下是一个经过优化的 config.inc.php 配置示例,展示了如何同时配置本地服务器和docker容器中的数据库实例:

<?php  /*  * This is needed for Cookie based authentication to work.  * If not set (or less than 32 chars), the user is not logged out anymore and  * an error "wrong cookie pass parameter" appears.  */ $cfg['blowfish_secret'] = 'your_strong_secret_phrase_here_at_least_32_chars'; // 替换为至少32个字符的强密码  /*  * Servers configuration  */ $i = 0; // 初始化服务器索引  // $cfg['Servers'] 数组从 $cfg['Servers'][1] 开始。不要使用 $cfg['Servers'][0]。 // 可以通过将 host 设置为 '' 来禁用某个服务器配置条目。  // 定义所有需要配置的服务器主机列表 $hosts = [     'localhost',          // 本地mysql服务器     '172.18.0.1:3307'     // Docker容器中的MySQL实例,指定IP和端口 ];  foreach ($hosts as $host) {     $i++; // 每次循环递增索引,确保每个服务器都有唯一的配置块      // 基本连接参数     $cfg['Servers'][$i]['host'] = $host;     $cfg['Servers'][$i]['port'] = ''; // 如果主机名中已包含端口,此处可留空     $cfg['Servers'][$i]['socket'] = '';     $cfg['Servers'][$i]['connect_type'] = 'tcp'; // 连接类型:tcp 或 socket     $cfg['Servers'][$i]['extension'] = 'mysqli'; // 推荐使用 mysqli 扩展      // 认证与显示设置     $cfg['Servers'][$i]['auth_type'] = 'cookie'; // 认证方式:cookie, config, http, signon     $cfg['Servers'][$i]['user'] = ''; // 'cookie' 认证时此处留空,登录时输入     $cfg['Servers'][$i]['password'] = ''; // 'cookie' 认证时此处留空     $cfg['Servers'][$i]['verbose'] = ($host === 'localhost') ? '本地数据库' : 'Docker数据库'; // 服务器在下拉列表中的显示名称      // phpMyAdmin高级功能配置(可选,但推荐)     // 需要在数据库中创建 phpmyadmin 数据库和相关的控制表     $cfg['Servers'][$i]['controluser'] = 'pma'; // 用于phpMyAdmin高级功能的控制用户     $cfg['Servers'][$i]['controlpass'] = 'pmapass'; // 控制用户密码     $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; // phpMyAdmin控制数据库名称     $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';     $cfg['Servers'][$i]['relation'] = 'pma__relation';     $cfg['Servers'][$i]['table_info'] = 'pma__table_info';     $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';     $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';     $cfg['Servers'][$i]['column_info'] = 'pma__column_info';     $cfg['Servers'][$i]['history'] = 'pma__history';     $cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';     $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';     $cfg['Servers'][$i]['tracking'] = 'pma__tracking';     $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';     $cfg['Servers'][$i]['recent'] = 'pma__recent';     $cfg['Servers'][$i]['favorite'] = 'pma__favorite';     $cfg['Servers'][$i]['users'] = 'pma__users';     $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';     $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';     $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';     $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';     $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';      // 其他可选设置     $cfg['Servers'][$i]['compress'] = FALSE; // 是否启用压缩     $cfg['Servers'][$i]['only_db'] = ''; // 如果只想显示特定数据库,可在此指定     // $cfg['Servers'][$i]['AllowNoPassword'] = TRUE; // 允许无密码登录,出于安全考虑通常不推荐 }  // 确保 $cfg['blowfish_secret'] 已设置 if (empty($cfg['blowfish_secret'])) {     $cfg['blowfish_secret'] = 'A_VERY_LONG_AND_RANDOM_STRING_HERE_AT_LEAST_32_CHARS'; }  ?>

关键参数解释:

  • $cfg[‘blowfish_secret’]: 一个至少32个字符的随机字符串,用于cookie加密。这是phpMyAdmin正常运行和安全性的关键。
  • $hosts: 一个包含所有服务器地址的PHP数组。
  • $cfg[‘Servers’][$i][‘host’]: 数据库服务器的IP地址或主机名。如果包含端口,如 172.18.0.1:3307,则 $cfg[‘Servers’][$i][‘port’] 可以留空。
  • $cfg[‘Servers’][$i][‘port’]: 数据库服务器的端口号。如果主机名中已包含,此处可为空。
  • $cfg[‘Servers’][$i][‘connect_type’]: 连接类型,通常为 ‘tcp’。
  • $cfg[‘Servers’][$i][‘extension’]: PHP用于连接MySQL的扩展,推荐使用 ‘mysqli’。
  • $cfg[‘Servers’][$i][‘auth_type’]: 认证方式。
    • ‘cookie’: 登录时通过Web界面输入用户名和密码,最常用且推荐。
    • ‘config’: 在 config.inc.php 中直接配置用户名和密码 ($cfg[‘Servers’][$i][‘user’] 和 $cfg[‘Servers’][$i][‘password‘])。不推荐用于生产环境,因为密码明文存储。
  • $cfg[‘Servers’][$i][‘verbose’]: 服务器在phpMyAdmin登录界面下拉列表中的显示名称,方便用户识别。
  • $cfg[‘Servers’][$i][‘controluser’] / $cfg[‘Servers’][$i][‘controlpass’]: 这是phpMyAdmin用于存储高级功能(如书签、历史记录、关系图等)元数据的控制用户凭据。强烈建议为phpMyAdmin创建一个专门的数据库和用户,以实现这些高级功能。
  • $cfg[‘Servers’][$i][‘pmadb’]: phpMyAdmin控制数据库的名称,通常为 phpmyadmin。

注意事项

  1. 索引起始: 再次强调,$cfg[‘Servers’] 数组的索引必须从 1 开始,0 是无效的。
  2. 安全性:
    • 务必设置一个强壮且唯一的 blowfish_secret。
    • 对于生产环境,推荐使用 ‘cookie’ 认证方式,避免在配置文件中明文存储数据库用户密码。
    • 谨慎使用 $cfg[‘Servers’][$i][‘AllowNoPassword’] = TRUE;,这会允许无密码登录,存在严重安全风险。
  3. 控制用户和数据库: 为了充分利用phpMyAdmin的高级功能,请务必创建一个名为 phpmyadmin 的数据库,并导入phpMyAdmin提供的 examples/create_tables.sql 脚本来创建控制表。然后创建一个具有相应权限的用户(如 pma)作为控制用户。
  4. 扩展选择: 现代PHP环境应优先使用 mysqli 扩展。如果你的PHP环境较旧或有特定需求,可能需要使用 mysql(但已不推荐)。
  5. 端口配置: 如果数据库服务器使用非标准端口(如Docker实例),确保在 host 参数中包含端口(IP:端口)或在 port 参数中单独指定。
  6. Valet环境兼容性: 像Valet这样的本地开发工具可能会改变phpMyAdmin的访问URL(例如从 localhost/phpmyadmin 变为 phpmyadmin.test)。这通常是通过Valet的站点配置实现的,与 config.inc.php 中的多服务器配置逻辑是独立的。多服务器配置解决的是phpMyAdmin内部识别多个数据库连接的问题,而不是访问phpMyAdmin本身的URL问题。

总结

通过遵循上述标准的多服务器配置模式,您可以轻松地在phpMyAdmin中管理多个数据库实例。使用循环结构自动化服务器配置,不仅能提高配置效率,还能避免手动错误,确保phpMyAdmin登录界面能够正确显示所有已配置的服务器列表,从而为您的数据库管理工作带来极大的便利。请务必关注安全性设置,并根据需要配置phpMyAdmin的高级功能。



评论(已关闭)

评论已关闭