如何利用 MySQL 设置远程数据库以优化网站性能

打印 上一主题 下一主题

主题 917|帖子 917|积分 2751

前些天发现了一个巨牛的人工智能学习网站,普通易懂,风趣幽默,不由得分享一下给各人。点击跳转到网站。
先容

随着您的应用步伐或网站的增长,您大概会发现已经超出了当前的设置。如果您现在将 Web 服务器和数据库后端托管在同一台 VPS 上,一个好主意是将这两个功能分开,以便每个功能可以在自己的机器上运行和增长。
在本指南中,我们将讨论如何配置一个远程数据库服务器,以便您的 Web 服务器可以连接到动态内容。我们将以 WordPress 作为示例,如许我们就有了一些可以操作的内容。我们将在我们的演示中利用 Ubuntu 12.04 VPS 实例,配置 Nginx 在我们的 Web 服务器上,然后将其连接到远程机器上的 MySQL 数据库。
在数据库服务器上安装 MySQL

首先,我们将配置一个 VPS 实例作为 MySQL 服务器。将我们的数据存储在一个单独的盘算机上是一个很好的方式,当您在单机配置上达到极限时,可以优雅地扩展。它还提供了在以后更多地扩展和负载均衡您的设置所需的基本结构。
首先,我们需要在我们的数据库服务器上安装一些基本软件包。这些基本上是为传统的 LEMP 堆栈设置数据库所需的大部分雷同的步调,但我们不需要所有的组件(一些将在其他服务器上)。
首先更新软件包缓存并安装 MySQL 服务器:
  1. sudo apt-get update
  2. sudo apt-get install mysql-server
复制代码
在安装过程中,您将被要求选择并确认 MySQL 的 root 暗码。
安装完成后,您需要运行数据库安装命令,这将天生适当的目录结构来管理您的组件:
  1. sudo mysql_install_db
复制代码
之后,我们应该通过运行一个脚本来加强一些安全性,该脚本将扣问我们是否禁用一些不安全的默认设置:
  1. sudo mysql_secure_installation
复制代码
您将需要输入您在上述步调中设置的 MySQL 管理员暗码。之后,它会扣问您是否要更改该暗码。如果您对当前的暗码感到满意,请输入“N”体现不更改。
对于所有其他问题,您应该只需按 ENTER 键选择默认选项,这将删除一些测试数据库并锁定访问权限。
配置 MySQL 允许远程访问

现在您的数据库已经运行起来了,我们需要更改一些值以允许其他盘算机连接。
利用 root 权限在编辑器中打开 MySQL 的主配置文件:
  1. sudo nano /etc/mysql/my.cnf
复制代码
该文件被分成由方括号([ 和 ])中的单词体现的部分。找到标志为 mysqld 的部分:
  1. [mysqld]
复制代码
在这个部分(在这个标志和下一个部分标志之间的区域内),您需要找到一个名为 bind-address 的参数。这基本上告诉数据库软件要监听哪个网络地点上的连接。
当前,MySQL 配置为仅探求来自自己盘算机的连接。我们需要更改它以引用您的服务器可以访问的 外部 IP 地点。
如果您在具有私有网络功能的数据中心托管此服务,请利用您服务器的私有网络 IP。否则,您可以在此处利用公共 IP 地点:
  1. bind-address        = your_database_IP
复制代码
完成后保存并关闭文件。
为了逼迫 MySQL 读取我们刚刚实施的新更改,我们可以重新启动数据库:
  1. sudo service mysql restart
复制代码
设置远程 WordPress 凭据和数据库

现在我们已经配置了 MySQL 监听外部地点,我们需要创建一个数据库并创建一个远程用户。尽管 MySQL 自己现在正在监听其他机器可以连接的 IP 地点,但现在还没有任何数据库可以访问。
这也是一个机会,让我们根据用户连接的位置创建不同的权限。我们可以创建两个“用户”,现实上可以是雷同的用户名,但与不同的主机相关联。
我所说的是,我们可以创建一个用户,该用户绑定到数据库服务器自己,并授予它非常广泛的权限。然后我们可以利用雷同的用户名,但与我们的 Web 服务器相关联,而且只给予它 WordPress 需要的最低权限。
这将允许我们在登录到我们的数据库服务器时进行重要工作,同时只为我们的 Web 服务器提供其完成工作所需的最低权限。这是一个良好的安全策略,可以在 Web 服务器受到损害的情况下部分保护数据库服务器。
首先利用您配置的 root 帐户和管理暗码连接到 MySQL:
  1. mysql -u root -p
