原文:
annas-archive.org/md5/84cf2e9ed80568ee621e169b740dc335
译者:飞龙
第九章:运行 MySQL 数据库服务器
在本章中,我们将涵盖以下主题:
-
安装 MySQL 数据库服务器
-
允许通过网络访问 MySQL
-
通过 SSH 隧道访问 MySQL 服务器
-
创建新数据库
-
创建用户并授予数据库权限
-
创建数据库备份
-
执行自定义 SQL 命令
-
从备份中恢复数据库
-
编辑数据库结构
-
编辑数据库中的记录
-
检查谁在使用你的数据库服务器
-
安装 phpMyAdmin
介绍
MySQL 是一个强大的开源数据库管理系统。MySQL 服务器易于设置并且扩展性很好。这个数据库系统为一些世界上最大的网站提供支持,包括 Facebook、Twitter 和 Wikipedia。
MySQL 采用分布式客户端-服务器架构。单个服务器可以同时为多个客户端程序提供数据库服务。运行在与服务器相同机器上的客户端通常通过 Unix 套接字连接。客户端也可以运行在不同的机器上,通过网络连接到数据库服务器。MySQL 使用 TCP 连接,服务器的默认监听端口是 3306。
注意
Unix 域套接字是用于进程间通信的通道。不同程序在同一台机器上运行时,可以读写套接字中的信息,从而实现程序之间的通信。Unix 套接字作为文件系统的节点表示,因此你可以通过列出创建套接字的目录内容来找到它。
MySQL 的权限系统非常细粒度。每个客户端的访问权限可以被限制在部分数据库上,并且在每个数据库上允许执行不同的 SQL 命令。
数据库服务器维护一份客户端账户列表,这些账户与系统用户账户是分开的。每个客户端账户不仅由用户名和密码定义,还由用户连接的主机定义。由于这个解决方案,复杂的权限定义成为可能。例如,相同的用户名和密码可以在本地用于执行管理任务,但在远程仅允许查看服务器状态。
默认的 MySQL 安装会创建一个名为 root
的超级管理员账户以及一个匿名账户,允许无需身份验证即可连接到数据库服务器。在生产环境中,确保为 root
账户设置强密码,并禁用匿名账户非常重要。
注意
除了用户名和密码外,MySQL 还可能要求客户端提供证书以提高安全性。
Webmin 对 MySQL 的支持非常出色,允许您执行与数据库服务器运行相关的大多数任务。在本章中,我们将演示 Webmin 如何帮助您安装 MySQL,设置通过网络访问服务器,管理用户帐户,创建数据库,编辑数据库的结构和数据。我们还将演示如何自动备份数据库并恢复备份文件。如果您发现需要一个更先进的基于网页的管理工具,我们将演示如何在服务器上设置 phpMyAdmin。
安装 MySQL 数据库服务器
几乎所有附带开源软件包管理解决方案的操作系统都提供 MySQL 软件包以供安装。在本节中,我们将从软件包安装 MySQL,并在您的系统上进行设置。服务器包还会自动安装 MySQL 的命令行客户端包。
如何操作…
按照以下步骤在您的服务器上设置 MySQL:
-
按照第一章中安装软件包一节的步骤,设置您的系统,查找并安装 MySQL 数据库服务器包。
注
大多数发行版在其软件包存储库中提供多个版本的 MySQL。在一些系统中,您会找到一个名为
mysql-server
的元包,它安装最新版本。在其他系统中,您会找到版本号在名称中的包,例如mysql-server-5.5
或mysql55-server
,用于安装 5.5.x 版本。除非有理由使用旧版本,否则请选择最新版本的软件包。 -
转到 系统 | 启动和关闭。
-
选择 MySQL 数据库服务器的启动脚本旁边的复选框(它的名称可能是
mysql
、mysqld
、mysql-server
或类似的名称)。 -
点击 立即启动并开机自启 按钮。
-
点击 Webmin 主菜单底部的刷新模块链接,然后重新加载浏览器以更新菜单。
-
转到 服务器 | MySQL 数据库服务器。
Webmin 应该能够连接到您的 MySQL 服务器。此时,您将看到一个数据库列表,其中应该包括默认的数据库,如 information_schema
和 mysql
。
提示
如果您看到警告:Perl 模块 DBI 和 DBD::mysql 未安装在您的系统上,请点击链接并按照 Webmin 的说明安装缺失的 Perl 模块。
默认的 MySQL 设置适用于开发或测试服务器。然而,如果您打算在生产环境或共享服务器上使用数据库,请继续阅读本节的更多内容部分。
它是如何工作的…
Webmin 帮助您从发行版的存储库中找到并安装 mysql-server
包。该包包含一个启动脚本,我们已启用该脚本,以便在您的机器启动时启动数据库服务器。
默认的 MySQL 安装包含许多便利的功能,如匿名用户帐户或可以不提供密码即可作为 root 登录的能力。这些默认选项使得启动 MySQL 变得更加简单。但是,它们不应该在生产环境中使用,因为它们构成重大安全风险。
还有更多…
执行以下步骤,使 MySQL 在生产环境中更安全。
使 MySQL 准备好进行生产使用
按照以下步骤为你的 MySQL 服务器提供基本安全性:
-
使用终端仿真器(例如通过 SSH)连接到你的服务器。
提示
你也可以使用 Webmin 的 Text Login 模块。
-
输入以下命令:
mysql_secure_installation
。 -
通过按 Y 然后 Enter 确认所有问题,除非你知道你想要其他推荐设置以外。
mysql_secure_installation
脚本执行以下任务:
-
为数据库
root
用户设置密码 -
删除数据库的匿名访问;从现在开始,MySQL 将仅允许授权用户访问
-
禁止
root
用户远程登录,因为这个用户通常只应该从同一台计算机访问数据库 -
删除
test
数据库。
参见
- 如果你想让其他计算机访问你的数据库,查看本章节的 允许通过网络访问 MySQL 部分。
允许通过网络访问 MySQL
访问 MySQL 数据库的程序(称为客户端)可能在与服务器相同的计算机上运行。在这种情况下,客户端和服务器将通过 Unix 域套接字进行最有效的通信,这是通过文件系统访问的进程间通信通道,类似于文件或目录。套接字的访问受文件系统权限控制。
其他客户端程序可能仅能通过 TCP 网络套接字进行通信。这些客户端可以使用回环接口和 IP 地址 127.0.0.1 连接到本地服务器。在这种情况下,MySQL 服务器必须编译为支持网络并配置为在回环接口上监听连接。
但是,如果客户端程序位于服务器以外的机器上,则它们之间的通信必须通过使用 TCP 协议的网络进行。为了使这种通信成为可能,你需要在防火墙中开放一个例外,并指示 MySQL 在物理网络接口上监听传入的网络连接。
提示
你也可以通过 SSH 隧道传输 MySQL 流量,这可能是更安全的解决方案。查看 通过 SSH 隧道远程访问数据库服务器 部分以获取更多信息。
准备就绪
如果你计划使数据库服务器通过网络可用,你应该采取措施来确保其安全。查看本章节的 使 MySQL 准备好进行生产使用 部分以获取更多信息。
在开始之前,请按照第三章中通过防火墙允许访问服务一节的步骤,允许通过防火墙将传入的 TCP 流量导入端口 3306
,如下图所示:
https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_09_01.jpg
如何操作…
本配方的步骤将分为以下四个部分:
-
首先,我们将指示 MySQL 在标准 MySQL 端口(
3306
)上监听传入的网络连接 -
然后,我们将创建一个名为
dbuser
的数据库用户 -
我们将授予对名为
testdb
的数据库的访问权限 -
最后,我们将通过从第二台客户端机器连接到我们的服务器来测试设置
指示 MySQL 服务器监听网络连接
为了使 MySQL 接受传入的网络连接,请执行以下步骤:
-
转到服务器 | MySQL 数据库服务器 | MySQL 服务器配置。
-
将MySQL 服务器监听地址设置为任何。
-
点击保存并重新启动 MySQL按钮。
创建新用户
为了创建一个新用户,请执行以下步骤:
-
转到服务器 | MySQL 数据库服务器 | 用户权限。
-
点击创建新用户链接。
-
将用户名设置为
dbuser
,密码设置为强密码,主机设置为任何。 -
点击创建按钮。
授予用户访问数据库的权限
为了授予用户访问数据库的权限,请执行以下步骤:
-
转到服务器 | MySQL 数据库服务器 | 数据库权限。
-
点击创建新数据库权限链接。
-
在数据库行中,选择已选并选择您的
testdb
数据库。 -
将用户名设置为创建的用户的名称,即
dbuser
。 -
将主机设置为任何,以允许用户从任何地方连接。
提示
为了增加安全性,您应该指定一个用户可以连接的 IP 地址或域名。您可以使用
%
作为地址的一部分来指定通配符。例如,192.168.0.%
表示整个192.168.0.1/24
子网,而%.example.com
包括域名下的所有主机。 -
在权限列表中选择所有权限。
-
点击创建按钮。
测试连接
尝试从网络中的第二台机器连接到数据库服务器。如果另一台机器上安装了 MySQL 命令行客户端,您可以通过在终端输入以下命令来测试连接,但请将mysql-host
替换为 MySQL 服务器的 IP 或域名:
$ mysql -u dbuser -p -h mysql-host -D testdb
如果连接成功,您将看到以下欢迎消息,其中包括服务器的 MySQL 版本:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 58
Server version: 5.5.31-0+wheezy1 (Debian)
mysql> exit
Bye
当您到达 mysql>
提示符时,可以开始执行 SQL 命令。输入 exit
并按 Enter 断开连接。
如何操作…
为了允许 MySQL 服务器接受传入的网络连接,Webmin 会编辑您服务器的配置文件(通常位于 /etc/my.cnf
、/var/db/mysql/my.cnf
或 /etc/mysql/my.cnf
)。
服务器配置中有两行指定了服务器将接受哪些连接。例如,如果我们只希望接受本地连接,这些行可以写成如下:
socket=/var/lib/mysql/mysql.sock
bind-address=127.0.0.1
第一行指示 MySQL 创建一个本地 Unix 套接字,用于与同一机器上的其他程序通信,而第二行则指示它在本地回环接口(127.0.0.1
)上监听传入连接。为了使服务器在所有接口上都能监听传入的网络连接,Webmin 只需删除 bind-address
这一行。
我们通过在同一网络下的另一台计算机上发出以下命令来测试连接:
$ mysql -u dbuser -p -h mysql-host -D testdb
该命令启动 MySQL 命令行客户端。指定的选项如下:
-
-u
:此选项指定尝试连接到服务器的用户 -
-p
:此选项指示我们希望系统提示输入密码 -
-h
:此选项指定我们尝试连接的主机 -
-D
:此选项指定我们连接后要使用的数据库
为了创建数据库用户并授予他们权限,Webmin 直接在 MySQL 的内部配置数据库中操作数据。如果你想手动执行相同的操作,可以使用命令行客户端连接到 MySQL 服务器,并发出以下命令。
首先,以 root
用户连接到本地数据库服务器:
$ mysql -u root -p
接下来,发出以下 MySQL 命令:
mysql> CREATE USER 'dbuser'@'%' IDENTIFIED BY 'strongpassword';
mysql> GRANT ALL PRIVILEGES ON testdb.* TO 'dbuser'@'%';
mysql> FLUSH PRIVILEGES;
第一条命令创建了一个名为 dbuser
的用户,而第二条命令为该用户提供对 testdb
数据库的完全访问权限。最后一条命令强制 MySQL 服务器重新加载关于用户和权限的信息,以便新用户可以连接。
提示
MySQL 命令行客户端会将所有输入的命令历史保存在一个文件中。如果我们执行之前列出的命令,历史文件将包含我们新创建用户的密码。为了避免这种情况,我们可以在连接到服务器之前,通过发出以下命令指示 MySQL 在此会话期间不保存历史记录:
$ export MYSQL_HISTFILE=/dev/null
还有更多内容…
本食谱允许用户远程访问单一数据库。出于安全原因,主管理账户(root
)不应允许从其他计算机连接到你的服务器。如果你仍希望允许对数据库服务器进行一些远程管理(如创建数据库、用户等),可以按照以下步骤进行操作。
远程管理数据库
按照以下步骤创建一个账户,用于远程管理:
-
导航至 服务器 | MySQL 数据库服务器 | 用户权限。
-
点击 创建新用户 链接。
-
设置 用户名 为一个管理账户名。尽量选择一个比
admin
更难猜测的用户名。 -
设置 密码 为一个非常强的密码。
-
设置 主机 为你的管理用户将要连接的 IP 地址范围。
-
从 权限 列表中,仔细选择你确定需要远程访问的权限。
注意
关于每个权限的详细信息,可以在 MySQL 文档中的 MySQL 提供的权限 部分找到,链接如下:
-
点击 创建 按钮。
现在你应该能够从远程客户端计算机连接到服务器(
mysql-host
)。连接时无需指定数据库名称:$ mysql -u administrative_user -p -h mysql-host
另见
为了使远程访问和管理你的 MySQL 数据库更加安全,你可以通过 SSH 隧道来传输连接。
- 查看本章中的 通过 SSH 隧道访问 MySQL 服务器 食谱以获取说明。
通过 SSH 隧道访问 MySQL 服务器
如果你的服务器托管了一个网站,并且在同一台机器上运行数据库系统,那么禁用 MySQL 的远程网络访问会更安全。另一方面,你可能仍然希望远程管理你的数据库,你可以通过 SSH 连接隧道化 MySQL 流量来实现。
注意
数据库系统的一个最重要方面是它查找并返回你请求的数据的速度。通过 SSH 隧道传输流量会为此通信增加显著的开销。这个解决方案非常适合间歇性的管理任务,但通常不适合作为直接连接数据库系统的替代方案。
准备工作
你想要连接的服务器必须同时运行 MySQL 服务器和 SSH 服务器。远程客户端机器必须安装 SSH 客户端和 MySQL 客户端软件。记下服务器的 IP 地址或域名(mysql-host
)、SSH 用户名(ssh-user
)、MySQL 用户(mysql-user
)和数据库名称(database-name
)。在这个步骤中需要替换为相应的值。
如何操作…
为了创建 MySQL 的 SSH 隧道,请按照以下步骤操作:
-
在客户端机器上执行以下命令:
$ ssh -L 15000:localhost:3306 ssh-user@mysql-host
这会在客户端机器上的端口
15000
和服务器的端口3306
之间创建一个隧道。现在你可以通过将 MySQL 连接到客户端计算机的本地端口15000
来访问远程数据库。 -
在客户端系统上执行以下命令以测试连接:
$ mysql -u mysql-user -p -D database-name -h 127.0.0.1 -P 15000
它是如何工作的…
SSH 客户端充当你机器上运行的 MySQL 客户端与远程服务器之间的通信中介。它会打开端口 15000
并监听传入连接。所有到达端口 15000
的数据包都会被加密并通过 SSH 转发到服务器。在服务器端,SSH 接收数据包,解密后将其发送到端口 3306
。响应通过相同的通道返回。
有关 SSH 隧道的更多信息,请参见通过 SSH 隧道安全连接 Webmin食谱,详见第三章,安全加固系统。
还有更多…
一些 MySQL 客户端集成了在连接远程数据库时设置 SSH 隧道的功能。
在 MySQL Workbench 中创建 SSH 隧道
像 MySQL Workbench 或 Sequel Pro 这样的流行 GUI 客户端,允许你在与数据库连接设置相同的窗口中指定 SSH 连接设置。所有情况下的步骤都类似。在 MySQL Workbench 中,你将按照以下步骤设置连接:
-
在客户端计算机上运行 MySQL Workbench。
-
从数据库菜单中选择连接到数据库。
-
将连接方式设置为通过 SSH 的标准 TCP/IP。
-
将SSH 主机名设置为远程服务器的 IP 地址或域名。
-
将SSH 用户名设置为具有 SSH 访问权限的系统用户。
-
将MySQL 主机名设置为
127.0.0.1
。 -
将MySQL 服务器端口设置为
3306
。 -
将用户名设置为 MySQL 用户的名称。
-
点击测试连接按钮。参考以下截图:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_09_02.jpg
系统会要求你输入 SSH 用户的密码,然后是 MySQL 用户的密码。如果一切顺利,你将看到一条消息,提示连接参数正确。
另见
-
有许多工具可以让你连接和控制你的 MySQL 数据库。Webmin 提供了广泛的工具来执行大多数常见任务,后续章节中会描述这些工具。一个更强大的基于 Web 的 MySQL 专用解决方案是 phpMyAdmin,本章节的安装 phpMyAdmin食谱中将进行讨论。
-
你可以从以下网站下载本食谱中提到的 GUI 客户端:
-
MySQL Workbench:
dev.mysql.com/downloads/tools/workbench
。 -
Sequel Pro(仅限 OS X):
www.sequelpro.com/download
。
-
-
有关 SSH 隧道的更多信息,请参见通过 SSH 隧道安全连接 Webmin食谱,详见第三章,安全加固系统。
创建新数据库
通过 Webmin 界面创建新 MySQL 数据库非常快捷和简单。
如何操作…
按照以下步骤创建一个新数据库:
-
导航至服务器 | MySQL 数据库服务器。
-
点击创建一个新数据库链接。
-
输入数据库名称,例如,
new_db
。 -
将字符集设置为utf8 (UTF-8 Unicode)。
-
将排序规则设置为utf8_unicode_ci (UTF-8 Unicode)。
注意
字符集指定了字母字符在数据库中的存储方式,而
utf8
字符集包含了大多数字母表中的所有字母。另一方面,排序规则指定了字母在按字母顺序排序时应该放置的顺序。utf8_unicode_ci
排序规则旨在成为通用的,但可能会有地区性差异,使得像utf8_polish_ci
这样的本地排序规则更适合你的情况。 -
将初始表设置为无。
-
点击创建按钮。
它是如何工作的……
Webmin 会根据你提供的信息,通过连接到 MySQL 服务器并执行以下命令来创建一个新数据库:
mysql> CREATE DATABASE `new_db` CHARACTER SET utf8 COLLATE utf8_unicode_ci;
另见
-
为了使数据库可用,你需要授予用户访问数据库的权限。有关说明,请参阅本章中的创建用户并授予数据库权限一节。
-
如果你有初始的数据库结构或内容,可以通过使用 SQL 命令文件将它们上传到服务器。有关更多信息,请查看本章中的执行自定义 SQL 命令一节。
-
有关字符集和排序规则的更多信息,可以在 MySQL 手册中的以下链接找到:
dev.mysql.com/doc/refman/5.7/en/charset-charsets.html
创建用户并授予数据库权限
由于 MySQL 的客户端-服务器架构,服务器可能会接受来自多个客户端的连接。连接的客户端通过用户名和密码向 MySQL 进行身份验证。关于用户账户和权限的信息存储在一个名为mysql
的内部数据库中。
MySQL 账户与系统账户是分开的,通常这是一件好事,因为它们通常代表在服务器上运行的应用程序,而非实际用户。每个连接到数据库服务器的应用程序应该有自己的用户账户,并且访问权限仅限于该应用程序运行所需的数据库。允许应用程序具有 root 级别的访问权限是不明智的,因为如果应用程序被攻击者入侵,攻击者可能会窃取或损坏系统上的所有数据库。
除了用户名和密码外,MySQL 账户还通过用户允许连接的主机来描述。这意味着'user'@'localhost'
与'user'@'remotehost'
是不同的账户,这些账户可能具有不同的访问权限。
不幸的是,这意味着如果一个用户需要从多个主机访问,就必须创建多个账户,或者更糟的是,如果用户的位置在网络中变化。在这种情况下,你可以指定%
作为主机地址的一部分,作为通配符。例如,192.168.0.%
将指定整个192.168.0.1/24
子网,而%.example.com
将指定一个域内的所有主机。
如果用户的来源位置无法缩小到某个网络或 IP 地址范围,建议使用 SSH 隧道,而不是让数据库服务器对整个互联网开放访问权限。有关更多信息,请参考本章中的通过 SSH 隧道访问 MySQL 服务器。
准备工作
除非你有特别的理由使用它们,否则应该移除 MySQL 的匿名账户。匿名账户是默认为测试目的创建的,但它们可能会在调试用户权限问题时造成困难。
假设,举个例子,你有一个可以从任何地方访问的用户账户:'user'@'%'
,但你同时也有一个可以从本地主机访问的匿名账户@'localhost'
。如果你尝试从本地主机以user
身份连接,MySQL 将首先检查一个更精确地指定入站连接主机的权限条目(@'localhost'
比@'%'
更具体)。这会导致user
被赋予匿名账户的权限,而不是预期的'user'@'%'
账户。你可以通过执行以下 MySQL 命令来检查你当前以哪个用户身份连接:
mysql> SELECT CURRENT_USER();
你将看到如下输出:
+----------------+
| CURRENT_USER() |
+----------------+
| @localhost |
+----------------+
输出显示我们被视为匿名用户@'localhost'
。解决这个问题的方法是为user
添加一个新的账户'user'@'localhost'
。然后,当我们重新登录时,我们将看到同一命令的以下输出:
+----------------+
| CURRENT_USER() |
+----------------+
| user@localhost |
+----------------+
如果你没有特别的需求,最好是完全删除匿名账户,这样更安全也更方便。
如何操作…
在本节中,我们将创建一个名为dbuser
的用户,并允许该用户从本地机器访问testdb
数据库。用户必须使用强密码进行身份验证。请根据你的实际情况准备好用户名、数据库名和密码。
创建用户账户
要创建一个用户账户,请执行以下步骤:
-
进入服务器 | MySQL 数据库服务器 | 用户权限。
-
点击创建新用户链接。
-
将用户名设置为
dbuser
。 -
将密码设置为强密码。
-
将主机设置为
localhost
。 -
在权限列表中,不要选择任何权限。
注意
我们不需要授予该账户任何全局权限,因为该用户的访问权限仅限于特定的数据库。
-
点击创建按钮。
授予权限
要授予权限,请执行以下步骤:
-
进入服务器 | MySQL 数据库服务器 | 数据库权限。
-
点击创建新数据库权限链接。
-
将数据库设置为已选择,然后从列表中选择testdb。
-
将用户名设置为
dbuser
。 -
将主机设置为
localhost
。 -
在权限列表中,选择所有权限,如下截图所示:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_09_03.jpg
-
点击创建按钮。
创建的账户和权限将允许dbuser
连接并完全控制testdb
数据库,当其连接到本地 MySQL 服务器时。
提示
当客户端从本地计算机连接时,MySQL 服务器将使用与localhost
关联的账户,无论连接是通过套接字还是 TCP 建立。然而,如果您创建了一个与127.0.0.1
关联的账户,它将在通过 TCP 连接时使用,但在通过套接字连接时不会使用。当通过 IPv6 使用 TCP 连接时,还会使用本地计算机的 IPv6 地址::1
。最好为localhost
设置账户,以避免这种混淆。
工作原理…
Webmin 通过直接操作mysql
数据库来创建账户并授予权限。具体来说,它向user
和db
表添加一行,然后执行FLUSH PRIVILEGES
命令。
如果您想手动执行相同的操作,您可以使用 MySQL 命令行客户端连接到 MySQL 服务器并发出以下命令。
首先以 root 身份连接到本地数据库服务器:
$ mysql -u root -p
接下来,发出 MySQL 命令:
mysql> CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'strongpassword';
mysql> GRANT ALL PRIVILEGES ON testdb.* TO 'dbuser'@'localhost';
mysql> FLUSH PRIVILEGES;
第一个命令创建了一个名为dbuser
的用户,第二个命令授予该用户对testdb
数据库的完全访问权限。最后一个命令强制 MySQL 服务器重新加载关于用户和权限的信息,以便新用户能够连接。
还有更多…
Webmin 允许您指定更细粒度的访问权限——可以在数据库表级别,甚至是数据库表中的特定列级别。它还允许您为通过 Webmin 创建的新系统用户自动创建 MySQL 账户。
授予特定数据库表的权限
为了授予特定数据库表的权限,请执行以下步骤:
-
导航到服务器 | MySQL 数据库服务器 | 表权限。
-
从列表中选择一个数据库并点击在数据库中添加新权限按钮。
-
从列表中选择一个数据库表。
-
将用户名设置为之前定义的 MySQL 用户的名称。
-
将Host设置为与用户账户关联的主机名。
-
从表权限和字段权限列表中选择您希望授予的权限,如下图所示:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_08_18.jpg
-
点击创建按钮。
授予特定数据库表中某一列的权限
要授予特定数据库表中某一列的权限,请执行以下步骤:
-
导航到服务器 | MySQL 数据库服务器 | 字段权限。
-
从列表中选择一个数据库和表,并点击在数据库和表中添加新权限按钮。
-
从列表中选择一个数据库表的字段。
-
将用户名设置为之前定义的 MySQL 用户的名称。
-
将Host设置为与用户账户关联的主机名。
-
从权限列表中选择您希望授予的权限。
-
点击创建按钮。
自动授予新系统用户 MySQL 访问权限
要自动授予所有系统用户 MySQL 访问权限,请执行以下步骤:
-
导航到服务器 | MySQL 数据库服务器 | 用户权限。
-
在何时同步部分选择所有三个复选框。
-
在新用户的权限列表中选择权限。例如,如果你希望系统的每个用户都是 MySQL 管理员,则选择所有权限。请谨慎使用此选项。
-
将创建具有主机的用户设置为特定主机,并输入
localhost
。https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_09_04.jpg -
点击保存按钮。
从现在开始,通过 Webmin 创建的每个新用户账户将自动获得一个与系统密码相同的 MySQL 账户。如果通过 Webmin 更改了密码,则 MySQL 账户将更新;如果通过 Webmin 删除了对应的系统账户,则 MySQL 账户也将被删除。
创建数据库备份
Webmin 可以帮助你备份 MySQL 数据库。只需点击几下,你就可以备份任何数据库。Webmin 还可以帮助你设置定时任务,定期自动创建备份。
准备工作
在开始之前,创建一个目录来存储本地备份文件。你可以将这些文件保存在根目录/root/backups
下的/backups
,或者存放在任何方便的位置。
提示
Webmin 创建的备份文件对所有系统用户可读。这可能带来安全风险,因为数据库备份通常包含敏感数据,如散列的用户密码。你应该删除备份目录中除 root 组之外用户的所有权限。你可以通过以下命令来完成:
$ sudo chmod o-rwx /backups
如果你的文件系统支持访问控制列表,你还可以为该目录中新创建的文件设置默认的掩码,使得这些文件无法被组外的用户读取。你可以通过以下命令设置/backups
的默认 ACL:
$ sudo setfacl -d -m other:- /backups
查看第六章中的更改文件所有权和权限部分,了解更多信息。
操作步骤…
按照以下步骤创建数据库备份:
-
导航到服务器 | MySQL 数据库服务器。
-
点击表示你想要备份的数据库的图标。
-
点击备份数据库按钮。
-
将备份到文件设置为路径,例如
/backups/database-name.sql.bz2
。 -
将备份的表设置为所有表。
-
打开其他备份选项部分。
-
将是否将删除表语句添加到备份?设置为是。
注意
这有助于将创建的备份导入现有数据库。具有相同名称的表会在导入备份中的表之前被删除(丢弃)。
-
将备份的字符集设置为UTF-8 Unicode。
-
选择压缩格式为Bzip2。
注意
Bzip2 对于文本类型文件(如 SQL 命令文件)提供了非常好的压缩效果。
-
点击立即备份按钮。
工作原理…
Webmin 执行 mysqldump
命令,输出一系列创建整个数据库所需的 SQL 命令。然后将数据库“转储”通过 bzip2 压缩算法进行压缩并保存到输出文件中。如果你想在终端中执行相同的备份操作,可以运行类似以下的命令(确保正确设置 mysqldump
选项):
$ mysqldump --add-drop-table --routines database-name | bzip2 -c > /backups/database-name.sql.bz2
还有更多内容…
Webmin 是一个非常强大的备份工具。以下是一些其他易于访问的功能。
自动备份所有数据库
Webmin 可以帮助你自动备份服务器托管的部分或所有数据库。这些备份将通过 cron 定期执行。有关调度命令的更多信息,请查看 第四章中的使用 cron 定期调度命令。为了自动备份所有数据库,请执行以下步骤:
-
进入服务器 | MySQL 数据库服务器。
-
点击备份数据库按钮。
-
将备份到目录设置为备份目录的位置,例如
/backups
。 -
打开其他备份选项部分。
-
将备份中是否添加删除表语句?设置为是。
-
将备份的字符集设置为UTF-8 Unicode。
-
将压缩格式设置为Bzip2。
-
打开备份计划部分。
-
将发送备份状态邮件到设置为你的电子邮件地址。
-
将启用计划备份?设置为是,按以下选定的时间,设置简单计划并选择每日(午夜时分)。
注意
请注意,许多任务可能会安排在系统的午夜时分启动,如果系统资源有限,你可以选择其他时间。通过标记分钟、小时和月份的日期来选择一个更复杂的计划。
-
点击保存按钮。
将数据库表导出为 CSV
Webmin 可以将数据库中的单个表导出为逗号分隔值(CSV)文件,任何电子表格程序,如 Excel、Calc 或 Gnumeric,都可以打开该文件。要将数据库表导出为 CSV,请执行以下步骤:
-
进入服务器 | MySQL 数据库服务器。
-
点击包含该表的数据库的图标。
-
点击你想要导出的表的图标。
-
点击导出到 CSV按钮。
-
将文件格式设置为带引号的 CSV。
-
将是否包含列名?设置为是。
-
将导出目的地设置为在浏览器中显示。
-
点击立即导出按钮。
另请参见
-
你可以通过使用网络文件共享协议(如 NFS 或 CIFS)轻松地将备份文件传输到远程主机。首先在远程服务器上创建一个网络卷,然后将该卷挂载到你的服务器上。接着,你就可以像本地存储文件一样,轻松地将文件备份到远程系统的目录中。请参阅 第六章,管理系统中的文件,获取使用 NFS 或 CIFS 设置网络文件共享的说明。
-
另一种将数据库备份副本存储到远程的方式是使用 SSH 协议将备份目录发送到远程服务器。请查看 第七章,系统备份,中的 备份到远程主机,了解更多信息。
执行自定义 SQL 命令
Webmin 提供了一个简洁的界面,用于访问你的 MySQL 数据库服务器,让你能够执行任意 SQL 命令。这是一个非常有用的功能,尤其在你想快速查找数据库中的某些内容或对多个数据行进行批量更新时。
如何操作…
按照以下步骤在数据库上执行 SQL 命令:
-
导航到 服务器 | MySQL 数据库服务器。
-
点击代表你想要使用的数据库的图标,例如
mysql
。 -
点击 执行 SQL 按钮。
-
在文本区域输入 SQL 命令,例如:
SELECT host,user FROM user;
https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_09_07.jpg
-
点击 执行 按钮。
系统会显示通过 SELECT
命令返回的数据,并且可以排序。
它是如何工作的…
Webmin 会将 SQL 命令传递给数据库服务器。如果命令返回错误,它会在屏幕上显示。如果命令返回数据行,Webmin 会将其转换为 HTML 页面并显示在屏幕上。请注意,Webmin 是以 root 用户身份运行的,因此在执行命令时需要小心。
另见
-
Webmin 还可以帮助你执行保存于文件中的完整 SQL 脚本。有关更多信息,请参阅本章中的 从备份中恢复数据库。
-
你可以将常用的命令保存在 Webmin 的一个易于使用的控制面板中。有关更多信息,请查看 第四章,控制你的系统,中的 创建包含你常用的数据库命令的面板。
-
如果你发现需要一个更完整的、基于 Web 的 MySQL 管理工具,可以考虑安装 phpMyAdmin。本章的 安装 phpMyAdmin 说明了如何操作。
从备份中恢复数据库
数据库可能被存储为包含 SQL 指令的文本文件,这些指令可以重建数据库。如果你有一个 SQL 备份文件,可以使用 Webmin 恢复它。
准备工作
大型备份应在执行之前上传到服务器。如果您的备份文件很大,请将其上传到服务器并记录其位置。有关更多信息,请参阅 第六章 在您的系统上管理文件 中的 将文件上传到服务器 部分。
我们将把备份还原到现有数据库中。如果您还没有创建数据库,请先按照 创建新数据库 部分的说明进行操作。
怎么做……
按照以下步骤从备份中还原数据库或执行保存在文件中的 SQL 脚本:
-
转到 服务器 | MySQL 数据库服务器。
-
单击代表您要还原备份的数据库的图标。
-
单击 执行 SQL 按钮。
-
选择 从文件运行 SQL 选项卡。
-
如果您已将文件上传到服务器,请选择 从本地文件 并在文本框中输入文件的位置。否则,请选择 从已上传文件 并从磁盘选择一个文件。
提示
Webmin 可以处理使用 gzip 或 bzip2 压缩的 SQL 文件。
-
单击 执行 按钮。
怎么工作……
Webmin 将整个 SQL 指令文件传送到 MySQL 服务器。服务器逐行执行文件中存储的每个指令,逐行重建数据库。
如果您想在终端中执行相同的任务,可以使用以下命令:
$ mysql database-name < backup-file.sql
还有更多内容……
Webmin 可以从诸如 Excel、Calc 或 Gnumeric 之类的电子表格程序创建的 CSV 文件中导入单个表到您的数据库中。
按照以下步骤导入 CSV 文件:
-
转到 服务器 | MySQL 数据库服务器。
-
单击代表您要还原备份的数据库的图标。
-
单击 执行 SQL 按钮。
-
选择 导入文本文件 选项卡。
-
如果您已将文件上传到服务器,请选择 从本地文件 并在文本框中输入文件的位置。否则,请选择 从已上传文件 并从磁盘选择一个文件。
-
从 要导入数据的表 下拉列表中选择一个表。
-
将 字符集 设置为 utf8 (UTF-8 Unicode)。
-
单击 执行 按钮。
您将看到一个信息屏幕,描述成功导入多少行或遇到了哪些错误。
编辑数据库结构
Webmin 允许您通过易于使用的界面快速修改 MySQL 数据库中表的结构。在本示例中,我们将演示如何执行以下任务列表:
-
在数据库中创建表
-
向数据库表添加列
-
编辑列
-
创建索引
-
删除索引
-
删除列
-
删除数据库中的表
准备工作
为了演示目的,我们将使用一个名为 testdb
的数据库。您可以按照本章节 创建新数据库 部分的步骤通过 Webmin 创建一个带有此名称的数据库。
怎么做……
在testdb
数据库中,我们将创建一个名为people
的表,并向该表添加一个名为name
的列。然后,我们将更改该字段的宽度,将其设置为唯一索引,最后从数据库中删除索引、字段和表。
在数据库中创建表
为了在数据库中创建表,执行以下步骤:
-
导航到服务器 | MySQL 数据库服务器。
-
点击表示
testdb
数据库的图标。 -
点击创建新表按钮。
-
将
people
指定为表名。 -
将表类型设置为myisam。
注意
表类型选项指定该表使用的存储引擎。这决定了表的可用特性,例如myisam允许全文搜索索引,而innodb支持事务。您可以在 MySQL 手册中找到有关存储引擎的更多信息:
-
提供将作为此表主键的字段定义。填写以下字段定义:
-
字段名:
id
-
数据类型:int
-
类型宽度:
11
-
键:是
-
自动递增:是
-
允许空值:否
https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_09_05.jpg
-
-
点击创建按钮。
向数据库表中添加字段
为了向数据库表中添加字段,执行以下步骤:
-
导航到服务器 | MySQL 数据库服务器。
-
点击表示
testdb
数据库的图标。 -
点击表示
people
表的图标。 -
从类型下拉菜单中选择
varchar
并点击添加字段类型按钮。 -
填写以下字段定义:
-
字段名:
name
-
类型宽度:
80
-
类型选项:不区分大小写
-
允许空值:是
-
默认值:NULL
-
是主键的一部分吗?:否
-
-
点击创建按钮。
编辑字段
要编辑字段,执行以下步骤:
-
导航到服务器 | MySQL 数据库服务器。
-
点击表示
testdb
数据库的图标。 -
点击表示
people
表的图标。 -
点击字段
name
的链接。 -
将类型宽度设置为
128
。 -
点击保存按钮。
创建索引
为了创建索引,执行以下步骤:
-
导航到服务器 | MySQL 数据库服务器。
-
点击表示
testdb
数据库的图标。 -
点击表示
people
表的图标。 -
点击创建索引按钮。
-
将索引名称设置为
unique_name
。 -
在索引中的字段列表中选择字段
name
。 -
将索引类型设置为唯一。
-
点击创建按钮。
删除索引
要删除索引,执行以下步骤:
-
导航到服务器 | MySQL 数据库服务器。
-
点击表示
testdb
数据库的图标。 -
点击表示
unique_name
索引的图标。 -
点击删除按钮。
删除字段
为了删除字段,执行以下步骤:
-
转到 服务器 | MySQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
点击
name
字段的链接。 -
点击 删除 按钮。
从数据库中删除表
要从数据库中删除一张表,请执行以下步骤:
-
转到 服务器 | MySQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
点击 删除表 按钮,并在随后的屏幕上确认。
它是如何工作的…
Webmin 为相应的 CREATE
、DROP
和 ALTER TABLE
SQL 命令准备语法,执行这些命令,并以 root
用户身份在 MySQL 服务器上运行它们。
另请参见
- 如果你发现需要一个更完整的基于网页的 MySQL 管理工具,可以考虑安装 phpMyAdmin。有关安装 phpMyAdmin 的详细信息,请参考 安装 phpMyAdmin 这一教程。
编辑数据库中的记录
Webmin 允许你通过简单的界面快速编辑 MySQL 数据库中的数据。在本教程中,我们将演示如何添加、编辑和删除数据库表中的记录。
准备工作
在本教程中,我们将使用基于在 创建新数据库 和 编辑数据库结构 章节中创建的 testdb
数据库的示例。
如何执行…
我们将向 testdb
数据库中的 people
表添加一条记录;然后编辑同一条记录,最后删除它,以展示如何在 Webmin 中执行这些操作。
向数据库表添加一行
要向数据库表中添加一行,请执行以下步骤:
-
转到 服务器 | MySQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
点击 查看数据 按钮。
-
点击 添加行 按钮。
-
在文本框中填写一个名字。
-
点击 保存 按钮。
编辑一行
要编辑一行,请执行以下步骤:
-
转到 服务器 | MySQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
点击 查看数据 按钮。
-
勾选你希望编辑的记录旁边的复选框。
-
点击 编辑选中的行 按钮。
-
修改文本框中的姓名值。
-
点击 保存 按钮。
删除一行
要删除一行,请执行以下步骤:
-
转到 服务器 | MySQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
点击 查看数据 按钮。
-
勾选你希望删除的记录旁边的复选框。
-
点击 删除选中的行 按钮。
它是如何工作的…
Webmin 为相应的 INSERT
、UPDATE
和 DELETE
SQL 命令准备语法,执行这些命令,并以 root
用户身份在 MySQL 服务器上运行它们。
另请参见
- 如果你发现你需要一个更为完整的基于网页的 MySQL 管理工具,可以考虑安装 phpMyAdmin。具体步骤请参见 安装 phpMyAdmin 章节。
检查谁在使用你的数据库服务器
在调试网络连接性、审计安全性或仅仅是出于好奇时,你可能需要检查谁连接到你的数据库服务器。在 Webmin 中,这些信息只需几次点击即可获得。
操作步骤…
按照以下步骤操作:
-
导航到 服务器 | MySQL 数据库服务器。
-
点击 数据库连接 图标。
你将看到一个活跃连接的列表,或者看到一条信息,表示除了 Webmin 之外,当前没有其他客户端连接到数据库。参考以下截图:
https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_09_06.jpg
工作原理…
Webmin 会查询你的 MySQL 服务器以获取有关活跃客户端连接的信息。你也可以通过在 MySQL 客户端中运行 SQL 命令 SHOW PROCESSLIST
来获得相同的信息:
mysql> SHOW PROCESSLIST;
你将看到以下输出:
+------+------+-----------+------+---------+------------------+
| Id | User | Host | db | Command | Info |
+------+------+-----------+------+---------+------------------+
| 5797 | root | localhost | NULL | Query | SHOW PROCESSLIST |
+------+------+-----------+------+---------+------------------+
1 row in set (0.00 sec)
还有更多…
Webmin 还简化了关闭任何不必要连接的操作。客户端需要重新建立连接,才能继续使用数据库。
按照以下步骤关闭连接:
-
导航到 服务器 | MySQL 数据库服务器。
-
点击 数据库连接 图标。
-
在活跃连接描述旁边标记复选框。
-
点击 终止选中的连接 按钮。
安装 phpMyAdmin
phpMyAdmin 是一个常用的 MySQL 数据库管理工具。它是一个基于网页的应用程序,像 Webmin 一样,但专门用于所有与 MySQL 服务器管理相关的任务。它易于使用,是数据库用户和管理员的得力工具。
注意
系统软件包已配置为在 Apache 上运行 phpMyAdmin。Apache Web 服务器和 PHP 作为软件包依赖项一起安装。如果你尚未使用 Apache 和 PHP,这将为你的数据库服务器暴露一个潜在的攻击入口。请考虑安装 phpMyAdmin 的安全影响,并确保其保持最新。
操作步骤…
按照以下步骤在你的系统上设置 phpMyAdmin:
-
安装名为
phpmyadmin
(或根据你的系统选择phpMyAdmin
)的软件包。有关更多信息,请参见 安装软件包 章节,位于 第一章,设置你的系统。提示
在某些系统上,你可能需要添加一个额外的仓库来安装该软件包。例如,如果你使用的是 RedHat 系列的 Linux 发行版(如 RHEL、CentOS、Fedora 等),你应该添加 企业 Linux 的额外软件包(EPEL)仓库。有关设置 EPEL 的信息,可以参见 通过 FTP 让用户访问你的服务器 章节,位于 第六章,管理你系统上的文件。
-
由于 phpMyAdmin 运行在 Apache 之上,你应该确保该服务器已安装在你的系统中,并且能够通过浏览器访问。按照 第八章 中的 在系统上安装 Apache 配方,启动并运行 Apache。
-
访问以下 URL,但请将
webmin-host
替换为你的服务器的 IP 或域名:webmin-host/phpmyadmin
。提示
在某些系统上,phpMyAdmin 被配置为仅允许来自本地主机的连接。如果你希望更改此行为,请前往 服务器 | Apache Web 服务器 | 默认服务器,选择 phpMyAdmin 目录的 每目录选项,然后更改其 访问控制 设置。更多信息请参阅 第八章 中的 设置目录、文件和位置的选项 这一配方,运行 Apache Web 服务器。
有关在你的系统发行版中设置 phpMyAdmin 所需的额外步骤的信息,可以在软件包文档文件中找到。请参阅 第一章 中的 阅读已安装软件的文档 配方,设置你的系统。
-
现在你可以使用 MySQL 帐户的用户名和密码登录。
注意
phpMyAdmin 将以本地计算机连接的方式登录,因此将使用分配给
localhost
上帐户的权限。
它是如何工作的…
phpMyAdmin 是一个用 PHP 编写的应用程序。phpMyAdmin 的主配置文件名为 config.inc.php
,通常安装在 /etc/
目录下。不同发行版的示例位置列在下面的表格中。应用程序本身的代码以 PHP 脚本文件的形式存储在名为 phpMyAdmin 的目录中。
因为 phpMyAdmin 由 Apache 提供服务,所以安装包包括一个特定应用程序的配置文件,该文件将被 Web 服务器加载。此文件告诉 Apache phpMyAdmin 存储在哪个磁盘位置,以及它的哪些目录应该在 Web 上可用。
文件 | 操作系统 / 发行版 | 位置 |
---|---|---|
phpMyAdmin 配置文件 | Debian | /etc/phpmyadmin/config.inc.php |
CentOS | /etc/phpMyAdmin/config.inc.php | |
OpenSUSE | /etc/phpMyAdmin/config.inc.php | |
phpMyAdmin 文件 | Debian | /usr/share/phpmyadmin |
CentOS | /usr/share/phpMyAdmin | |
OpenSUSE | /srv/www/htdocs/phpMyAdmin | |
phpMyAdmin 的 Apache 配置文件 | Debian | /etc/phpmyadmin/apache.conf |
CentOS | /etc/httpd/conf.d/phpMyAdmin.conf | |
OpenSUSE | /etc/apache2/conf.d/phpMyAdmin.conf |
无论包维护者如何决定准备它,你都可以通过进入Servers | Apache Webserver | Default Server,并为 phpMyAdmin 目录选择每目录选项,来调整 Apache 配置。
还有更多内容…
phpMyAdmin 是一个功能非常强大的工具,你可以在其文档中找到关于如何使用它的详细信息:docs.phpmyadmin.net/en/latest/
第十章:运行 PostgreSQL 数据库服务器
本章将介绍以下内容:
-
安装 PostgreSQL 数据库服务器
-
定位 PostgreSQL 服务器配置文件
-
允许通过网络访问 PostgreSQL
-
通过 SSH 隧道访问 PostgreSQL 服务器
-
创建新数据库
-
创建用户并授予权限
-
创建数据库的备份
-
执行自定义 SQL 命令
-
从备份恢复数据库
-
编辑数据库结构
-
编辑数据库中的记录
-
安装 phpPgAdmin
介绍
PostgreSQL 是一个强大的开源关系 数据库管理系统(DBMS)。它具有强大的类型系统和高级编程功能。这使得它能够存储和处理复杂值,如地理坐标、JSON 对象和数组。
PostgreSQL 使用分布式客户端-服务器架构,这意味着数据库服务器和客户端应用程序可以在不同的机器上运行。如果客户端和服务器在同一系统上运行,它们可以使用 Unix 套接字进行通信;否则,它们通过网络使用 TCP 套接字进行通信。PostgreSQL 服务器默认使用端口号 5432,但如果需要,可以更改此设置。
注意
Unix 域套接字是用于进程间通信的通道。运行在同一台机器上的不同程序可以读写套接字信息,从而实现程序之间的通信。Unix 套接字作为文件系统的节点进行表示,因此你可以通过列出创建它的目录的内容来找到一个套接字。
PostgreSQL 数据库管理系统(DBMS)非常流行,大多数操作系统发行版都提供了其易于安装的软件包。每个 PostgreSQL 服务器都托管一个 集群,该集群由一组数据库、相关的配置文件和正在运行的进程组成。在某些系统上,集群必须在安装软件包后初始化。初始化会创建集群的目录结构,并用标准数据库填充它。标准数据库 template1
扮演着特殊的角色,因为所有新数据库默认都是以它为模板创建的。
PostgreSQL 系统的安装涉及创建一个特殊用户,通常命名为 postgres
。该用户对你的数据库拥有完全的管理员控制权限,Webmin 将以该用户身份运行大多数数据库命令和脚本。
Webmin 允许你执行与 PostgreSQL 数据库服务器运行相关的许多任务。在本章中,我们将演示如何通过 Webmin 安装 PostgreSQL、设置通过网络访问服务器、管理用户账户、创建数据库并编辑其结构和数据。我们还将演示如何自动备份数据库并恢复备份文件。如果你发现需要一个更高级的基于 Web 的管理工具,我们将演示如何在服务器上设置 phpPgAdmin。
安装 PostgreSQL 数据库服务器
大多数带有开源软件包管理解决方案的操作系统都提供 PostgreSQL 软件包以供安装。在本食谱中,我们将从软件包安装 PostgreSQL,并在你的系统上进行设置。安装服务器软件包时,会自动安装 PostgreSQL 命令行客户端软件包。
如何操作…
执行以下步骤安装 PostgreSQL 数据库服务器:
-
按照第一章中安装软件包的步骤,设置你的系统,查找并安装 PostgreSQL 数据库服务器软件包。
注意
在大多数软件包仓库中,PostgreSQL 服务器的软件包简单地命名为
postgresql-server
。如果你的发行版允许你选择不同版本的 PostgreSQL,则软件包名称将包含版本号,例如postgresql-9.1
或postgresql93-server
。除非你有理由坚持使用旧版本,否则选择包含最新版本的软件包。 -
点击 Webmin 主菜单底部的刷新模块链接,并重新加载浏览器以更新菜单。
-
进入服务器 | PostgreSQL 数据库服务器。你应该能看到一个列出已安装数据库的界面,其中应包含
postgresql
和template1
等默认数据库。 -
如果你没有看到数据库列表,而是看到一个表示数据库系统尚未初始化的消息,请点击初始化数据库按钮。
提示
在屏幕底部,如果你看到消息警告:你的系统上没有安装 Perl 模块 DBI 和 DBD::Pg,点击链接并按照 Webmin 的说明安装缺失的 Perl 模块。
-
进入系统 | 启动与关机,并验证初始化脚本
postgresql
是否设置为开机启动。如果没有,选中它的复选框,并点击立即启动并开机启动按钮。
工作原理…
Webmin 帮助你从发行版的仓库中找到并安装postgresql-server
软件包。该软件包安装数据库服务器、客户端以及一个初始化脚本,用于在系统启动时启动服务器。
在 Postgres 用于管理数据库之前,必须创建一个新的集群。PostgreSQL 集群是由单一服务器管理的一组数据库。创建集群涉及创建一个目录,在其中存储数据库文件,并用一些标准数据库填充它。名为template1
的标准数据库起着特殊的作用,因为集群中的所有新数据库将通过复制该模板来创建。
如果你的软件包安装脚本没有为你初始化数据库集群,可以通过点击初始化数据库按钮请求 Webmin 来完成此操作。这将运行初始化脚本的以下子命令:
/etc/rc.d/init.d/postgresql initdb
另见
- 如果你想允许其他计算机访问你的数据库,请查看食谱允许通过网络访问 PostgreSQL。
定位 PostgreSQL 服务器配置文件
PostgreSQL 服务器的主配置文件通常名为postgresql.conf
,默认情况下存储在数据库集群的数据目录中。不同的系统发行版会将该配置文件移动到数据目录外部并放置在其他位置,例如/etc/
目录。在本教程中,我们将演示如何查找postgresql.conf
并修改它以调整服务器配置。Webmin 不会帮助你修改 PostgreSQL 的基本设置,因此你需要手动编辑配置文件。
准备工作
确保已经安装并运行了 PostgreSQL 服务器,并且在开始之前你能够通过 Webmin 连接到它。关于此的详细信息,请参考安装 PostgreSQL 数据库服务器。
如何操作…
按照以下步骤定位系统中 PostgreSQL 的主配置文件:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击默认数据库的图标,
postgres
。 -
点击执行 SQL按钮。
-
在提供的文本框中输入以下 SQL 命令:
SHOW config_file;
-
点击执行按钮,你将看到 SQL 命令的输出,其中提供了主服务器配置文件的完整路径,如下图所示:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849OS_10_01.jpg
工作原理…
当初始化脚本启动 PostgreSQL 服务器时,它可能会指定数据库集群数据目录的位置或服务器主配置文件的位置(通常叫做postgresql.conf
)。默认情况下,主配置文件存储在数据目录内部,但软件包维护者通常将其移到不同的位置(例如/etc/
),以便保持系统配置文件的整洁。SQL 命令SHOW config_file;
可以用来检查主配置文件的位置。
还有更多…
其他配置文件的位置和其他设置的值也可以使用 SQL SHOW
命令显示。
确定其他配置文件和数据文件的位置
使用以下命令检查其他配置文件的位置:
设置 | 命令 |
---|---|
主配置文件(postgresql.conf ) | SHOW config_file; |
数据目录 | SHOW data_directory; |
基于主机的访问配置文件(pg_hba.conf ) | SHOW hba_file; |
身份映射文件(pg_ident.conf ) | SHOW ident_file; |
Unix 域套接字创建目录 | SHOW unix_socket_directory; |
检查其他设置的值
你也可以通过发出以下命令来显示所有设置的值:
SHOW all;
允许通过网络访问 PostgreSQL
访问 PostgreSQL 数据库的程序(称为客户端)可能与服务器运行在同一台机器上。在这种情况下,客户端和服务器将通过 Unix 域套接字进行高效通信,Unix 域套接字是一种通过文件系统(如文件或目录)访问的进程间通信通道。对套接字的访问受文件系统权限控制。
其他客户端程序可能只能通过 TCP 网络套接字进行通信。这些客户端可以通过回环接口和127.0.0.1
的 IP 地址连接到本地服务器。
然而,如果客户端程序位于不同于服务器的机器上,则它们之间的通信必须通过网络使用 TCP 协议进行。对于 PostgreSQL,有多种方式可以设置网络连接。最有效但最不安全的方法是使用客户端与服务器之间的直接未加密连接。这种方法的缺点是未加密的信息可能会在网络传输过程中被窃听或篡改。由于数据库系统通常设计为尽可能高效,因此这种通信方式被广泛使用,但只能在安全的网络内部部署。在本教程中,我们将描述如何启用这种通信方式。
提示
为了使 PostgreSQL 服务器的网络访问更加安全,您可以选择使用 SSL 加密传输的信息。这可以防止窃听和中间人攻击,但会暴露 PostgreSQL 服务器的网络端口,可能会受到暴力破解密码和其他攻击的威胁。
如果您确实需要安全性,例如通过互联网访问您的数据库服务器,您可能应该选择第三种方式:通过加密的 SSH 隧道发送 PostgreSQL 流量。这是上述传输方法中效率最低的一种,但它带来的安全问题最少。有关更多信息,请查看教程通过 SSH 隧道访问 PostgreSQL 服务器。
准备工作
在本教程中,我们将准备您的 PostgreSQL 服务器以接受传入的网络连接。为了测试连接,我们需要访问两台连接到同一网络的计算机:服务器和客户端机器。在开始之前,请记下服务器和客户端的 IP 或域名。
如何操作…
本教程中的步骤将分为五个部分:
-
首先,我们将指示 PostgreSQL 在标准端口(
5432
)上监听传入的网络连接。 -
接下来,我们将创建一个名为
dbuser
的数据库用户。 -
然后,我们将创建一个名为
testtdb
的数据库。 -
我们将允许远程访问数据库。
-
最后,我们将通过从辅助客户端机器连接到我们的服务器来测试设置。
执行以下步骤,指示 PostgreSQL 服务器监听网络连接:
-
按照配方《通过防火墙允许访问服务》中的步骤,在第三章《保护您的系统》中,允许 TCP 流量通过防火墙进入 5432 端口。
-
查找 PostgreSQL 主服务器配置文件(
postgresql.conf
)的位置。有关详细说明,请参阅配方《定位 PostgreSQL 服务器配置文件》。 -
在
postgresql.conf
文件中,找到包含listen_addresses
指令的行。该行可能被注释掉(以#
字符开头)。将该行更改为以下内容:listen_addresses = '*'
提示
在服务器上编辑文件的最有效方式是使用 Vim 或 Nano 等编辑器在终端会话中进行(例如,通过 SSH)。但是,要对配置文件进行小的更改时,您无需离开 Webmin。请查看第六章《管理系统中的文件》配方中的在服务器上编辑文件部分。
-
在进行配置更改后,我们必须重启服务器。导航到服务器 | PostgreSQL 数据库服务器,点击停止 PostgreSQL 服务器按钮,然后点击启动 PostgreSQL 服务器按钮。
现在,您的 PostgreSQL 服务器将监听端口 5432 上的传入网络连接。
执行以下步骤以创建新用户:
-
导航到服务器 | PostgreSQL 数据库服务器 | PostgreSQL 用户。
-
点击创建新用户链接。
-
将用户名设置为
dbuser
,并在密码字段中设置一个强密码。 -
对可以创建数据库?和可以创建用户?的问题选择否。
-
点击创建按钮。
执行以下步骤以创建数据库:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击创建新数据库链接。
-
将数据库名称设置为
testdb
。 -
将所有者用户设置为
dbuser
。 -
将模板数据库设置为
template1
:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849OS_10_01b.jpg -
点击创建按钮。
执行以下步骤以授予用户远程访问数据库的权限:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击允许的主机图标。
-
点击创建新允许的主机链接。
-
将主机地址设置为单一主机,并输入客户端计算机的 IP 地址(例如,
10.10.10.100
)。提示
如果客户端可以从多个 IP 连接,您可以通过提供网络和子网掩码或 CIDR 长度来指定子网。例如,要允许
10.10.10.*
子网中的所有计算机访问,您可以指定网络为10.10.10.0
,并选择子网掩码255.255.255.0
或 CIDR 长度24
。 -
将需要 SSL 连接?设置为是。
提示
不使用 SSL 可以减少一些性能开销,但只有在完全信任的网络上才能这样做。
-
将数据库设置为
testdb
。 -
将用户设置为列出用户并输入
dbuser
。 -
将身份验证模式设置为MD5 加密密码:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849OS_10_02.jpg
-
点击创建按钮。
-
我们需要重新启动服务器一次,以加载新的访问配置。导航到服务器 | PostgreSQL 数据库服务器,点击停止 PostgreSQL 服务器按钮,然后点击启动 PostgreSQL 服务器按钮。
提示
在繁忙的生产系统中,不必要地重启数据库服务器是一个不好的主意,尽管这是重新加载所有设置的可靠方法。在更改访问设置后,实际上不需要重启服务器。您可以改为发送一个
SIGHUP
信号。该信号指示 Postgres 重新加载其配置。在配备有pg_ctl
程序的系统上,可以通过发出以下命令来实现:$ sudo pg_ctl reload
在具有
pg_ctlcluster
命令的系统上,您需要指定服务器版本和集群名称,例如:$ sudo pg_ctlcluster 9.1 main reload
为了测试连接,尝试从我们指定的 IP 的客户端机器连接到您的数据库服务器。如果您的另一台机器上安装了 PostgreSQL 命令行客户端,您可以在终端中输入以下命令来测试连接。但请将postgresql-host
替换为您的 Postgres 服务器的 IP 或域名,如下所示:
$ psql -h postgresql-host -U dbuser testdb
testdb=# \q
如果连接成功,您应该会看到 PostgreSQL 提示符(testdb=#
)。输入\q
并按Enter退出。
它是如何工作的…
为了启用对 PostgreSQL 数据库服务器的网络访问,我们需要修改两个配置文件。我们手动编辑了主配置文件(postgresql.conf
),指示服务器监听所有网络接口上的传入网络连接。第二个文件通过 Webmin 的界面进行了编辑,是基于主机的身份验证配置文件(pg_hba.conf
)。该文件指示服务器允许哪些用户从哪些网络主机连接,并要求他们如何进行身份验证。
Webmin 将以下行添加到pg_hba.conf
:
hostssl testdb dbuser 10.10.10.100 255.255.255.255 md5
前一行指示服务器接受来自 IP 地址10.10.10.100
的dbuser
用户对testdb
数据库的 SSL 连接。要求用户提供一个 MD5 加密的密码进行身份验证。
pg_hba.conf
中的另一行可能如下所示:
local all postgres peer
这一行指示服务器接受通过 Unix 套接字进行的本地连接。这些连接使用peer
身份验证方法,它检查运行连接客户端程序的系统账户的用户名。如果系统用户名与 Postgres 账户名匹配,则该连接被视为已通过身份验证。在peer
身份验证中不会执行密码检查。前一行代码将允许系统账户postgres
访问所有
数据库。
另见
- 为了使 PostgreSQL 数据库的远程访问和管理更加安全,你可以通过 SSH 隧道化连接。有关说明,请查看配方 通过 SSH 隧道访问 PostgreSQL 服务器。
通过 SSH 隧道访问 PostgreSQL 服务器
如果你的服务器正在互联网上托管一个网站,并且在同一台机器上运行数据库系统,那么禁用数据库的远程网络访问是更安全的。另一方面,你可能仍然希望远程管理你的数据库。你可以通过将 PostgreSQL 流量通过 SSH 连接进行隧道化来实现这一点。
注意
数据库系统的一个重要方面是它能够多快地查找并返回你请求的数据。通过 SSH 隧道传输流量将为这种通信增加显著的开销。这个解决方案非常适合间歇性的管理任务,但不适合作为直接连接到数据库系统的替代方案。
准备工作
在通过 SSH 隧道访问 PostgreSQL 服务器之前,你需要确保在 pg_hba.conf
文件中存在一个允许的主机条目。该条目应该允许来自回送 IP 127.0.0.1
的用户使用 MD5 加密的密码进行身份验证。有关更多信息,请查看配方 允许通过网络访问 PostgreSQL。在 pg_hba.conf
文件中的适当条目如下所示:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
你想连接的服务器必须同时运行 PostgreSQL 服务器和 SSH 服务器。远程客户端机器必须安装 SSH 客户端和 PostgreSQL 客户端软件。请记录下服务器的 IP 地址或域名(postgresql-host
)、SSH 用户名(ssh-user
)、PostgreSQL 用户(postgresql-user
)和数据库名称(database-name
)。在下面的步骤中用它们替换相应内容。
如何执行此操作…
为了创建一个 PostgreSQL 的 SSH 隧道,请按照以下步骤操作:
-
在客户端机器上执行以下命令:
$ ssh -N -L 15000:localhost:5432 ssh-user@postgresql-host
这将在客户端机器的
15000
端口与服务器的5432
端口之间创建一个隧道。你现在可以通过连接到客户端计算机的本地15000
端口来访问远程数据库。 -
在客户端系统上执行以下命令以测试连接:
$ psql -h 127.0.0.1 -p 15000 -U postgresql-user database-name
它是如何工作的…
SSH 客户端充当你机器上运行的 PostgreSQL 客户端和远程服务器之间通信的中介。它在客户端机器上打开 15000
端口,并监听传入连接。所有到达 15000
端口的数据包都会被加密,并通过 SSH 转发到服务器。在服务器端,SSH 接收这些数据包,解密后将它们发送到 5432
端口。答案会沿相同的通道反向发送回来。
另请参阅
-
有许多工具可以让你连接和控制 PostgreSQL 数据库。Webmin 提供了多种工具来执行大多数常见任务,相关配方在本章中有描述。
-
一个更强大的基于 Web 的 PostgreSQL 解决方案是 phpPgAdmin。它在食谱中有所讨论,安装 phpPgAdmin。
-
关于 SSH 隧道的更多信息,请参考食谱,通过 SSH 隧道安全连接到 Webmin,第三章,保护您的系统。
创建新数据库
通过 Webmin 界面创建 PostgreSQL 数据库非常快捷简便。
如何操作…
按照以下步骤创建数据库:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击创建新数据库链接。
-
输入数据库名称,例如
new_db
。 -
从所有者下拉菜单中选择将拥有数据库管理权限的用户。
-
将字符集编码和数据库文件路径保持为默认。
-
将模板数据库设置为
template1
。 -
点击创建按钮。
工作原理…
Webmin 会根据你提供的信息,通过连接 PostgreSQL 服务器并执行以下命令来创建一个新数据库:
CREATE DATABASE new_db WITH OWNER="dbuser" TEMPLATE = template1;
Postgres 通过复制所选模板来创建新数据库。数据库template1
默认安装,用作新创建数据库的默认设置源。如果你希望新数据库具有不同的设置,例如字符集和排序规则,你可以对模板数据库进行这些更改。
创建数据库的另一种方式是以用户postgres
执行createdb
命令,例如:
postgres@postgresql-host:~$ createdb --owner dbuser new_db
另见
- 如果你有初始数据库结构或内容,可以通过 SQL 命令文件将它们上传到服务器。有关更多信息,请查看食谱,执行自定义 SQL 命令。
创建用户并授予权限
通过 Webmin 创建 PostgreSQL 用户非常简单。用户可以被指定为新创建数据库的所有者,并拥有完全访问和管理权限。用户也可以被授予特定数据库表的有限权限。
如何操作…
在本食谱中,我们将创建一个名为dbuser
的新用户,并在名为testdb
的数据库中的表dbtable
上授予选定的权限。
按照以下步骤创建用户:
-
导航到服务器 | PostgreSQL 数据库服务器 | PostgreSQL 用户。
-
点击创建新用户链接。
-
将用户名设置为
dbuser
,并在密码字段中设置强密码。 -
对可以创建数据库吗?和可以创建用户吗?问题选择否。
-
将有效期至设置为永久。
-
点击创建按钮。
按照以下步骤在数据库表上授予用户权限:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击已授予权限图标。
-
点击要修改权限的数据库对象名称(例如,表名
dbtable
)。 -
从用户下拉菜单中选择用户
dbuser
。 -
勾选你希望授予的权限旁边的复选框:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849OS_10_03.jpg
-
点击 保存 按钮。
它是如何工作的…
Webmin 通过连接到 PostgreSQL 服务器并执行以下命令来创建一个新的数据库用户:
CREATE USER 'dbuser' WITH PASSWORD '***' NOCREATEDB NOCREATEUSER;
创建数据库用户的另一种方法是以 postgres
用户身份执行 createuser
命令,例如:
postgres@postgresql-host:~$ createuser dbuser
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
权限通过 GRANT
命令分配给用户,例如:
GRANT SELECT,UPDATE,INSERT,DELETE ON "public"."dbtable" to 'dbuser';
PostgreSQL 手册提供了以下权限定义:
权限 | 定义 |
---|---|
SELECT | 允许从指定表的任何列执行 SELECT 操作。 |
UPDATE | 允许对指定表的任何列执行 UPDATE 操作。 |
INSERT | 允许在指定表中插入新行。 |
DELETE | 允许从指定表中删除一行。 |
RULE | 允许在表上创建规则。 |
REFERENCES | 要创建外键约束,必须在引用表和被引用表上都拥有此权限。 |
TRIGGER | 允许在指定表上创建触发器。 |
还有更多…
PostgreSQL 并不容易授予整个数据库的权限。为了授予名为 dbuser
的用户访问 public
schema 中所有表的权限,可以执行以下命令:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO 'dbuser';
注意
PostgreSQL 数据库可能会被划分为 schemas。每个 schema 包含一组独立于其他 schema 的表,并且可能使用不同的用户权限。默认情况下,每个数据库仅包含一个名为 public
的 schema,所有表都分配给它。
插入新对象也需要对序列对象的访问权限,可以按如下方式授予:
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO dbuser;
不幸的是,当你向数据库添加新表或添加另一个 schema 时,你将不得不重新执行这些命令。另一种选择是通过使用 ALTER DEFAULT PRIVILEGES
命令设置对象的默认权限:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO 'dbuser';
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO 'dbuser';
另见
-
请参阅配方,执行自定义 SQL 命令,了解执行命令的相关信息。
-
你可以在 PostgreSQL 手册中找到更多关于授予权限的信息:
创建数据库备份
Webmin 可以帮助你备份 PostgreSQL 数据库。只需几次点击,你就可以备份任何数据库。Webmin 还可以帮助你设置 cron 作业,定期自动创建备份。
准备工作
在开始之前,创建一个目录来存储本地备份文件。你可以将这些文件保存在根目录的 /backups
、/root/backups
或你觉得方便的任何位置。
备份目录应由postgres
用户拥有,并且仅限该用户访问。有关更多信息,请查看第六章,管理文件,其中包含“更改文件所有权和权限”的相关内容。
要获取有关备份的一般背景信息,请参考第七章,备份系统。
如何操作…
按照以下步骤创建数据库备份:
-
转到服务器 | PostgreSQL 数据库服务器。
-
点击表示您想要备份的数据库的图标。
-
点击备份按钮。
-
将备份文件路径设置为
/backups/database-name.sql
。 -
将备份文件格式设置为纯 SQL 文本。
注意
备份将作为一系列 SQL 语句以纯文本格式存储。如果您正在导出一个大型数据库,请使用压缩的自定义归档格式。
-
将要备份的表设置为所有表。
-
点击立即备份按钮。
它是如何工作的…
Webmin 执行pg_dump
命令,输出一系列 SQL 命令,这些命令用于重新创建整个数据库。该命令以具有数据库管理员访问权限的用户身份运行。在大多数系统中,该用户被称为postgres
。
数据库转储将保存到指定的输出文件中。如果您想在终端中执行相同的备份操作,您可以运行如下命令:
postgres@postgresql-host:~$ pg_dump -U postgres -f /backups/database-name.sql database-name
还有更多…
Webmin 是一个非常强大的备份工具。以下是一些其他容易访问的功能。
自动备份所有数据库
Webmin 可以帮助您自动备份服务器托管的部分或所有数据库。这些备份将由 cron 按常规计划执行。
-
转到服务器 | PostgreSQL 数据库服务器。
-
点击备份数据库按钮。
-
将备份到目录设置为您的备份目录的位置,例如
/backups
。 -
将备份文件格式设置为自定义归档。
注意
自定义归档格式经过压缩以节省磁盘空间。它也非常灵活,允许在恢复阶段手动选择归档项目。
-
打开备份计划部分。
-
将启用定期备份?设置为是,在下面选择的时间;设置简单计划并选择每天(午夜时分)。
注意
请注意,系统中可能有许多任务被安排在午夜启动,因此如果系统资源有限,您可以选择其他时间。通过标记任务要执行的分钟、小时和日期,选择更复杂的计划。
-
点击保存按钮。
将数据库表导出为 CSV
Webmin 可以将您数据库的单个表导出为 CSV 文件,该文件可以被 Excel、Calc 或 Gnumeric 等电子表格程序打开:
-
转到服务器 | PostgreSQL 数据库服务器。
-
点击数据库的图标,然后点击您想要导出的表的图标。
-
点击导出为 CSV按钮。
-
将文件格式设置为带引号的 CSV。
-
将在 CSV 中包含列名?设置为是。
-
将导出目标设置为在浏览器中显示。
-
点击立即导出按钮。
另见
-
你可以使用网络文件共享协议(如 NFS 或 CIFS)轻松地将备份存储到远程主机。首先,你需要在远程服务器上创建一个网络卷,然后将该卷挂载到你的服务器上。然后,你可以像操作本地目录一样,轻松地将数据备份到远程系统的目录中。有关如何使用 NFS 或 CIFS 设置网络文件共享的说明,请查看第六章,管理系统中的文件。
-
另一个将数据库备份副本远程存储的方法是通过 SSH 协议将备份目录发送到远程服务器。有关更多信息,请查看第七章,备份到远程主机部分。
执行自定义 SQL 命令
Webmin 提供了一个简单的界面与您的 Postgres 数据库服务器交互,允许你执行任意 SQL 命令。当你想快速查找数据库中的某些内容或对多行数据执行批量更新时,这是一个非常有用的功能。
如何操作…
执行以下步骤以执行自定义 SQL 命令:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击代表你希望使用的数据库的图标。
-
点击执行 SQL按钮。
-
在文本框中输入 SQL 命令,例如:
CREATE TEMPORARY TABLE IF NOT EXISTS films ( title varchar(40) ); INSERT INTO films(title) VALUES ('Bananas'), ('Yojimbo'); SELECT * FROM films;
-
点击执行按钮。
你将看到由SELECT
命令返回的数据的可排序显示。展示的数据来自第一个命令创建的临时films
表。临时表在创建它们的客户端断开连接时不会被存储,因此你以后在数据库中看不到这个表。
它是如何工作的…
Webmin 仅将 SQL 命令传递给数据库服务器。如果命令返回错误,将在屏幕上显示。如果命令返回数据行,Webmin 会将其转换为 HTML 页面并在屏幕上显示。请注意,Webmin 是以管理员用户(postgres
)身份运行的,因此在执行命令时要小心。
还有更多…
Webmin 还允许你执行保存在文件中的 SQL 脚本。这些脚本可以用于从纯 SQL 文本备份恢复数据库。
从文件执行 SQL 脚本
执行以下步骤从文件执行 SQL 脚本:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击代表你希望使用的数据库的图标。
-
点击执行 SQL按钮。
-
选择从文件运行 SQL选项卡。
-
如果你已将文件上传到服务器,选择从本地文件并在文本框中输入文件的位置。否则,选择从上传的文件并从你的磁盘中选择一个文件。
-
点击执行按钮。
另见
-
你可以将经常执行的命令保存在 Webmin 中的一个易于使用的控制面板里。有关更多信息,请查看 第四章 控制你的系统 中的食谱,创建一个面板来执行你经常执行的数据库命令。
-
如果你发现需要一个更全面的 Web 基于 PostgreSQL 的管理工具,可以考虑安装 phpPgAdmin。该过程在 安装 phpPgAdmin 食谱中有详细描述。
从备份恢复数据库
Postgres 数据库的备份是通过 pg_dump
命令创建的,该命令可以输出多种格式。默认情况下,备份会作为普通的 SQL 脚本文件创建,但压缩的自定义 PostgreSQL 格式更加高效。Webmin 帮助你以这两种格式以及 TAR
格式创建备份。
恢复数据库的方法将取决于备份时选择的文件格式。如果你选择了普通的 SQL 文本格式,只需运行备份脚本即可恢复数据库。有关更多信息,请查看食谱,执行自定义 SQL 命令。
如果你选择了自定义存档或 TAR
文件格式,你应该使用本食谱中描述的过程。
如何操作……
按照以下步骤从备份恢复数据库:
-
导航到 服务器 | PostgreSQL 数据库服务器。
-
点击代表你希望恢复的数据库图标。
-
点击 恢复 按钮。
-
选择 从上传的文件恢复,点击 浏览,然后从你的计算机中选择文件。
提示
如果备份文件大于几 MB,最好先将文件上传到服务器,然后再执行恢复操作。有关更多信息,请查看 第六章 管理你的系统上的文件 中的食谱,上传文件到服务器。
-
将 只恢复数据,不恢复表? 设置为 否。
-
将 恢复前删除表? 设置为 是。
-
将 恢复的表 设置为 备份文件中的所有表。
-
点击 恢复 按钮。
它是如何工作的……
Webmin 将你的文件上传到服务器,然后执行 pg_restore
命令,将备份的内容加载到数据库中。如果你希望在终端中恢复备份,可以运行类似以下的命令:
postgres@postgresql-host:~$ pg_restore -c -d database-name backup-file.post
命令行选项如下所示:
-
-c
:此选项会在重新创建数据库对象之前删除它们。 -
-d
:此选项指定你希望恢复的数据库。
还有更多……
Webmin 可以从 CSV 文件中将数据导入到数据库表中,CSV 文件可以通过 Excel、Calc 或 Gnumeric 等电子表格程序创建。
按照以下步骤从格式正确的 CSV 文件中恢复数据库表:
-
导航到 服务器 | PostgreSQL 数据库服务器。
-
点击代表你希望导入数据的数据库图标。
-
点击 执行 SQL 按钮。
-
选择 导入文本文件 标签。
-
如果你将文件上传到服务器,请选择 从本地文件 并在文本框中输入文件的位置。否则,选择 从上传文件 并从磁盘中选择一个文件。
-
从 导入数据的表 下拉菜单中选择一个表。
-
将 首先删除表中的数据 设置为 否。
-
将 忽略重复行 设置为 是。
-
将 文件格式 设置为 带引号的 CVS。
提示
当从你的电子表格程序导出数据时,你必须选择相同的格式。如果遇到问题,尝试其他格式。
-
点击 执行 按钮。
你将看到一个信息屏幕,描述成功导入了多少行或遇到了哪些错误。
编辑数据库结构
Webmin 允许你通过一个易于使用的界面快速修改 PostgreSQL 数据库中表的结构。在本节中,我们将演示如何执行以下任务:
-
在数据库中创建一个表
-
向数据库表中添加一个字段
-
创建一个索引
-
删除一个索引
-
删除一个字段
-
删除数据库中的表
准备工作
为了演示目的,我们将使用名为 testdb
的数据库。你可以通过 Webmin 按照本节中的步骤创建一个同名的数据库,创建一个新数据库。
如何操作…
在 testdb
数据库中,我们将创建一个名为 people
的表,并向该表添加一个名为 name
的字段。然后,我们将更改字段的名称,添加一个唯一索引,最后从数据库中删除该索引、字段和表。
执行以下步骤以在数据库中创建一个表:
-
导航到 服务器 | PostgreSQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击 创建表 按钮。
-
指定
people
为 表名。 -
提供将作为该表主键的字段定义。填写以下字段定义:
-
在 字段名称 中输入
id
。 -
在 数据类型 中输入
serial
。 -
勾选 主键 和 唯一 复选框。
-
取消勾选 数组 和 允许空值 复选框:
-
-
点击 创建 按钮。
执行以下步骤以向数据库表中添加一个字段:
-
导航到 服务器 | PostgreSQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
从类型下拉菜单中选择 varchar 并点击 添加字段类型 按钮。
-
填写以下字段定义:
-
字段名称:
name
-
类型宽度:
80
-
数组字段:
否
-
-
点击 创建 按钮。
执行以下步骤以创建一个索引:
-
导航到 服务器 | PostgreSQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
点击 创建索引 按钮。
-
将 索引名称 设置为
unique_name
。 -
在 索引中的字段 列表中选择字段
name
。 -
将 索引类型 设置为 唯一。
-
点击创建按钮。
执行以下步骤以删除一个索引:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
unique_name
索引的图标。 -
点击删除按钮。
执行以下步骤以删除一个字段:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
在
name
字段旁边勾选复选框。 -
点击删除选定字段按钮。
执行以下步骤以从数据库中删除一个表:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
点击删除表按钮,并在随后的屏幕中确认。
它是如何工作的…
Webmin 为适当的CREATE
、DROP
和ALTER TABLE
SQL 命令准备语法,并作为postgres
用户在你的 PostgreSQL 服务器上执行这些命令。
另见
- 如果你发现需要一个更完整的基于网页的 PostgreSQL 管理工具,可以考虑安装 phpPgAdmin。安装过程在《安装 phpPgAdmin》一节中有描述。
编辑数据库中的记录
Webmin 允许你通过简单的界面快速编辑 PostgreSQL 数据库中的数据。在本食谱中,我们将演示如何在数据库表中添加、编辑和删除记录。
准备中
在本食谱中,我们将使用基于testdb
数据库和在食谱《编辑数据库结构》中创建的people
表的示例。
如何操作…
我们将向testdb
数据库的people
表中添加一条记录;我们将编辑相同的记录,最后删除它,展示如何在 Webmin 中执行这些操作。
执行以下步骤以向数据库表中添加一行:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
点击查看数据按钮。
-
点击添加行按钮。
-
填写数字
id
并在文本框中输入name
。 -
点击保存按钮。
执行以下步骤以编辑一行:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
点击查看数据按钮。
-
在你想要编辑的记录旁边勾选复选框。
-
点击编辑选定行按钮。
-
更改文本框中的
name
值。 -
点击保存按钮。
执行以下步骤以删除一行:
-
导航到服务器 | PostgreSQL 数据库服务器。
-
点击代表
testdb
数据库的图标。 -
点击代表
people
表的图标。 -
点击查看数据按钮。
-
在你想要编辑的记录旁边勾选复选框。
-
点击删除选定行按钮。
它是如何工作的…
Webmin 准备了适当的语法,用于执行 INSERT
、UPDATE
和 DELETE
SQL 命令,并作为 postgres
用户在 PostgreSQL 服务器上执行这些命令。
另请参见
- 如果您发现需要一个功能更全的、基于 Web 的 PostgreSQL 管理工具,请考虑安装 phpPgAdmin。有关详细信息,请参见《安装 phpPgAdmin》食谱。
安装 phpPgAdmin
phpPgAdmin 是一个用于 PostgreSQL 的数据库管理工具。它是一个基于 Web 的应用程序,类似于 Webmin,但专门用于 PostgreSQL 服务器的管理任务。它易于使用,可以成为数据库用户和管理员的有力工具。
注意
系统软件包已配置为在 Apache 上运行 phpPgAdmin。Apache Web 服务器和 PHP 被安装为包依赖项。如果您尚未使用 Apache 和 PHP,这可能会暴露数据库服务器的潜在攻击面。在安装 phpPgAdmin 并保持其更新时,请考虑安全性问题。
如何操作…
执行以下步骤来安装 phpPgAdmin:
-
安装名为
phpPgAdmin
(或phppgadmin
,具体取决于您的系统)的软件包。有关更多信息,请参见食谱《安装软件包》中的第一章,设置系统。提示
在某些系统中,您可能需要添加额外的仓库来安装该软件包。例如,如果您使用的是来自 RedHat 系列的 Linux 发行版(如 RHEL、CentOS、Fedora 等),则需要添加 企业 Linux 的附加软件包(EPEL)仓库。有关设置 EPEL 的信息,请参见食谱《通过 FTP 给用户提供访问权限》中的第六章,管理系统中的文件。
-
由于 phpPgAdmin 运行在 Apache 之上,您需要确保该服务器已经安装在您的系统上并且可以通过浏览器访问。请按照食谱《在系统上安装 Apache》中的步骤,从第八章,运行 Apache Web 服务器,使 Apache 启动并正常运行。
-
请访问以下 URL,但将
webmin-host
替换为您的服务器的 IP 或域名:http://webmin-host/phppgadmin
或http://webmin-host/phpPgAdmin
(具体取决于发行版)。提示
在某些系统中,phpPgAdmin 默认仅允许来自本地主机的连接。如果你希望更改此行为,请转到服务器 | Apache Web 服务器 | 默认服务器,选择 phpPgAdmin 目录的每目录选项,并更改其访问控制设置。更多信息请参见食谱《设置目录、文件和位置的选项》中的第八章,运行 Apache Web 服务器。
有关在系统分发中设置 phpPgAdmin 可能需要的其他步骤的信息可以在软件包文档文件中找到。请参阅第一章的阅读已安装软件的文档部分,设置您的系统。
-
您现在可以使用 PostgreSQL 帐户的用户名和密码登录。
根据 phpPgAdmin 配置的方式定义,它将通过 Unix 套接字或 TCP 网络套接字连接到您的 Postgres 服务器。在config.inc.php
中的以下行决定如何建立连接:
$conf['servers'][0]['host'] = 'localhost';
如果服务器的主机值设置为'localhost'
,则通过网络套接字进行连接。如果该值设置为空字符串''
,则通过 Unix 套接字进行连接。
您的 Postgres 服务器必须设置为处理所选类型的连接并允许用户使用密码进行身份验证。有关更多信息,请参阅允许通过网络访问 PostgreSQL部分。
提示
如果您运行基于 RedHat 的系统并启用了安全增强 Linux(SELinux),您可能需要设置以下标志以允许 Apache 连接到数据库:
$ sudo setsebool -P httpd_can_network_connect_db 1
工作原理…
phpPgAdmin 是用 PHP 编写的应用程序。phpPgAdmin 的主配置文件名为config.inc.php
,通常安装在/etc/
目录内。不同分发版的示例位置列在以下表格中。应用程序的代码本身以 PHP 脚本文件形式存储在名为phpPgAdmin
的目录中。
由于 phpPgAdmin 由 Apache 提供支持,安装包包含一个应用程序特定的配置文件,该文件将由 Web 服务器加载。此文件告知 Apache 在磁盘上存储 phpPgAdmin 的位置以及应在 Web 上提供其哪些目录:
文件 | 操作系统 / 发行版 | 位置 |
---|---|---|
phpPgAdmin 配置 | Debian | /etc/phppgadmin/config.inc.php |
CentOS | /etc/phpPgAdmin/config.inc.php | |
OpenSUSE | /etc/phpPgAdmin/config.inc.php | |
phpPgAdmin 文件 | Debian | /usr/share/phppgadmin |
CentOS | /usr/share/phpPgAdmin | |
OpenSUSE | /srv/www/htdocs/phpPgAdmin | |
phpPgAdmin 的 Apache 配置文件 | Debian | /etc/apache2/conf.d/phppgadmin |
CentOS | /etc/httpd/conf.d/phpPgAdmin.conf | |
OpenSUSE | /etc/apache2/conf.d/phpPgAdmin.conf |
无论包维护者决定如何准备它,您都可以通过转到服务器 | Apache Web 服务器 | 默认服务器并选择 phpPgAdmin 目录的每目录选项来调整 phpPgAdmin 的 Apache 配置。
第十一章. 运行 Web 应用程序
在本章中,我们将涵盖以下内容:
-
使用 CGI 生成动态页面
-
安装 PHP
-
更改 PHP 配置设置
-
调试时显示 PHP 错误
-
在 PHP 中记录日志
-
在您的服务器上安装 WordPress
-
在您的服务器上安装 Drupal
-
使用
mod_wsgi
安装基于 Django 的应用程序
介绍
互联网网站大致可以分为两类:静态网站和动态网站。当 Web 服务器托管静态网站时,其角色非常有限。服务器等待传入的请求,将每个请求映射到磁盘上的文件,并将文件的内容作为响应发送。此类网站的所有页面必须提前准备好,并且在访问之间不会自动更改。此类网站的功能看起来可能有限,但它们确实有许多优点。由于服务器不进行任何计算工作,静态网站可以非常快速,并且可以处理大量请求。此类网站也容易被搜索引擎索引。静态网站并不意味着它不能具有互动性。JavaScript 组件允许浏览器为用户提供图形界面,用户可以通过这个界面与我们的网站互动。然而,如果用户提供我们希望存储的信息,我们将需要一个动态组件来处理传入的数据。
在动态网站上,传入的请求不会直接映射到磁盘上的文件;相反,它们会交给程序处理,每个请求都会生成一个响应。处理通常涉及与数据库交互以查找或存储信息;响应是即时生成的,并且每次可能不同。动态网站是现代互联网的一个重要组成部分,而 Apache 是一个可以托管大多数可用动态技术的服务器。
在第八章中,运行 Apache Web 服务器,我们展示了 Webmin 如何帮助您设置 Web 服务器来托管静态网站。在本章中,我们将深入探讨与各种动态网站解决方案相关的话题。我们将从 CGI 开始,这是通过使用任何语言编写的程序来提供动态网站的经典方法。为了说明这一点,我们将演示如何设置一个由 Bash 脚本驱动的简单动态网站。接下来,我们将展示如何托管更高效的特定语言技术。本章的大部分内容都集中在 PHP 语言上,但最后的示例演示了如何使用 Apache 模块 mod_wsgi
托管用 Python 编写的应用程序。
使用 CGI 生成动态页面
自万维网(World Wide Web)最早期以来,使用一种标准方法叫做 公共网关接口(CGI)生成动态网页是可能的。通过使用 CGI,Apache Web 服务器可以通过执行安装在同一台机器上的任何程序来生成动态内容,只要该程序生成格式正确的 HTTP 响应文本。这种方法的主要优点是其普适性,因为 CGI 脚本可以用任何编程语言编写。在本食谱中,我们将演示如何用 shell 脚本语言 Bash 编写一个简单的 Hello World 脚本,但相同的原理也适用于任何其他编程语言。
CGI 协议的主要缺点是 Web 服务器必须为每个传入请求启动一个新进程。这个解决方案的扩展性较差,因此仅适用于低流量的网站。使用 CGI 的另一个缺点是该协议非常基础,传入请求的解析必须由您的脚本手动完成。
基本 CGI 已被不需要为每个传入请求启动新进程,而是将一个组件加载到内存中,随时准备处理请求的技术所取代。这些解决方案通常是语言特定的,并且可能作为 Apache 模块提供,例如 mod_perl
、mod_php
或 mod_python
。本章后续的食谱中会描述其中的一些技术。
本食谱中描述的方法仍然适用于小型任务。如果您有一个 Web 服务器并希望返回一个简单的状态页面,但又不想安装像 PHP 这样的技术所带来的开销(和潜在的安全风险),您可以使用这种基本的方法生成动态网页。
注意
从 Unix 系统的角度来看,CGI 脚本是常规程序,它们具有与 Web 服务器进程相同的权限,可以访问底层机器。如果 CGI 脚本接受用户输入,应格外小心,验证并清理传入的数据。输入处理中的错误常常会成为安全漏洞,并可能被利用。
准备工作
本食谱涉及 Apache Web 服务器的配置。有关安装和配置 Apache 的信息,请参见 第八章,运行 Apache Web 服务器。
检查 Apache 正在作为哪个用户和组运行
Apache Web 服务器作为一个特殊用户访问您的系统,通常被称为 apache
、www-data
、wwwrun
、httpd
或类似的名称。为了完成本食谱,您需要知道该 Apache 用户的用户名和组名。这可以通过 Webmin 轻松检查,步骤如下:
-
导航到 服务器 | Apache Web 服务器 | 全局配置。
-
点击 用户和组 图标。您将看到以下屏幕:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_11_01.jpg
Apache 用户名将在以 Unix 用户身份运行字段中显示,组名将在以 Unix 组身份运行字段中显示。前面截图中的这两个值都设置为www-data
。请记下系统的配置。
如何操作…
本教程将分为两部分。首先,我们将创建一个 CGI 脚本,然后配置 Apache 以显示它生成的网页。
按照以下步骤创建一个兼容 CGI 的 Shell 脚本:
-
创建一个目录来存放你的 Web 可访问 CGI 脚本,例如,在
/usr/lib/cgi-bin
中。提示
将 CGI 脚本存放在
DocumentRoot
目录中并不推荐,因为该目录通常用于提供常规 HTML 页面。不正确的服务器配置可能会暴露脚本的源代码,运行不应执行的脚本,或使目录可写,这将导致严重的安全漏洞。 -
创建一个名为
/usr/lib/cgi-bin/hello.sh
的 Shell 脚本文件。在该文件中输入以下代码:#!/bin/bash echo "Content-type: text/plain" echo "" # End of headers, start of response body echo "Hello World!" echo "The current date is:" date exit 0
-
将脚本的组所有者设置为 Apache 运行时使用的组名。如果 Apache 在你的系统上以
www-data
身份运行,你可以通过执行以下命令来完成:$ sudo chgrp www-data /usr/lib/cgi-bin/hello.sh
-
允许该文件的组具有读取和执行权限,所有者具有完全访问权限,其他用户则没有权限。你可以通过执行以下命令来完成:
$ sudo chmod 750 /usr/lib/cgi-bin/hello.sh
提示
有关操作文件、改变所有权和权限的更多信息,请参见第六章 管理系统上的文件中的管理服务器上的文件和目录。
按照以下步骤创建 Apache 配置:
-
导航到服务器 | Apache Web 服务器。
-
点击你想要配置的虚拟服务器图标,或者点击默认服务器。
-
点击CGI 程序图标。
-
通过将从值设置为
/cgi-bin/
,将到值设置为/usr/lib/cgi-bin/
来创建 CGI 目录别名:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_11_02.jpg -
点击保存按钮。
-
在创建每目录、文件或位置选项下,选择目录,并为路径
/usr/lib/cgi-bin
创建配置。 -
点击目录图标,
/usr/lib/cgi-bin
。 -
点击文档选项图标。
-
在目录选项下,选择以下选项,将执行 CGI 程序设置为是,并将其他所有选项设置为否。
-
在选项文件可以覆盖…下,选择以下选项,并保持所有复选框未选中。参考以下截图:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_11_03.jpg
-
点击保存按钮。
-
点击访问控制图标。
-
在限制访问下,选择先允许后拒绝,并只设置一条规则,如下所示:动作设置为允许,条件设置为所有请求。参考以下截图:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_11_04.jpg
-
点击保存按钮。
提示
如果呈现的数据不应公开,您可能希望限制特定客户端 IP 的访问权限。该位置也可以通过密码保护。
-
点击应用更改链接。
要查看结果,请访问网址http://your-server/cgi-bin/hello.sh
,其中your-server
是您的 Apache 服务器机器的 IP 地址或域名。
您应该能看到一个网页,显示Hello World和当前日期。通过常见网关接口(CGI)由 Apache 执行的您的 Shell 脚本动态生成了这段文本。
它是如何工作的…
当浏览器请求一个与/cgi-bin/hello.sh
路径匹配的网址时,Apache 会将其识别为指向脚本/usr/lib/cgi-bin/hello.sh
的别名。Apache 准备一个执行环境,其中包括诸如 HTTP 头部和查询字符串等请求参数作为环境变量,并在该环境中执行脚本。请求的主体通过标准输入流传递给脚本。
我们编写的脚本生成了 HTTP 响应,并将其发送回浏览器。响应由两部分组成:头部和响应体。我们只发送一个头部,告知浏览器我们的响应Content-type
是text/plain
。这告诉浏览器应该将响应显示为文本,而不是下载为文件。然后,我们发送一个空行来结束头部部分,接着发送响应体,内容是“Hello World!”和当前日期。
我们创建的 Apache 配置告知服务器,所有以/cgi-bin/
开头的路径请求应被视为/usr/lib/cgi-bin/
目录下文件的别名。我们还告知 Apache 执行该目录中的脚本,并允许所有客户端访问。这相当于创建了以下配置片段:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
所有 CGI 脚本必须是可执行的,且 Apache 用户必须有运行它们的权限才能使用它们。为此,我们将文件交给 Apache 所属的组,并为该组分配了读取和执行权限。通过这种方式分配权限允许 Apache 运行脚本,但不能修改它。如果 Apache 用户能够修改 CGI 脚本,受损的服务器可能会被用作控制服务器的手段。
还有更多…
通过 CGI 运行的程序可以输出如前所述的数据,但它们还可以读取传入的头部和提交表单的内容。CGI 协议已标准化,并在RFC3875文档中描述,您可以在tools.ietf.org/html/rfc3875
找到该文档。
显示传入请求头部
通过 CGI 协议描述的传入 HTTP 请求头部以及许多其他有用的信息都可以作为环境变量提供给脚本。为了显示它们,您可以使用printenv
命令,如以下脚本所示:
#!/bin/bash
echo "Content-type: text/plain"
echo ""
printenv
exit 0
显示传入请求主体
传入的请求体(例如,包含 HTTP POST
表单值)会通过标准输入流传递给脚本。为了显示请求体的内容,你可以在脚本中添加以下代码:
while read LINE; do
echo ${LINE} # perform operations on request body
done
另请参阅
我们还可以参考以下章节:
-
第八章 中的 在系统上安装 Apache 食谱,运行 Apache 网络服务器
-
第八章 中的 创建虚拟主机 食谱,运行 Apache 网络服务器
-
第八章 中的 为目录、文件和位置设置选项 食谱,运行 Apache 网络服务器
-
本章中的 安装 PHP 食谱
-
本章中的 使用 mod_wsgi 安装基于 Django 的应用程序 食谱
安装 PHP
PHP 目前是 Web 上最流行的编程语言之一。许多最大和最受欢迎的网站都由 PHP 编写的软件提供支持,包括 Facebook、Yahoo!、Wikipedia 和 Wordpress.com。PHP 起初是一组用于设计动态个人主页的简单工具,但它迅速流行起来,并发展成为一种现代的面向对象编程语言。围绕这门语言成长起来的开源社区创建了许多有用的库,并增加了对多平台、数据库等的支持。
PHP 功能强大且易于使用。部署 PHP 应用程序通常只需将源代码文件放置在服务器上的某个目录中。使用 PHP 编程也非常简单——其代码可以直接嵌入到标准 HTML 中。通过抽象 HTTP 协议的细节,PHP 使 Web 编程变得非常简单。例如,表单值可以直接作为数据结构传递给脚本,简单的函数可以读取和写入头信息,内建对 cookies 和用户会话的支持,等等。
PHP 的易用性实际上可能过于出色,它使得许多人能够在不了解其底层协议的情况下进行 Web 开发。如果你找到一个可以在服务器上安装的 PHP 应用程序,请确保阅读其评论,以确保它不会带来严重的安全或稳定性问题。
本食谱将演示如何安装 PHP,然后编写并部署一个简单的 Hello World 脚本。
准备工作
本食谱涉及配置 Apache 网络服务器。有关安装和配置 Apache 的信息,请参阅第八章,运行 Apache 网络服务器。
如何操作…
按照以下步骤安装 PHP 并验证其在系统上的工作状态:
-
按照 第一章,设置系统 中的 安装软件包 食谱中的说明,安装适合你系统的 PHP 包。该包可能仅被命名为
php
或php5
。 -
进入服务器 | Apache Web 服务器 | 全局配置。
-
点击配置 Apache 模块图标。
-
勾选
php5
模块旁边的复选框,然后点击启用选定模块按钮。提示
配置 Apache 模块屏幕可能在你的系统中不存在。如果你是通过包安装 PHP,那么很可能模块已经为你启用了。按照本教程的其余部分进行测试。
-
进入服务器 | Apache Web 服务器。
-
点击你希望配置的虚拟服务器的图标,或者点击默认服务器。
-
点击文档选项图标并注意服务器的文档根目录在哪里。
-
在文档根目录中创建一个名为
hello.php
的文件。 -
在
hello.php
文件中输入以下代码:<?php echo "Hello World!"; ?>
要查看结果,访问 URLhttp://your-server/hello.php
,其中your-server
是你的 Apache 服务器机器的 IP 地址或域名。你应该看到一个显示**Hello World!**的网页,这是由 PHP 生成的。
提示
如果你看到 PHP 代码而不是 Hello World!,你需要手动启用 PHP 模块。查看它是如何工作的部分,了解你需要在 Apache 配置文件中添加的指令,并阅读你包的文档获取相关指导。
它是如何工作的……
几乎所有的服务器操作系统发行版都提供从其仓库中安装 PHP 包。安装 PHP 有几种不同的方式,建议安装标准系统包,因为这样可以确保其针对你的 Apache 版本进行了优化,并且会被包维护者保持最新。
安装包不仅将 PHP 可执行文件和文档放在你的磁盘上,还会修改 Apache Web 服务器的配置。引入的更改包括以下内容:
-
一行代码,当 Apache 启动时加载 PHP 解释器模块,如下所示:
LoadModule php5_module /path/to/libphp5.so
-
指示 Apache 将 PHP 文件传递给解释器的行,如下所示:
SetHandler application/x-httpd-php
或
AddHandler php5-script .php
-
使用
index.php
文件作为目录索引的指令:DirectoryIndex index.html index.php
另见
我们还可以参考以下章节。
-
第八章中的在系统上安装 Apache教程,运行 Apache Web 服务器
-
第八章中的创建虚拟主机教程,运行 Apache Web 服务器
-
第八章中的为目录、文件和位置设置选项教程,运行 Apache Web 服务器
-
本章中的更改 PHP 配置设置教程
-
本章中的查看 PHP 错误日志教程
更改 PHP 配置设置
PHP 解释器允许你指定众多设置的值,这些设置决定了 PHP 应用程序在系统上的行为。这些配置影响错误的记录或显示方式、输入数据的处理方式、分配给解释器的资源以及与 PHP 捆绑的扩展模块的设置。
PHP 的配置文件通常被称为php.ini
,其位置取决于你的操作系统发行版和 PHP 版本。php.ini
文件的常见位置包括:/etc/
、/etc/php5/apache2/
和/usr/local/etc/
。php.ini
文件包含主设置值,但一些设置可能会被 PHP 脚本或 Apache 配置在目录级别覆盖。
在本教程中,我们将演示如何检查当前使用的配置设置的值以及如何修改它们。
准备就绪
假设你已经安装了 Apache 和 PHP,请准备一个通过 Web 服务器公开并准备好提供 PHP 脚本的目录。我们将在本教程中将该目录称为DocumentRoot
目录。
如何操作…
本部分将检查当前定义的设置,然后我们将继续修改这些设置。
按照以下步骤检查当前的 PHP 设置:
-
在你的 Web 服务器的
DocumentRoot
目录中创建一个名为phpinfo.php
的文件。 -
在
phpinfo.php
文件中输入以下代码:<?php phpinfo(); ?>
-
转到
phpinfo.php
文件的 URL:http://your-server/phpinfo.php
。 -
记下加载的配置文件的位置。
注意
这告诉我们主 PHP 配置文件(
php.ini
)的位置。 -
记下
memory_limit
值。注意
请注意,有两列。它们指定了该设置的本地值和主值。主值在
php.ini
中指定,但本地值是当前使用的。如果本地值被覆盖,它可能与主值不同。请参见本教程的更多内容部分。
按照以下步骤更改主 PHP 设置:
-
查找全局 PHP 配置文件(
php.ini
)的位置,方法如前所述。 -
转到其他 | PHP 配置。
-
点击与全局 PHP 配置文件对应的行中的管理。
-
点击资源限制。
-
将最大内存分配更改为
260M
:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_11_08.jpg -
点击保存。
-
转到服务器 | Apache Webserver。
-
点击应用更改链接。
-
再次转到 URL,
http://your-server/phpinfo.php
。
检查memory_limit
值。其主值现在应该已更改为260M
。
提示
将phpinfo.php
文件保留在服务器上不是一个好主意,因为它不必要地向公众暴露关于你系统的信息。使用完后请删除该文件。
其工作原理…
Apache 每次启动时都会加载全局 PHP 配置(php.ini
)文件。在此示例中,我们通过 Webmin 修改了该文件,特别是更改了决定 PHP 解释器可以使用多少内存的那一行,修改为以下内容:
memory_limit = 260M
修改文件后,我们进入 Webmin 界面,通过重启 Apache 来应用配置更改。
还有更多…
PHP 设置可以在脚本和 Apache 的每目录配置文件中本地设置。
使用 .htaccess 文件修改目录的 PHP 设置
为了通过 .htaccess
文件修改 PHP 设置,我们必须指示 Apache 允许对包含我们 PHP 脚本的目录进行本地选项覆盖。查看第八章中的设置目录、文件和位置的选项示例,了解更多信息。执行以下步骤:
-
导航到服务器 | Apache Web 服务器。
-
点击您希望配置的虚拟服务器的图标或默认服务器。
-
点击或创建包含您 PHP 脚本的目录的设置。
-
点击文档选项。
-
在选项文件可以覆盖部分,勾选选中的选项并选择目录选项。
提示
这相当于在 Apache 配置中为该目录添加以下行:
AllowOverride Options
-
点击保存按钮。
-
点击应用更改链接。
-
在相同目录下创建一个名为
.htaccess
的文件。 -
在
.htaccess
文件中放置以下指令,将内存限制本地更改为 32MB:php_value memory_limit 32M
注意
php_value
指令用于配置接受参数值的设置。布尔参数仅接受开或关的值,使用php_flag
指令进行设置。有关更多信息,请参见 PHP 在线手册:php.net/manual/configuration.changes.php
。
使用 phpinfo()
函数验证本地设置的更改,如前所述。
在脚本代码中动态修改 PHP 设置
按照此示例准备一个phpinfo.php
文件,并在其中添加以下代码:
<?php
ini_set('memory_limit', '64M');
phpinfo();
?>
导航到 phpinfo.php
文件的 URL,验证本地设置的更改。
另请参见
- 查看第八章中的设置目录、文件和位置的选项示例,了解更多关于在本地更改 Apache 设置的信息,运行 Apache Web 服务器。
显示 PHP 错误以进行调试
在编写 PHP 代码或安装下载的应用程序时,你可能会发现自己盯着一块空白的浏览器屏幕,完全没有任何提示为什么它没有按照预期工作。这是由于 PHP 的默认配置,它隐藏了错误信息以防泄露敏感数据。错误信息可能暴露服务器的相关信息,因此在生产环境中这样做是一个好主意,但这也会增加解决问题的难度。在开发过程中,你可以通过以下步骤启用 PHP 的友好错误信息。
如何操作…
按照以下步骤执行此食谱:
-
让我们从编写一个会导致错误的 PHP 脚本开始。该脚本可能包含以下破损的代码:
<?php echo "Hello World!"; syntax!error ?>
-
将脚本保存到服务器上的一个文件中,并导航到该文件在你的 Web 服务器上的公共 URL。如果关闭了错误显示,你应该会看到一块空白屏幕。
-
导航到其他 | PHP 配置。
-
点击管理,对应于全局 PHP 配置文件的那一行。
-
点击错误日志。
-
将显示错误信息?设置为是。
-
点击保存。
-
导航到服务器 | Apache Web 服务器。
-
点击应用更改链接。
更改设置后,再次导航到你出现问题的脚本的 URL。你现在应该能看到类似这样的错误信息:
解析错误:语法错误,/var/www/index.php 第 3 行出现意外的 ‘!’
它是如何工作的…
PHP 的display_errors
设置决定了解释器是否在屏幕上显示错误信息,或者隐藏这些信息。
在这个食谱中,我们通过启用display_errors
配置标志来全局启用 PHP 的错误报告。为此,我们将php.ini
中的display_errors
行更改为以下内容,并重启了 Apache:
display_errors = Off
你也可以通过在.htaccess
文件中添加以下行来为指定的目录本地设置该标志。确保 Apache 允许该目录中的本地覆盖:
php_flag display_errors on
不要使用ini_set
函数来开启错误显示,因为某些错误会阻止脚本被解析,导致该设置无法生效。
参见
-
本章中的更改 PHP 配置设置食谱
-
本章中的PHP 中的日志记录食谱
PHP 中的日志记录
使用 PHP 编写的应用程序在发生错误时会生成日志消息。这些消息可以根据解释器的配置设置保存到日志文件、传递给 syslog,或者被忽略。忽略错误消息是一个不好的做法,因为它会阻止你发现服务器上发生的问题。
另一方面,将每条消息保存到文件中可能会导致日志增长非常迅速,尤其是在高流量网站上。幸运的是,PHP 允许你非常精确地配置哪些错误会被记录。所有 PHP 错误都有一个级别值;最严重的错误标记为E_ERROR
,较轻的错误标记为E_WARNING
,再轻的标记为E_NOTICE
,依此类推。完整的错误级别列表可以在 PHP 手册中的php.net/errorfunc.constants.php
找到。
建议在开发过程中记录所有错误,但在生产环境中,应该记录所有错误,除了E_DEPRECATED
(弃用警告)和E_STRICT
(代码风格建议)。我们将在本食谱中设置这种日志记录级别。
准备工作
为了完成此食谱,我们需要知道 Apache 正在以哪个用户和组运行。你可以在本章的生成动态页面使用 CGI食谱中的准备工作部分找到获取此信息的说明。
如何操作…
按照以下步骤指示 PHP 记录错误消息:
-
创建一个空文件,用于存储你的 PHP 错误日志,存储位置可以自定义,例如,
/var/log/php_errors.log
。 -
将文件的所有者更改为 Apache 用户。如果你的 Web 服务器以
www-data
用户运行,你可以通过执行以下命令来完成:$ sudo chown www-data /var/log/php_errors.log
注意
关于操作文件和更改所有权与权限的信息,可以在第六章中的管理服务器上的文件和目录食谱中找到,管理系统中的文件。
-
确保所有者(Apache)对文件具有写入权限:
$ sudo chmod u+w /var/log/php_errors.log
-
导航到其他 | PHP 配置。
-
点击与全局 PHP 配置文件对应行的管理。
-
点击错误日志。
-
将显示错误消息?设置为是。
-
将是否写入错误消息到日志?设置为是。
-
将错误类型表达式设置为
E_ALL & ~E_DEPRECATED & ~E_STRICT
。 -
将错误日志文件设置为其他文件,并在文本框中输入
/var/log/php_errors.log
,如以下截图所示:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_11_09.jpg -
点击保存。
-
导航到服务器 | Apache Web 服务器。
-
点击应用更改链接。
从现在开始,你应该能在 PHP 的日志文件中看到错误消息。
如何运作…
为了启用 PHP 错误日志记录,我们在php.ini
文件中设置了以下主值:
log_errors = On
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_log = /var/log/php_errors.log
上述设置启用了 PHP 的错误日志记录(log_errors
),并指定了错误应保存到哪个文件(error_log
)。
error_reporting
指令指定了哪些消息会被保存,哪些会被忽略。该行接受复杂的语法,其中与符号(&
)允许您指定不同级别的消息进行记录,波浪符(~
)则用于取消某一类消息的记录。这使我们能够记录所有级别的错误(E_ALL
),但不记录弃用警告(& ~E_DEPRECATED
)或样式建议(& ~E_STRICT
)。
请参考本章中的更改 PHP 配置设置配方,了解更多有关更改 PHP 配置的方法。
还有更多…
PHP 还可以将错误消息输出到系统日志(syslog)。如果您希望使用 syslog,请将error_log
行更改如下:
error_log = syslog
PHP 错误会输出到名为user
的 syslog 设施中,不幸的是,目前无法通过 PHP 配置来更改这一点。
注意
现代的 syslog 实现(如 rsyslog,syslog-ng)可以基于生成日志的命令过滤消息。
请参考第五章中的将 syslog 消息保存到文件配方,监控您的系统,了解更多关于 syslog 的信息。
另见
有关使用系统日志的更多信息,请查看以下配方:
-
第五章中的查看和搜索系统日志文件配方,监控您的系统
-
第五章中的添加其他日志文件到 Webmin配方,监控您的系统
-
第五章中的配置日志文件轮换配方,监控您的系统
在您的服务器上安装 WordPress
WordPress 是一个非常受欢迎的开源博客平台。该软件非常易于使用,且足够灵活,能够满足各种用途,比如运行信息性网站或简单的电子商务商店。WordPress 完全用 PHP 编写,这使得它的安装非常简便。
这个配方整合了前面各章节的内容。我们将展示如何使用本书中提供的配方来设置一个工作中的 Web 服务器,托管一个由 WordPress 博客平台支持的网站。
注意
许多操作系统发行版的包存储库中都提供了 WordPress 的软件包。如果您不打算自定义站点或托管多个不同版本的软件,您可以选择安装该软件包。请注意,WordPress 的更新频率可能比您操作系统包存储库中的软件包更高,这可能会导致您使用不安全的版本。如果您选择此路线,请查看包中的文档以获取更多信息。
如何操作…
本食谱分为多个部分。我们首先通过安装所需的软件包来准备服务器。如果你已在服务器上安装了这些软件,可以跳过这些步骤。然后,我们将为我们的 WordPress 安装创建一个 MySQL 数据库和用户。最后,我们将创建一个 Apache 虚拟主机并安装 WordPress。
请按照以下步骤准备服务器:
-
按照第八章中的在系统上安装 Apache食谱安装 Apache Web 服务器,运行 Apache Web 服务器。
-
按照第九章中的安装 MySQL 数据库服务器食谱安装 MySQL 数据库服务器,运行 MySQL 数据库服务器。
-
按照本章中的安装 PHP食谱安装 PHP。
提示
为了让 PHP 应用程序能够与 MySQL 通信,你需要安装一个额外的 PHP 模块,这个模块在大多数操作系统发行版中以包的形式提供。你可以通过查看
phpinfo()
函数的输出,检查此模块是否已安装,正如本章中更改 PHP 配置设置食谱所描述的那样。如果你找到名为mysql的信息部分,那么php-mysql
模块已安装。 -
安装名为
php-mysql
、php5-mysql
或类似名称的系统包。注意
有关安装软件包的更多信息,请参见第一章中的安装软件包食谱,设置系统。
-
安装
php-gd
模块,使 PHP 应用程序能够处理常见格式(如 PNG 和 JPEG)的图形图像。安装名为php-gd
、php5-gd
或类似名称的系统包。 -
确保 Apache 的重写模块(
mod_rewrite
)已安装并启用。有关更多信息,请查看第八章中的启用 Apache 模块食谱,运行 Apache Web 服务器。
创建数据库
我们将创建一个名为wordpress
的数据库和用户。你可能应该使用一个更具信息性的名称,特别是如果你计划使用多个 WordPress 实例的话。请按照以下步骤创建数据库:
-
创建一个新的 MySQL 数据库和用户,二者均命名为
wordpress
。该用户应使用强密码,并允许从本地机器(localhost
)连接。 -
授予从
localhost
连接的wordpress
用户对wordpress
数据库的所有权限。注意
关于创建 MySQL 数据库和授予权限的信息,请参见第九章中的创建新数据库和创建用户并授予数据库权限食谱,运行 MySQL 数据库服务器。
提示
如果你正在运行带有安全增强 Linux(SELinux)的系统,你需要通过设置以下标志来允许 Apache 连接到数据库:
$ sudo setsebool -P httpd_can_network_connect_db 1
创建虚拟主机并安装 WordPress
为了创建虚拟主机并安装 WordPress,请执行以下步骤:
-
请参考第八章中的创建虚拟主机示例,运行 Apache Web 服务器,以便从文档根目录
/var/www/blog.example.com
提供文件,并设置服务器名称为blog.example.com
。 -
从以下网址下载最新版本的 WordPress,并将归档文件解压到
/var/www/blog.example.com
目录:wordpress.org/latest.tar.gz
注意
当提取完成后,WordPress 的
index.php
文件应位于以下路径:/var/www/blog.example.com/index.php
。 -
在相同的目录中创建一个
.htaccess
文件,并输入以下重写规则,以启用 WordPress 的干净 URL:<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
提示
Apache 的虚拟主机或目录配置必须允许
.htaccess
文件覆盖选项(AllowOverride All
)。有关更多信息,请查看第八章中的为特定目录、文件和位置设置选项示例,运行 Apache Web 服务器。 -
导航到新 WordPress 网站的 URL:
http://blog.example.com/
。 -
会出现一个设置屏幕。按照屏幕上的指示输入已创建的数据库名称、用户名和密码,如下图所示:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_11_05.jpg
-
WordPress 安装会生成一个配置文件的内容,您应将其保存为
/var/www/blog.example.com/wp-config.php
。
现在,您可以导航到 WordPress 网站的 URL,按照屏幕上的说明完成设置并开始使用网站。
它是如何工作的……
WordPress 使用了本书中介绍的技术。为了为该应用程序设置我们的服务器,我们需要安装 Apache、MySQL 和 PHP。我们还需要安装一些额外的 PHP 模块,以便 WordPress 与数据库通信并操作图像文件。
每个 WordPress 实例都需要访问数据库。表前缀会添加到每个数据库表的名称中,这样可以让多个 WordPress 实例共享一个数据库。我们将前缀保留为默认值wp_
。由于我们在运行自己的服务器,我们可以根据需要创建任意数量的数据库;因此,实际上不需要共享数据库。实际上,我们还为这个应用程序创建了一个专用的数据库用户,仅允许访问一个数据库。
我们创建的虚拟主机配置允许我们在一个子域(blog.example.com
)上运行 WordPress,从而可以自由地在主域或其他子域上运行其他软件。
我们创建的 .htaccess
文件旨在允许 WordPress 使用干净的 URL。借助这个功能,页面的 URL 可能是 http://blog.example.com/hello-world/
,而不是 http://blog.example.com/?p=1
。
注意
有关干净 URL(在 WordPress 中称为永久链接)的更多信息,请参阅其文档:codex.wordpress.org/Using_Permalinks
我们通过允许 WordPress 为我们创建其主要配置文件(wp-config.php
)的内容来完成安装。我们需要将数据库连接详细信息输入到一个表单中,WordPress 会自行准备配置文件。除了存储数据库连接详情外,安装程序还生成了伪随机的加密盐字符串,这有助于保持 WordPress 的安全。盐字符串也会存储在配置文件中,应该保持机密并偶尔更换。
提示
为了确保 WordPress 配置文件的安全,请确保其权限设置正确。该文件必须对 Apache 可读,但对其他人不可读。请查看本章的生成动态页面使用 CGI食谱中的准备工作部分,了解 Apache 用户的名称,并参考第六章中的管理文件和目录食谱,获取有关设置权限的信息。
同时,确保任何该文件的备份副本都存储在安全的地方。
另见
- 有关安装 WordPress 过程的更多信息,请参见其手册:
codex.wordpress.org/Installing_WordPress
在你的服务器上安装 Drupal
Drupal 是一个强大的开源内容管理系统(CMS)。它高度模块化,意味着通过安装额外的插件,可以将其定制为执行几乎任何任务。Drupal 完全用 PHP 编写,这使得它非常容易安装。
本食谱汇集了前面各章的内容。我们将展示如何使用本书中提供的食谱设置一个工作中的 Web 服务器,托管一个由 Drupal CMS 平台驱动的网站。
提示
许多操作系统发行版的包管理库中都提供了 Drupal 的安装包。如果你不打算托管多个不同版本的软件,你可以选择安装这个包。但请注意,Drupal 可能会比操作系统库中的包更新得更频繁,这可能会导致使用不安全的软件版本。如果你选择这种方式,请查阅包中的文档以获取更多信息。
准备工作
要完成本食谱,我们需要了解 Apache 运行的用户和组。你可以在本章的生成动态页面使用 CGI食谱中的准备工作部分找到获取此信息的说明。
如何操作…
本配方分为多个部分。我们首先通过安装所需的软件包来准备服务器。如果你已经在服务器上安装了所述软件,可以跳过这些步骤。接下来,我们将为 Drupal 安装创建一个 MySQL 数据库和用户。最后,我们将创建一个 Apache 虚拟主机并安装 Drupal。
按照以下步骤准备服务器:
-
按照第八章中的 在你的系统上安装 Apache 配方安装 Apache Web 服务器,运行 Apache Web 服务器。
-
通过遵循第九章中的 安装 MySQL 数据库服务器 配方,安装 MySQL 数据库服务器,运行 MySQL 数据库服务器。
-
通过遵循本章中的 安装 PHP 配方安装 PHP。
-
为了让 PHP 应用程序能够与 MySQL 通信,你需要安装一个额外的 PHP 模块,这个模块在大多数操作系统的发行版中都有提供。安装名为
php-mysql
、php5-mysql
或类似名称的系统包。注意
有关安装软件包的更多信息,请参见第一章中的 安装软件包 配方,设置你的系统。
-
安装
php-gd
模块,允许 PHP 应用程序操作 PNG、JPEG 等常见格式的图形图像。安装名为php-gd
、php5-gd
或类似名称的系统包。 -
确保 Apache 的重写模块(
mod_rewrite
)已安装并启用。更多信息请参见第八章中的 启用 Apache 模块 配方,运行 Apache Web 服务器。
创建数据库
我们将创建一个名为 drupal
的数据库和用户。你可能需要使用更具描述性的名称,特别是如果你计划使用多个 Drupal 实例时。请按以下步骤操作:
-
创建一个新的 MySQL 数据库和用户,命名为
drupal
。用户应使用强密码,并允许从本地机器(localhost
)连接。 -
授予
drupal
用户从localhost
连接的所有权限,权限作用于drupal
数据库。注意
创建 MySQL 数据库并授予权限的详细信息可以在第九章中的 创建新数据库 和 创建用户并授予数据库权限 配方中找到,运行 MySQL 数据库服务器。
提示
如果你正在使用增强型 Linux 安全(SELinux)的系统,你需要通过设置以下标志来允许 Apache 连接到数据库:
$ sudo setsebool -P httpd_can_network_connect_db 1
创建虚拟主机并安装 WordPress
按照以下步骤创建虚拟主机并安装 Drupal:
-
按照第八章中创建虚拟主机的食谱,创建一个从文档根目录
/var/www/cms.example.com
提供文件的网站,并设置服务器名称为cms.example.com
。 -
从以下 URL 查找并下载最新版本的 WordPress,并将压缩包提取到
/var/www/cms.example.com
目录:drupal.org/download
。注意
当解压完成后,Drupal 的
index.php
文件应该具有以下路径:/var/www/cms.example.com/index.php
。提示
Drupal 捆绑了一个
.htaccess
文件。请确保该文件已正确提取到/var/www/cms.example.com/.htaccess
。Apache 的虚拟主机或目录配置必须允许
.htaccess
文件覆盖选项(AllowOverride All
)。有关更多信息,请参考第八章中为特定目录、文件和位置设置选项的食谱。 -
创建一个目录(
sites/default/files
),Drupal 将在其中存储上传的文件和临时文件。该目录是相对于 Drupal 根目录的,因此在我们这种情况下,它的完整路径是/var/www/cms.example.com/sites/default/files
。 -
将
sites/default/files
目录的所有者更改为 Apache 用户,并确保该所有者对该目录具有读写权限。提示
关于操作文件和更改所有权及权限的信息可以在第六章的在服务器上管理文件和目录一节中找到,在你的系统上管理文件。
-
通过复制默认设置文件
sites/default/default.settings.php
,在sites/default/settings.php
中创建 Drupal 的配置文件。 -
临时允许所有用户写入
settings.php
文件,通过将其权限更改为666
。 -
访问你新 Drupal 站点的 URL:
http://cms.example.com/
。 -
一个设置屏幕将会出现。请按照屏幕上的指示,输入已创建的数据库、用户名和密码。
-
当安装程序完成修改你的设置文件时,它将通知你现在应该更改权限,移除对
settings.php
文件的写入访问权限:https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_11_06.jpg
现在,你可以导航到你的 Drupal 站点的 URL,按照屏幕上的指示完成设置并开始使用该站点。
它是如何工作的…
Drupal 使用了本书中描述的技术。为了为应用程序设置我们的服务器,我们需要安装 Apache、MySQL 和 PHP。我们还需要安装一些额外的 PHP 模块,以便 Drupal 与数据库通信并操作图像文件。
在初步服务器设置完成后,我们创建了一个虚拟主机,使我们能够在子域(cms.example.com
)上运行 Drupal 网站,从而可以在主域或其他子域上运行其他软件。
在一切准备就绪后,我们将 Drupal 文件复制到域目录,创建了 Drupal 安装所需的文件和文件夹,然后让 Drupal 的安装程序引导我们完成剩下的步骤。Drupal 填充了它的设置文件,包含了连接数据库所需的信息,并初始化了网站。安装完成后,重要的一步是从设置文件中删除写权限。
另见
- 有关安装 Drupal 过程的更多信息,请参阅其手册,网址为
drupal.org/documentation/install
使用 mod_wsgi 安装基于 Django 的应用程序
Django 是一个多功能的 web 开发框架,使用 Python 编程语言编写。该框架支持快速开发,并鼓励良好的编码实践。使用 Django 编写的应用程序可以通过 mod_wsgi
模块托管在 Apache 上。
本教程将演示如何设置服务器来托管 Django 应用程序。其他支持 mod_wsgi
的 Python 应用程序也可以通过类似方式进行设置。这包括 MoinMoin、PyBlosxom、Trac 等应用程序,以及 CherryPy、Pylons、TurboGears、Pyramid、web.py、Werkzeug、Web2Py 和 Zope 等框架。
如何操作…
按照 第八章,运行 Apache Web 服务器 章节中的 在您的系统上安装 Apache 教程,安装 Apache Web 服务器。
-
使用系统包安装 Python 版本 2.7。该包的名称可能是
python
、python2.7
、python-2.7
或类似的名称。提示
从 1.5 版本开始,Django 支持 Python 3,安装过程与较新版本相同。您只需要将 Python 2.7 替换为 Python 3,并将
pip
和mod_wsgi
的软件包替换为 Python 3 版本。 -
从系统包安装
pip
——Python 包管理器。该包的名称可能是python-pip
或类似的名称。提示
在某些系统中,您可能需要添加额外的仓库才能安装软件包。例如,如果您使用的是 RedHat 家族的 Linux 发行版(如 RHEL、CentOS、Fedora 等),您应该添加 企业 Linux 的额外软件包(EPEL)仓库。关于设置 EPEL 的信息可以在 通过 FTP 给用户访问您的服务器 章节中的 第六章,管理您系统上的文件 章节中找到。
-
从系统包安装
mod_wsgi
,这是一个使 Apache 能够托管 Python 应用程序的模块。该包的名称可能是mod_wsgi
、apache2-mod_wsgi
、libapache2-mod-wsgi
或类似的名称。 -
按照第八章中的启用 Apache 模块食谱,运行 Apache Web 服务器,启用
mod_wsgi
模块(wsgi
)。 -
使用
pip
安装 Django,运行以下命令:$ sudo pip install django
提示
你可以修改上述命令来安装特定版本的 Django。例如,要安装 Django 1.6.2,可以使用以下命令:
$ sudo pip install django==1.6.2
-
在
/srv/webapps/
中创建一个 Web 应用目录。 -
通过运行以下命令为你的应用创建项目结构。这将在
/srv/webapps/hello
中创建一个目录来存储你的应用。执行以下命令:$ cd /srv/webapps/ && django-admin.py startproject hello
提示
你可以将 Django 应用上传到另一个目录,而不是在
hello
中启动新项目。记下应用路径,并在后续步骤中将其替换为/srv/webapps/hello
。 -
为你的应用程序创建静态文件和媒体文件的目录,例如,
/srv/webapps/hello/static/
和/srv/webapps/hello/media/
。 -
在 Webmin 中,导航到服务器 | Apache Web 服务器,然后点击创建虚拟主机。你无需指定文档根目录,只需将服务器名称设置为
hello.example.com
。提示
更多关于设置虚拟服务器的信息,可以在第八章中的创建虚拟主机食谱中找到,运行 Apache Web 服务器。此食谱还解释了如何在
/etc/hosts
中设置模拟 DNS 记录,如果你没有其他方式将子域指向服务器。 -
点击新创建的虚拟服务器的图标。
-
点击编辑指令图标。
-
在文本区域输入以下配置指令并点击保存:
ServerName hello.example.com WSGIDaemonProcess hello python-path=/srv/webapps/hello/ processes=3 threads=1 WSGIProcessGroup hello WSGIScriptAlias / /srv/webapps/hello/hello/wsgi.py Alias /favicon.ico /srv/webapps/hello/static/favicon.ico Alias /static/ /srv/webapps/hello/static/ Alias /media/ /srv/webapps/hello/media/
请参考以下截图:
https://github.com/OpenDocCN/freelearn-linux-pt5-zh/raw/master/docs/webmin-adm-cb/img/5849_11_07.jpg
-
点击应用更改链接。
现在,当你访问hello.example.com
时,应该能看到由 Apache 提供的 Django 欢迎界面。
提示
如果你使用的是 SELinux,可能会遇到问题,因为/srv/webapps
位置对 Apache 不可访问。可以临时禁用 SELinux,看看是否能解决问题,然后参考以下文档页面,了解如何解决此问题:
code.google.com/p/modwsgi/wiki/ApplicationIssues#Secure_Variants_Of_UNIX
它是如何工作的……
Web 服务器网关接口(WSGI)是一个低级接口,连接 Web 服务器和用 Python 编写的 Web 应用或框架。Apache 通过一个名为mod_wsgi
的模块能够提供此类应用服务。
我们创建的配置指示 Apache 创建多个守护进程(processes=3
),这些进程驻留在内存中,随时准备处理来自 Web 服务器的 HTTP 请求。每个进程中启动的进程数和线程数决定了分配给应用程序的系统资源量,进而决定了它可以同时处理多少个请求。这些参数应根据你的具体需求进行调整。
python-path
参数告诉 Python 它可以在哪里找到额外的应用程序模块。我们的应用程序位于 /srv/webapps/hello/
,这是 Python 在查找模块时不会自动搜索的标准位置;因此,我们需要明确指定它的位置。
WSGIScriptAlias
指令指示 Apache 将所有访问域名根 URL (/
) 的请求交给 Django 处理。Alias
指令则告诉 Apache,像 /static/
这样的请求应该直接从磁盘提供。你可以结合使用 Alias
和 WSGIScriptAlias
指令,来指定由应用程序提供服务的域名部分,以及由 Apache 直接提供的部分。
另见
-
有关通过 mod_wsgi 提供 Django 服务的更多信息,可以在其手册中找到:
docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/
。 -
更详细的信息可以在
mod_wsgi
文档中找到:code.google.com/p/modwsgi/wiki/InstallationInstructions
。