欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~php
随着您的应用程序或网站的增加,您可能已经超出了当前的服务器设置。若是您在同一台计算机上托管Web服务器和数据库后端,最好将这两个功能分开,以便每一个功能能够在本身的硬件上运行,并分担响应访问者请求的负载。mysql
在本教程中,咱们将讨论如何配置Web应用程序能够链接的远程MySQL数据库服务器。咱们将使用WordPress做为示例,以便咱们可使用,但该技术普遍适用于任何MySQL支持的应用程序。web
在开始本教程以前,您将须要:sql
在咱们触顶单机配置的性能上限时,将数据存储在单独的服务器上能够从容地解决这个问题。它还提供了负载平衡所需的基本结构,并在之后更多地扩展咱们的基础设施。数据库
首先,咱们将在未安装LEMP堆栈的服务器上安装MySQL。登陆到此服务器,而后更新包缓存并安装MySQL服务器软件:编程
$ sudo apt-get update $ sudo apt-get install mysql-server
在安装过程当中,系统会要求您设置并确认MySQL的root密码。选择一个强密码并记下它,由于咱们稍后会须要它。ubuntu
MySQL应该当即安装并运行。让咱们使用systemctl
来检查:后端
$ systemctl status mysql
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2017-05-23 14:54:04 UTC; 12s ago Main PID: 27179 (mysqld) CGroup: /system.slice/mysql.service └─27179 /usr/sbin/mysqld
(running)
行意味着MySQL已安装并正在运行。如今咱们将使安装更加安全。MySQL附带一个脚本,可引导您锁定系统:api
$ mysql_secure_installation
这将询问您刚刚设置的MySQLroot密码。输入并按ENTER。如今咱们将回答一系列是或否提示。让咱们来看看:
首先,咱们被问及验证密码插件,这是一个能够自动为MySQL用户强制执行某些密码强度规则的插件。启用此功能是您须要根据我的安全需求作出的决定。输入y
并按ENTER
启用它,或只是点击ENTER
跳过它。若是启用,系统还会提示您从0-2中选择一个级别,以肯定密码验证的严格程度。选择一个数字并点击ENTER
继续。
接下来,系统会询问您是否要更改root密码。因为咱们在安装MySQL时刚刚建立了密码,所以咱们能够安全地跳过这个。点击ENTER
继续,不更新密码。
其他提示能够回答是。系统将询问您是否删除匿名MySQL用户,禁止远程root登陆,删除测试数据库以及从新加载权限表以确保先前的更改正常生效。这些都是个好主意。输入y并按ENTER。
在回答完全部提示后,脚本将退出。如今咱们的MySQL安装是合理安全的。在下一步中,咱们将配置MySQL以容许从远程链接进行访问。
如今您已启动并运行数据库,咱们须要更改一些配置值以容许来自其余计算机的链接。
在编辑器中以root权限打开mysqld
配置文件:
$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
此文件分为括号(和)中的单词表示的部分。找到标记为mysqld的部分:
mysqld.cnf
. . . [mysqld]
在此部分中,您须要找到一个名为bind-address
的参数。这告诉数据库软件监听链接的网络地址。
目前,MySQL配置为仅查找本地链接。咱们须要更改它以引用能够访问服务器的外部IP地址。
若是两台服务器都位于具备专用网络功能的数据中心,请使用服务器的专用网络IP。不然,您可使用公共IP地址:
/etc/mysql/my.cnf
[mysqld] . . . bind-address = db_server_ip
因为咱们将经过互联网链接到数据库,所以咱们将要求加密链接以确保咱们的数据安全。若是您不加密MySQL链接,网络上的任何人均可能在您的Web和数据库服务器之间嗅探敏感信息。在刚刚更新的bind-address
行以后添加如下行:
/etc/mysql/my.cnf
. . . require_secure_transport = on
完成后保存并关闭文件。
要使SSL链接起做用,咱们须要建立一些密钥和证书。MySQL附带一个命令,能够自动设置咱们须要的全部内容:
$ sudo mysql_ssl_rsa_setup --uid=mysql
这将建立必要的文件并使它们可由MySQL服务器(--uid=mysql
)读取。
要强制MySQL更新其配置并读入新的SSL信息,请从新启动数据库:
$ sudo systemctl restart mysql
要确认服务器正在侦听外部接口,请用netstat
检查:
$ sudo netstat -plunt | grep mysqld
tcp 0 0 db_server_ip:3306 0.0.0.0:* LISTEN 27328/mysqld
netstat
打印有关咱们服务器网络系统的统计信息。此输出向咱们显示名为mysqld
的进程在端口3306
(标准MySQL端口)上附加到db_server_ip
。
如今打开防火墙上的端口以容许流量经过:
$ sudo ufw allow mysql
接下来,咱们将设置远程访问服务器所需的用户和数据库。
即便MySQL自己正在侦听外部IP地址,但目前尚未配置启用远程的用户或数据库。让咱们为WordPress和能够访问它的用户建立一个数据库。
首先使用MySQL root账户链接到MySQL :
$ mysql -u root -p
系统将要求您提供MySQL root密码,而后您将收到新的mysql>提示。
如今咱们能够建立WordPress将使用的数据库。咱们将调用此wordpress,以便咱们之后能够轻松识别它:
mysql> CREATE DATABASE wordpress;
注意:全部SQL语句必须以分号(;)结尾。若是在MySQL命令中按Enter键而且只看到带有
->
提示符的新行,则可能忘记了分号。只需在新行上键入它,而后再次按ENTER继续。
如今咱们有了一个数据库,咱们须要建立咱们的用户。建立用户的一个方面是咱们须要根据用户链接的位置定义两个不一样的配置文件。咱们将建立一个仅限本地的用户,以及与咱们的Web服务器的IP地址绑定的远程用户。
首先,咱们建立本地用户wordpressuser并使该账户仅经过在声明中使用localhost来匹配本地链接尝试:
mysql> CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password';
让咱们继续并授予此账户对咱们数据库的彻底访问权限:
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'localhost';
此用户如今能够对WordPress的数据库执行任何操做,但此账户不能远程使用,由于它只匹配来自本地计算机的链接。
如今建立一个配对账户,该账户将匹配来自咱们的Web服务器的链接。为此,您须要Web服务器的IP地址。咱们能够将此账户命名为任何内容,但为了得到更一致的体验,咱们将使用与上面彻底相同的用户名,仅修改主机部分。
请记住,您必须使用与您在mysqld.cnf
文件中配置的网络相同的IP地址。这意味着若是您使用专用网络IP,则须要建立如下规则以使用Web服务器的专用IP。若是您将MySQL配置为使用公共网路,则应将其与Web服务器的公共IP地址进行匹配。
mysql> CREATE USER 'wordpressuser'@'web-server_ip' IDENTIFIED BY 'password';
如今咱们有了远程账户,咱们能够为它提供与本地用户相同的权限:
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'web_server_ip';
刷新权限以将其写入磁盘并开始使用它们:
mysql> FLUSH PRIVILEGES;
而后输入如下命令退出MySQL提示符:
mysql> exit
如今咱们已经设置了一个新的数据库和启用远程的用户,让咱们测试数据库和链接。
在继续以前,最好验证您是否可使用wordpressuser账户从本地计算机和Web服务器链接到数据库。
首先,尝试使用咱们的新账户登陆,从数据库计算机测试本地链接:
mysql -u wordpressuser -p
在提示时输入您为此账户设置的密码。
若是给出MySQL提示,则本地链接成功。您能够输入如下命令再次退出:
mysql> exit
登陆Web服务器以测试远程链接。
在Web服务器上,您须要为MySQL安装一些客户端工具才能访问远程数据库。更新本地包缓存,而后安装客户端实用程序:
$ sudo apt-get update $ sudo apt-get install mysql-client
如今,咱们可使用如下语法链接到咱们的数据库服务器:
$ mysql -u wordpressuser -h db_server_ip -p
一样,您必须确保使用正确的数据库服务器IP地址。若是您将MySQL配置为在专用网络上侦听,请输入数据库的专用网络IP,不然请输入数据库服务器的公共IP地址。
系统会要求您输入wordpressuser账户的密码,若是一切顺利,您将收到MySQL提示。咱们可使用如下命令验证链接是否正在使用SSL:
mysql> status
-------------- mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper Connection id: 52 Current database: Current user: wordpressuser@203.0.113.111 SSL: Cipher in use is DHE-RSA-AES256-SHA Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu) Protocol version: 10 Connection: 203.0.113.111 via TCP/IP Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 3 hours 43 min 40 sec Threads: 1 Questions: 1858 Slow queries: 0 Opens: 276 Flush tables: 1 Open tables: 184 Queries per second avg: 0.138 --------------
SSL:
行将指示是否正在使用SSL密码。您如今能够继续退出提示,由于您已经确承认以远程链接:
mysql> exit
对于其余检查,您能够尝试从第三台服务器执行相同的操做,以确保未授予其余服务器访问权限。您已验证本地访问和从Web服务器访问,但您还没有验证其余链接将被拒绝。
继续在未配置特定用户账户的服务器上尝试相同的过程。您可能必须像上面那样安装客户端实用程序:
$ mysql -u wordpressuser -h db_server_ip -p
这应该不会成功完成。它应该抛出一个看起来像这样的错误:
ERROR 1130 (HY000): Host '203.0.113.12' is not allowed to connect to this MySQL server
这就是咱们所指望的和咱们想要的。
咱们已经成功测试了咱们的远程链接,如今能够继续咱们的WordPress安装了。
为了演示咱们新的具备远程功能的MySQL服务器的功能,咱们将在咱们的Web服务器上安装和配置WordPress(流行的博客平台)。这将要求咱们下载并解压缩软件,配置咱们的链接信息,而后运行WordPress的基于Web的安装。
在您的Web服务器上,将最新版本的WordPress下载到您的主目录:
$ cd ~ $ curl -O https://wordpress.org/latest.tar.gz
解压缩文件,这将在您的主目录中建立一个名为wordpress的目录:
$ tar xzvf latest.tar.gz
WordPress包含一个示例配置文件,咱们将其用做起点。咱们制做了这个文件的副本,从文件名中删除-sample
,以便WordPress加载它:
$ cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php
当咱们打开文件时,咱们的第一个业务订单是调整一些密钥觉得咱们的安装提供安全性。WordPress为这些值提供了一个安全的生成器,所以您没必要尝试本身提供好的值。这些仅在内部使用,所以在这里使用复杂,安全的值不会影响可用性。
要从WordPress密钥生成器中获取安全值,请输入:
$ curl -s https://api.wordpress.org/secret-key/1.1/salt/
这将打印出一些咱们能够复制并粘贴到咱们的wp-config.php文件中的配置。
警告! 每次请求惟一值很是重要。不要复制下面显示的值!
define('AUTH_KEY', '1jl/vqfs<XhdXoAPz9 DO NOT COPY THESE VALUES c_j{iwqD^<+c9.k<J@4H'); define('SECURE_AUTH_KEY', 'E2N-h2]Dcvp+aS/p7X DO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3'); define('LOGGED_IN_KEY', 'W(50,{W^,OPB%PB<JF DO NOT COPY THESE VALUES 2;y&,2m%3]R6DUth[;88'); define('NONCE_KEY', 'll,4UC)7ua+8<!4VM+ DO NOT COPY THESE VALUES #`DXF+[$atzM7 o^-C7g'); define('AUTH_SALT', 'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES 07VC*Lj*lD&?3w!BT#-'); define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h{!_xY'); define('LOGGED_IN_SALT', 'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES t6**bRVFSD[Hi])-qS`|'); define('NONCE_SALT', 'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');
将收到的输出复制到剪贴板,而后在文本编辑器中打开配置文件:
$ nano ~/wordpress/wp-config.php
找到包含这些设置的虚拟值的部分。它看起来像这样:
wp-config.php
. . . define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); define('AUTH_SALT', 'put your unique phrase here'); define('SECURE_AUTH_SALT', 'put your unique phrase here'); define('LOGGED_IN_SALT', 'put your unique phrase here'); define('NONCE_SALT', 'put your unique phrase here'); . . .
删除这些行并粘贴从命令行复制的值。
接下来,咱们须要输入远程数据库的链接信息。这些配置行位于文件的顶部,就在咱们粘贴在键的上方。请记住使用先前在远程数据库测试中使用的相同IP地址:
wp-config.php
. . . /** The name of the database for WordPress */ define('DB_NAME', 'wordpress'); /** MySQL database username */ define('DB_USER', 'wordpressuser'); /** MySQL database password */ define('DB_PASSWORD', 'password'); /** MySQL hostname */ define('DB_HOST', 'db_server_ip'); . . .
最后,在文件中的任何位置粘贴如下行,告诉WordPress使用与MySQL数据库的SSL链接:
wp-config.php
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
保存并关闭文件。
接下来,咱们须要将~/wordpress
目录中的文件和目录复制到Nginx的文档根目录。
咱们使用-a
标志来确保维护咱们的权限:
$ sudo cp -a ~/wordpress/* /var/www/html
如今咱们全部的文件都已到位。剩下要作的就是修改文件全部权。咱们将设置文档根目录中的全部文件,由咱们的Web服务器用户www-data拥有:
$ sudo chown -R www-data:www-data /var/www/html
如今应该安装WordPress并准备好运行其基于Web的安装例程。咱们将在下一步中作到这一点。
WordPress有一个基于Web的安装程序,它会询问几个问题并在咱们的数据库中安装它所需的表。咱们如今开始吧。
导航到与您的Web服务器关联的域名(或公共IP地址):
http://example.com
您将看到WordPress安装程序的语言选择屏幕。选择适当的语言,而后单击进入主安装界面:
主安装界面
提交信息后,您须要使用刚刚建立的账户登陆WordPress管理界面。而后,您将进入仪表板,您能够在其中自定义和操做您的站点。
在本教程中,咱们设置了一个MySQL数据库,以接受来自远程Wordpress安装的受SSL保护的链接。咱们使用的命令和技术适用于以任何编程语言编写的任何Web应用程序,但具体的实现细节将有所不一样。有关更多信息,请参阅您的应用程序或语言的数据库文档。更多MySQL的教程欢迎访问腾讯云+社区学习更多知识。
参考文献:《How To Set Up a Remote Database to Optimize Site Performance with MySQL on Ubuntu 16.04》
问答
相关阅读
此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/developer/article/1180951?fromSource=waitui
搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!
海量技术实践经验,尽在云加社区!