复制代码
您将被要求输入您的 MySQL root 暗码,然后将获得一个 MySQL 提示符。
让我们开始创建 WordPress 将利用的数据库。我们将简单地称之为 wordpress,以便以后可以轻松辨认它:
  1. CREATE DATABASE wordpress;
复制代码
现在我们有了一个数据库,我们需要创建我们的当地用户,如果需要进行更多的数据库操作。我们将称此用户为 wordpressuser,而且通过在声明中利用 localhost 仅匹配从数据库服务器自己发起的连接:
  1. CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password';
复制代码
让我们授予这个帐户对我们的数据库的完全访问权限:
  1. GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'localhost';
复制代码
现在,这个用户可以在 WordPress 的数据库上执行任何操作,但此帐户不能远程利用,因为它只匹配来自本地皮算机的连接。
让我们创建一个陪同帐户,它将仅匹配来自我们的 Web 服务器的连接。为此,您将需要您的 Web 服务器的 IP 地点。我们可以为此帐户命名任何名称,但为了更划一的体验,我们将利用与上面完全雷同的用户名,只是修改了主机部分。
请记住,您必须利用与您在 my.cnf 文件中配置的雷同网络的 IP 地点。这意味着如果您利用私有网络 IP,您将希望创建以下规则以利用您的 Web 服务器的私有 IP。如果您配置 MySQL 利用公共互联网,您应该利用 Web 服务器的公共 IP 地点。
  1. CREATE USER 'wordpressuser'@'web_server_IP' IDENTIFIED BY 'password';
复制代码
现在我们有了远程帐户,我们可以为其提供 WordPress 在正常情况下操作所需的可用权限子集。这些是 select、delete、insert 和 update。
虽然这是终极目的,但现实上我们现在无法实施这一点。这是因为在某些操作期间,您将不得不暂时调整权限以允许更多的访问。其中之一现实上是初始安装。最简单的方法是在现在授予所有权限,然后在安装完成后我们将限定它们。
供参考,我们将利用的命令来锁定帐户(不要担心,当您需要时我们将再次提供给您这个命令)是:
  1. GRANT SELECT,DELETE,INSERT,UPDATE ON wordpress.* TO 'wordpressuser'@'web_server_ip';
复制代码
但现在,我们将暂时授予所有权限,这使其在现在现实上与当地帐户雷同:
  1. GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'web_server_ip';
复制代码
完成后,革新权限以将它们写入磁盘并开始利用它们:
  1. FLUSH PRIVILEGES;
复制代码
现在,您可以通过键入以下命令退出 MySQL 提示符:
  1. exit
复制代码
测试远程和当地连接

在继承之前,最好验证一下你是否可以利用 wordpressuser 账户从当地机器和 Web 服务器连接到数据库。
首先,通过尝试利用我们的新账户从数据库服务器登录来测试数据库机器上的连接:
  1. mysql -u wordpressuser -p
复制代码
在提示时输入设置的暗码。
如果你看到了 MySQL 提示符,那么当地连接就成功了。你可以通过输入以下命令退出:
  1. exit
复制代码
登录到你的 Web 服务器上测试远程连接。
在你的 Web 服务器上,你需要安装一些 MySQL 客户端工具以便访问远程数据库。更新当地软件包缓存,然后安装客户端工具:
  1. sudo apt-get update
  2. sudo apt-get install mysql-client
复制代码
现在,我们可以利用以下语法连接到我们的数据库服务器:
  1. mysql -u wordpressuser -h database_server_IP -p
