在运行Linux的云服务器上使用PHP连接到MySQL / MariaDB数据库

2020年12月30日11:26:49 发表评论 50 次浏览

介绍

了解如何在运行Linux的Cloud Server上使用PHP连接到MySQL / MariaDB数据库。本教程将介绍如何与PHP应用程序连接到同一服务器上的数据库, 以及如何连接到不同Cloud Server上的数据库。

要求

  • 运行Linux(任何发行版)的Cloud Server。
  • 已安装并正在运行LAMP堆栈(Apache, MySQL / MariaDB和PHP)。
  • 如果你有防火墙, 则需要允许访问MySQL / MariaDB服务器上的端口3306。

有关在Cloud Server上使用防火墙的更多信息, 请查阅我们关于该主题的文档.

创建一个示例数据库

就本教程而言, 我们将使用测试数据库。如果你希望创建一个进行测试, 请登录到MySQL / MariaDB客户端:

mysql -u root -p

创建测试数据库:

CREATE DATABASE phptest;

切换到测试数据库:

USE phptest;

创建一个基本表:

CREATE TABLE employees (id char(1), name varchar(40));

在表中添加两名员工:

INSERT INTO employees VALUES (1, "Alice");
INSERT INTO employees VALUES (2, "Bob");

采用选择*从员工;验证记录是否正确创建:

MySQL [phptest]> SELECT * FROM employees;
+------+-------+
| id   | name  |
+------+-------+
| 1    | Alice |
| 2    | Bob   |
+------+-------+
2 rows in set (0.00 sec)

创建一个MySQL / MariaDB用户

你将需要创建一个MySQL / MariaDB用户, 以便为PHP脚本生成登录凭据。在数据库服务器上, 登录到MySQL / MariaDB客户端:

mysql -u root -p

以下命令将创建一个用户, 并向该用户授予你脚本将访问的数据库的权限:

GRANT ALL ON [database name].* TO [username]@[location] IDENTIFIED BY '
		
输入密码查看加密内容:

';

更换:

  • [数据库名称]与你的数据库名称。
  • [用户名]使用你要为数据库创建的用户名。
  • [位置]以及PHP脚本的位置。如果PHP脚本和MySQL数据库位于同一服务器上, 请使用本地主机。否则, 请使用PHP脚本所在的服务器的IP地址。
  • [密码]为该用户设置一个强密码。

例如, 创建一个用户phpuser带密码Ig86N3tUa9, 与MySQL数据库位于同一服务器上, 可以访问该数据库phptest, 命令是:

GRANT ALL ON phptest.* TO phpuser@localhost IDENTIFIED BY 'Ig86N3tUa9';

创建第二个用户phpuser2它将从具有IP地址的服务器连接192.168.0.1命令是:

创建示例PHP脚本

就本教程而言, 我们将使用测试PHP脚本连接到测试数据库。如果你希望创建一个用于测试的文件, 请创建一个文件/var/www/html/phpconnect.php并使用以下命令将其打开以进行编辑:

sudo nano /var/www/html/phpconnect.php

将以下内容放入此文件:

<html>
<head>
<title>Test PHP Connection Script</title>
</head>
<body>

<h3>Welcome to the PHP Connect Test</h3>

<?php
$dbname = 'phptest';
$dbuser = 'username';
$dbpass = 'password';
$dbhost = 'location';
$connect = mysql_connect($dbhost, $dbuser, $dbpass) or die("Unable to connect to '$dbhost'");
mysql_select_db($dbname) or die("Could not open the database '$dbname'");
$result = mysql_query("SELECT id, name FROM employees");
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf("ID: %s  Name: %s <br>", $row[0], $row[1]);
}
?>

</body>
</html>

根据测试需要更新用户名, 密码和主机名。例如, 要在与数据库相同的服务器上使用脚本进行测试, 连接信息将为:

$dbuser = 'phpuser';
$dbpass = 'Ig86N3tUa9';
$dbhost = 'localhost';

使用与数据库位于不同服务器上的脚本进行测试(IP地址192.168.0.2), 连接信息将为:

$dbuser = 'phpuser2';
$dbpass = 'Rq53yur62I';
$dbhost = '192.168.0.2';

对远程MySQL / MariaDB连接进行故障排除

如果你的脚本无法从其他服务器连接, 请参考以下步骤以帮助解决错误。更多详细信息也可能会记录在服务器的/ var / log / httpd / error_log.

用户信息

如果在连接到其他服务器上的MySQL / MariaDB数据库时遇到问题, 请首先验证以下内容:

  • 你使用的是正确的MySQL / MariaDB用户名和密码吗?
  • 此用户名是否设置了正确的位置?

MySQL仅允许用户从创建帐户时指定的位置登录。例如, 如果使用以下语句创建用户:

GRANT ALL ON phptest.* TO phpuser@localhost IDENTIFIED BY 'Ig86N3tUa9';

该用户只能从数据库所在的同一服务器连接到MySQL / MariaDB(本地主机)。该用户将无法从其他服务器连接到MySQL / MariaDB。

命令行连接测试

如果此信息正确, 则可以从命令行测试连接。在脚本所在的服务器上, 使用以下命令连接到远程MySQL / MariaDB数据库:

mysql -u [username] -h [host server IP address] -p

例如, 要连接到数据库192.168.0.2与用户名phpuser2命令是:

mysql -u phpuser2 -h 192.168.0.2 -p

如果连接正常, 你将登录到远程服务器上的MySQL / MariaDB客户端。

防火墙功能

验证是否已更新所有相关的防火墙规则, 以允许数据库服务器的端口3306上的TCP / UDP通信。

请注意, 所有云服务器均受"云面板"控制的默认防火墙策略的影响。有关更改防火墙策略的更多信息, 请查阅我们关于该主题的文档.

一盏木

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: