Linux 下,使用 PHP 连接远程 MySQL 数据库的过程相对简单,只需要确保以下几点:

  1. 安装 PHP MySQL 扩展:PHP 需要安装 MySQL 扩展,以便能与 MySQL 数据库进行通信。
  2. 配置 MySQL 数据库:确保 MySQL 数据库允许远程连接。
  3. 编写 PHP 代码进行连接:通过 PHP 使用 mysqliPDO 扩展连接到远程 MySQL 数据库。

1. 安装 PHP MySQL 扩展

Linux 下,连接 MySQL 数据库所需的 PHP 扩展通常是 mysqliPDO_MYSQL。可以使用以下命令来安装这些扩展:

对于 CentOSRHEL 系统

sudo yum install php-mysqli    # 安装 mysqli 扩展
sudo yum install php-pdo       # 安装 PDO 扩展
sudo yum install php-pdo-mysql # 安装 PDO_MYSQL 扩展

对于 UbuntuDebian 系统

sudo apt-get update
sudo apt-get install php-mysqli    # 安装 mysqli 扩展
sudo apt-get install php-pdo       # 安装 PDO 扩展
sudo apt-get install php-pdo-mysql # 安装 PDO_MYSQL 扩展

安装完扩展后,可以通过以下命令重启 Apache 或 PHP-FPM 来使配置生效:

sudo systemctl restart apache2   # 对于 Apache
sudo systemctl restart php-fpm   # 对于 PHP-FPM

然后,你可以通过运行 php -m 来检查是否已安装所需的扩展(mysqlipdo_mysql)。

php -m | grep -E 'mysqli|pdo_mysql'

2. 配置 MySQL 数据库允许远程连接

2.1 配置 MySQL 绑定 IP

默认情况下,MySQL 只会监听 127.0.0.1(即本地连接)。为了允许远程连接,你需要修改 MySQL 配置文件。

  1. 编辑 MySQL 配置文件(通常在 /etc/my.cnf/etc/mysql/my.cnf):
sudo vi /etc/my.cnf  # 或者 /etc/mysql/my.cnf
  1. [mysqld] 部分,找到 bind-address 配置项,并将其设置为 0.0.0.0,使 MySQL 监听所有 IP 地址:
[mysqld]
bind-address = 0.0.0.0
  1. 保存文件并退出编辑器。
  2. 重启 MySQL 服务:
sudo systemctl restart mysqld  # CentOS/RHEL
sudo systemctl restart mysql   # Ubuntu/Debian

2.2 配置 MySQL 用户权限

接下来,你需要确保你的 MySQL 用户具有从远程主机连接的权限。

  1. 登录到 MySQL 服务器:
mysql -u root -p
  1. 允许用户从远程连接(假设你已经有一个数据库用户和密码,如果没有,你可以创建一个新的用户)。
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'%' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
  • your_database 是你要连接的数据库名称。
  • your_user 是你用来连接 MySQL 的用户名。
  • your_password 是用户的密码。
  • @'%' 表示允许从任何 IP 地址进行连接。如果你只希望允许某个特定的 IP 进行连接,替换 '% 为指定的 IP 地址。
  1. 退出 MySQL:
EXIT;

3. 编写 PHP 代码连接远程 MySQL 数据库

使用 mysqli 扩展

<?php
$servername = "remote_host_ip"; // 远程 MySQL 服务器的 IP 地址或域名
$username = "your_user";        // MySQL 用户名
$password = "your_password";    // MySQL 密码
$dbname = "your_database";      // 要连接的数据库名称

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接是否成功
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

// 执行查询或其他操作
$conn->close();
?>

使用 PDO 扩展

<?php
$servername = "remote_host_ip"; // 远程 MySQL 服务器的 IP 地址或域名
$username = "your_user";        // MySQL 用户名
$password = "your_password";    // MySQL 密码
$dbname = "your_database";      // 要连接的数据库名称

try {
    $dsn = "mysql:host=$servername;dbname=$dbname;charset=utf8";
    $pdo = new PDO($dsn, $username, $password);
    // 设置 PDO 错误模式为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
}
catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
?>

4. 测试远程连接

  • 将 PHP 文件保存并放到你的 Web 服务器(如 Apache 或 Nginx)的 www 目录下。
  • 在浏览器中访问该文件,查看是否成功连接到远程 MySQL 数据库。

5. 常见问题及解决

  1. MySQL 连接错误:如果出现连接错误,检查以下几点:
    • 确保 MySQL 服务器的防火墙没有阻止 3306 端口(默认 MySQL 端口)。
    • 确保数据库用户权限正确,允许从远程主机访问。
    • 确保 bind-address 配置为 0.0.0.0
  2. 防火墙配置:如果你的 MySQL 服务器运行在云服务器上(如 AWS、Aliyun 等),需要确保安全组或防火墙规则允许 3306 端口的流量:
    • 对于 CentOS/RHEL
      sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
      sudo firewall-cmd --reload
      
    • 对于 Ubuntu/Debian
      sudo ufw allow 3306
      

总结

通过以上步骤,你可以在 Linux 下使用 PHP 成功连接到远程 MySQL 数据库。确保:

  1. 安装了 PHP 的 mysqliPDO_MYSQL 扩展。
  2. 配置 MySQL 允许远程连接,并给用户分配相应的权限。
  3. 使用 PHP 编写代码进行连接,并处理异常。

通过这些步骤,你应该能够成功地连接并操作远程 MySQL 数据库。