复制代码
再次确保你利用的是数据库服务器的正确 IP 地点。如果你配置了 MySQL 监听私有网络,请输入数据库的私有网络 IP,否则输入数据库服务器的公共 IP 地点。
你应该被要求输入 wordpressuser 账户的暗码,如果统统顺遂,你应该看到一个 MySQL 提示符。
如果这一步成功,那么你可以退出提示符,因为你已经验证了你可以远程连接。
作为额外的检查,你可以尝试从第三台服务器上做同样的事情,以确保其他服务器没有被授予访问权限。你已经验证了当地访问和来自 Web 服务器的访问,但你还没有验证其他连接会被拒绝。
尝试在你没有为其配置特定用户账户的服务器上执行同样的步调。你大概需要像上面那样安装客户端工具:
  1. mysql -u wordpressuser -h database_server_IP -p
复制代码
这应该不会成功。它应该返回一个类似于以下的错误:
  1. ERROR 1130 (HY000): Host '11.111.111.111' is not allowed to connect to this MySQL server
复制代码
这是我们期望的结果,也是我们想要的。
设置 Web 服务器

现在我们已经验证了我们的 Web 服务器可以访问 WordPress 数据库,我们需要通过配置 Nginx、PHP 和须要的组件来将其真正酿成一个 Web 服务器。
由于你在上面运行了测试之前更新了软件包索引,我们不需要再次执行这个步调。让我们安装我们需要的所有软件包:
  1. sudo apt-get install nginx php5-fpm php5-mysql
复制代码
当所有软件安装完成后,你可以开始配置软件。
配置 PHP

让我们从 PHP 开始,因为这很简单。
打开 php-fpm 的 PHP 配置文件,它将处置惩罚我们的动态内容。我们只需要修改这个文件中的一个值:
  1. sudo nano /etc/php5/fpm/php.ini
复制代码
搜索 cgi.fix_pathinfo 参数。它大概会被注释掉,并设置为 “1”。我们需要取消注释并将其设置为 “0”:
  1. cgi.fix_pathinfo=0
复制代码
这是一个安全措施。通过设置这个选项,我们告诉 PHP 如果找不到精确匹配的文件,不要尝试猜测用户试图访问的文件。如果我们不设置这个,恶意用户可以利用这个机会让我们的服务器执行我们不希望执行的代码。
完成后保存并关闭文件。
接下来,我们需要打开另一个文件来修改我们的 PHP 处置惩罚器和 Web 服务器之间的通信方式:
  1. sudo nano /etc/php5/fpm/pool.d/www.conf
复制代码
查找 listen 指令,它应该设置为 127.0.0.1:9000。我们将利用一个 Unix 域套接字而不是端口:
  1. listen = /var/run/php5-fpm.sock
复制代码
完成后保存并关闭文件。
现在我们有了我们的值,重新启动我们的 PHP 处置惩罚器:
  1. sudo service php5-fpm restart
复制代码
配置 Nginx

现在我们预备配置 Nginx。我们可以通过将默认虚拟主机文件复制到一个新文件来开始工作。我们将根据我们网站的域名命名这个文件。我将利用占位符 “example.com”:
  1. sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com
复制代码
现在,打开刚刚复制的文件:
  1. sudo nano /etc/nginx/sites-available/example.com
复制代码
在文件中,我们将修改我们的服务器块(包含在 server 大括号内的部分)。首先取消注释监听端口 80 的指令。我们还将更改根目录,并默认利用 Nginx 提供 PHP 索引文件:
  1. server {
  2.     listen 80;
  3.     root /var/www/example.com;
  4.     index index.php index.hmtl index.htm;
复制代码
接下来,我们将修改 server_name 指令以利用我们的域名,确保我们的 try_files 被正确设置(如果找不到文件,则将请求传递给 PHP),而且我们的错误页面被配置:
  1. server {
  2.     listen 80;
  3.     root /var/www/example.com;
  4.     index index.php index.hmtl index.htm;
  5.     server_name example.com;    location / {        try_files $uri $uri/ /index.php?q=$uri&$args;    }    error_page 404 /404.html;    error_page 500 502 503 504 /50x.html;    location = /50x.html {        root /usr/share/nginx/www;    }
复制代码
最后,我们需要通过利用一个位置块来设置现实的 PHP 处置惩罚,该位置块将匹配我们所有的 PHP 请求。如果找不到精确匹配,我们将立即返回 404。我们还将利用我们为 PHP 配置的套接字:
  1. server {
  2.     listen 80;
  3.     root /var/www/example.com;
  4.     index index.php index.hmtl index.htm;
  5.     server_name example.com;    location / {        try_files $uri $uri/ /index.php?q=$uri&$args;    }    error_page 404 /404.html;    error_page 500 502 503 504 /50x.html;    location = /50x.html {        root /usr/share/nginx/www;    }    location ~ \.php$ {        try_files $uri =404;        fastcgi_pass unix:/var/run/php5-fpm.sock;        fastcgi_index index.php;        include fastcgi_params;    }}
复制代码
这是我们服务器块配置的结尾。保存并关闭文件。
现在,我们将这个文件链接到我们的 “enabled” 目录,并删除默认服务器块文件的链接:
  1. sudo rm /etc/nginx/sites-enabled/default
  2. sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
复制代码
重新启动 Nginx 以使这些更改见效:
  1. sudo service nginx restart
复制代码
安装 WordPress

现在我们已经设置好了带有 PHP 处置惩罚的 Web 服务器,而且有了数据库服务器,我们需要安装一个应用步伐来利用这一点并连接到我们的数据库。正如你现在所知,我们将在本教程中利用 WordPress 来演示这个功能。
首先,将最新的 WordPress 压缩包下载到你的主目录:
  1. cd ~
  2. wget http://wordpress.org/latest.tar.gz
复制代码
解压文件,这将在你的主目录中创建一个名为 “wordpress” 的目录:
  1. tar xzvf latest.tar.gz
复制代码
WordPress 包含一个示例配置文件,但默认情况下不会被利用。我们将重命名此文件,以便它能够被正确读取,然后我们可以在文本编辑器中打开它进行修改:
  1. cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php
  2. nano ~/wordpress/wp-config.php
复制代码
在其中,我们需要输入我们远程数据库的正确值。记得利用你在之前远程数据库测试中利用的雷同 IP 地点。
  1. /** WordPress 数据库的名称 */
  2. define('DB_NAME', 'wordpress');
  3. /** MySQL 数据库用户名 */
  4. define('DB_USER', 'wordpressuser');
  5. /** MySQL 数据库密码 */
  6. define('DB_PASSWORD', 'password');
  7. /** MySQL 主机名 */
  8. define('DB_HOST', 'database_server_ip');
复制代码
完成后关闭文件。现实上,这是整个配置中唯一明确将我们的 Web 服务器和数据库服务器连接起来的部分。
接下来,我们需要创建我们在 Nginx 服务器块配置中设置的目录结构。如果你还记得,我在演示中利用的是 “example.com”,但你应该利用你在 Nginx 配置中指定的任何内容:
  1. sudo mkdir -p /var/www/example.com
复制代码
然后,我们将复制在我们的 ~/wordpress 目录中找到的文件和目录到我们刚刚创建的新文档根目录:
  1. sudo cp -r ~/wordpress/* /var/www/example.com
复制代码
现在所有的文件都已经就位。唯一剩下的事情就是轻微修改我们的权限和文件所有权。我们应该首先进入服务器的文档根目录:
  1. cd /var/www/example.com
复制代码
我们将把这个目录中的所有文件交给我们的 Web 服务器用户,即 www-data:
  1. sudo chown -R www-data:www-data *
复制代码
然而,我们仍然希望能够以我们的普通非 root 用户身份编辑这些文件,因此我们可以将我们的通例非 root 帐户添加到 Web 服务器组。然后,我们可以给该组权限在这个目录中修改文件:
  1. sudo usermod -a -G www-data your_user
  2. sudo chmod -R g+rw /var/www/example.com
复制代码
通过 Web 界面设置网站

现在,你只需要通过 Web 界面完成安装。
访问与你的 Web 服务器关联的域名(或公共 IP 地点):
  1. http://example.com
复制代码
你应该看到 WordPress 安装屏幕,在这里你需要填写相关信息:
!WordPress 管理设置
完成配置后,你需要利用刚刚创建的帐户登录到应用步伐中:
!WordPress 管理登录
你将被带到管理仪表板,从这里你可以开始配置你的网站:
!WordPress 管理仪表板
限定远程数据库权限

当你完成配置 WordPress 后,你应该返回并打消一些远程数据库用户的权限。
大多数数据库权限在日常操作中都是不需要的,只有在更新或插件安装时才需要启用。记住这一点,以防在执行这些步调后进行管理操作时出现错误。
某些插件大概还需要额外的权限。观察每个插件以查看它需要什么,并考虑选择需要最少额外访问权限的插件。
登录到你的数据库服务器。然后,利用 MySQL root 帐户登录到 MySQL:
  1. mysql -u root -p
复制代码
输入暗码以获得访问权限。
你可以通过输入以下命令查看远程用户的当前权限:
  1. show grants for 'wordpressuser'@'web_server_IP';
复制代码
  1. +---------------------------------------------------------------------------------------------------------------------------+
  2. | Grants for wordpressuser@xx.xxx.xxx.xxx                                                                                   |
  3. +---------------------------------------------------------------------------------------------------------------------------+
  4. | GRANT USAGE ON *.* TO 'wordpressuser'@'xx.xxx.xxx.xxx' IDENTIFIED BY PASSWORD '*5FD2B7524254B7F81B32873B1EA6D681503A5CA9' |
  5. | GRANT ALL PRIVILEGES ON `wordpress`.* TO 'wordpressuser'@'xx.xxx.xxx.xxx'                                                 |
  6. +---------------------------------------------------------------------------------------------------------------------------+
  7. 2 rows in set (0.00 sec)
复制代码
“usage” 权限现实上意味着没有真正的权限,因此我们不必担心。第二个权限行是我们最初设置的,允许在 wordpress 数据库上拥有所有权限。
应用比当前权限更严格的新权限的过程现实上是两个步调。
首先,我们需要打消所有当前权限。通过输入以下命令来执行此操作:
  1. REVOKE ALL PRIVILEGES on wordpress.* FROM 'wordpressuser'@'web_server_IP';
复制代码
如果现在我们再次请求当前授权,我们将看到第二行已经消失:
  1. show grants for 'wordpressuser'@'web_server_IP';
复制代码
  1. +---------------------------------------------------------------------------------------------------------------------------+
  2. | Grants for wordpressuser@10.128.213.175                                                                                   |
  3. +---------------------------------------------------------------------------------------------------------------------------+
  4. | GRANT USAGE ON *.* TO 'wordpressuser'@'xx.xxx.xxx.xxx' IDENTIFIED BY PASSWORD '*5FD2B7524254B7F81B32873B1EA6D681503A5CA9' |
  5. +---------------------------------------------------------------------------------------------------------------------------+
  6. 1 row in set (0.00 sec)
复制代码
现在,我们可以将我们希望重新添加到帐户的权限。我们需要 UPDATE、INSERT、SELECT 和 DELETE 权限以进行日常利用:
  1. GRANT SELECT,DELETE,INSERT,UPDATE ON wordpress.* TO 'wordpressuser'@'web_server_ip';
复制代码
如果我们再次检查,我们可以看到我们的细粒度权限现在已经设置好了。
为了告诉 MySQL 重新读取权限表以实施我们的更改,我们可以输入:
  1. FLUSH PRIVILEGES;
复制代码
之后,再次退出 MySQL:
  1. exit
复制代码
结论

如果你一直在跟着做,现在你应该已经对如何让远程数据库与你的应用步伐通信有了很好的理解。虽然我们讨论了一些特定于 WordPress 的步调,但一样平常的思路,特殊是与 MySQL 配置和用户权限相关的部分,在大多数远程 MySQL 情况下都是实用的。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表