使用MySQL設置遠程數(shù)據(jù)庫以優(yōu)化網(wǎng)站性能的操作步驟
介紹
隨著您的應用程序或網(wǎng)站的增長,您可能會發(fā)現(xiàn)已經(jīng)超出了當前的設置。如果您目前將 Web 服務器和數(shù)據(jù)庫后端托管在同一臺 VPS 上,一個好主意是將這兩個功能分開,以便每個功能可以在自己的機器上運行和增長。
在本指南中,我們將討論如何配置一個遠程數(shù)據(jù)庫服務器,以便您的 Web 服務器可以連接到動態(tài)內容。我們將以 WordPress 作為示例,這樣我們就有了一些可以操作的內容。我們將在我們的演示中使用 Ubuntu 12.04 VPS 實例,配置 Nginx 在我們的 Web 服務器上,然后將其連接到遠程機器上的 MySQL 數(shù)據(jù)庫。
在數(shù)據(jù)庫服務器上安裝 MySQL
首先,我們將配置一個 VPS 實例作為 MySQL 服務器。將我們的數(shù)據(jù)存儲在一個單獨的計算機上是一個很好的方式,當您在單機配置上達到極限時,可以優(yōu)雅地擴展。它還提供了在以后更多地擴展和負載平衡您的設置所需的基本結構。
首先,我們需要在我們的數(shù)據(jù)庫服務器上安裝一些基本軟件包。這些基本上是為傳統(tǒng)的 LEMP 堆棧設置數(shù)據(jù)庫所需的大部分相同的步驟,但我們不需要所有的組件(一些將在其他服務器上)。
首先更新軟件包緩存并安裝 MySQL 服務器:
sudo apt-get update sudo apt-get install mysql-server
在安裝過程中,您將被要求選擇并確認 MySQL 的 root 密碼。
安裝完成后,您需要運行數(shù)據(jù)庫安裝命令,這將生成適當?shù)哪夸浗Y構來管理您的組件:
sudo mysql_install_db
之后,我們應該通過運行一個腳本來加強一些安全性,該腳本將詢問我們是否禁用一些不安全的默認設置
sudo mysql_secure_installation
您將需要輸入您在上述步驟中設置的 MySQL 管理員密碼。之后,它會詢問您是否要更改該密碼。如果您對當前的密碼感到滿意,請輸入“N”表示不更改。
對于所有其他問題,您應該只需按 ENTER 鍵選擇默認選項,這將刪除一些測試數(shù)據(jù)庫并鎖定訪問權限。
配置 MySQL 允許遠程訪問
現(xiàn)在您的數(shù)據(jù)庫已經(jīng)運行起來了,我們需要更改一些值以允許其他計算機連接。
使用 root 權限在編輯器中打開 MySQL 的主配置文件:
sudo nano /etc/mysql/my.cnf
該文件被分成由方括號([ 和 ])中的單詞表示的部分。找到標記為 mysqld
的部分:
[mysqld]
在這個部分(在這個標記和下一個部分標記之間的區(qū)域內),您需要找到一個名為 bind-address 的參數(shù)。這基本上告訴數(shù)據(jù)庫軟件要監(jiān)聽哪個網(wǎng)絡地址上的連接。
當前,MySQL 配置為僅尋找來自自己計算機的連接。我們需要更改它以引用您的服務器可以訪問的 外部 IP 地址。
如果您在具有私有網(wǎng)絡功能的數(shù)據(jù)中心托管此服務,請使用您服務器的私有網(wǎng)絡 IP。否則,您可以在此處使用公共 IP 地址:
bind-address = your_database_IP
完成后保存并關閉文件。
為了強制 MySQL 讀取我們剛剛實施的新更改,我們可以重新啟動數(shù)據(jù)庫:
sudo service mysql restart
設置遠程 WordPress 憑據(jù)和數(shù)據(jù)庫
現(xiàn)在我們已經(jīng)配置了 MySQL 監(jiān)聽外部地址,我們需要創(chuàng)建一個數(shù)據(jù)庫并建立一個遠程用戶。盡管 MySQL 本身現(xiàn)在正在監(jiān)聽其他機器可以連接的 IP 地址,但目前還沒有任何數(shù)據(jù)庫可以訪問。
這也是一個機會,讓我們根據(jù)用戶連接的位置建立不同的權限。我們可以創(chuàng)建兩個“用戶”,實際上可以是相同的用戶名,但與不同的主機相關聯(lián)。
我所說的是,我們可以創(chuàng)建一個用戶,該用戶綁定到數(shù)據(jù)庫服務器本身,并授予它非常廣泛的權限。然后我們可以使用相同的用戶名,但與我們的 Web 服務器相關聯(lián),并且只給予它 WordPress 需要的最低權限。
這將允許我們在登錄到我們的數(shù)據(jù)庫服務器時進行重要工作,同時只為我們的 Web 服務器提供其完成工作所需的最低權限。這是一個良好的安全策略,可以在 Web 服務器受到損害的情況下部分保護數(shù)據(jù)庫服務器。
首先使用您配置的 root 帳戶和管理密碼連接到 MySQL:
mysql -u root -p
您將被要求輸入您的 MySQL root 密碼,然后將獲得一個 MySQL 提示符。
讓我們開始創(chuàng)建 WordPress 將使用的數(shù)據(jù)庫。我們將簡單地稱之為 wordpress
,以便以后可以輕松識別它:
CREATE DATABASE wordpress;
現(xiàn)在我們有了一個數(shù)據(jù)庫,我們需要創(chuàng)建我們的本地用戶,如果需要進行更多的數(shù)據(jù)庫操作。我們將稱此用戶為 wordpressuser
,并且通過在聲明中使用 localhost
僅匹配從數(shù)據(jù)庫服務器本身發(fā)起的連接:
CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password';
讓我們授予這個帳戶對我們的數(shù)據(jù)庫的完全訪問權限:
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'localhost';
現(xiàn)在,這個用戶可以在 WordPress 的數(shù)據(jù)庫上執(zhí)行任何操作,但此帳戶不能遠程使用,因為它只匹配來自本地計算機的連接。
讓我們創(chuàng)建一個伴隨帳戶,它將僅匹配來自我們的 Web 服務器的連接。為此,您將需要您的 Web 服務器的 IP 地址。我們可以為此帳戶命名任何名稱,但為了更一致的體驗,我們將使用與上面完全相同的用戶名,只是修改了主機部分。
請記住,您必須使用與您在 my.cnf 文件中配置的相同網(wǎng)絡的 IP 地址。這意味著如果您使用私有網(wǎng)絡 IP,您將希望創(chuàng)建以下規(guī)則以使用您的 Web 服務器的私有 IP。如果您配置 MySQL 使用公共互聯(lián)網(wǎng),您應該使用 Web 服務器的公共 IP 地址。
CREATE USER 'wordpressuser'@'web_server_IP' IDENTIFIED BY 'password';
現(xiàn)在我們有了遠程帳戶,我們可以為其提供 WordPress 在正常情況下操作所需的可用權限子集。這些是 select、delete、insert 和 update。
雖然這是最終目標,但實際上我們目前無法實施這一點。這是因為在某些操作期間,您將不得不暫時調整權限以允許更多的訪問。其中之一實際上是初始安裝。最簡單的方法是在目前授予所有權限,然后在安裝完成后我們將限制它們。
供參考,我們將使用的命令來鎖定帳戶(不要擔心,當您需要時我們將再次提供給您這個命令)是:
GRANT SELECT,DELETE,INSERT,UPDATE ON wordpress.* TO 'wordpressuser'@'web_server_ip';
但現(xiàn)在,我們將暫時授予所有權限,這使其在目前實際上與本地帳戶相同:
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'web_server_ip';
完成后,刷新權限以將它們寫入磁盤并開始使用它們:
FLUSH PRIVILEGES;
現(xiàn)在,您可以通過鍵入以下命令退出 MySQL 提示符:
exit
測試遠程和本地連接
在繼續(xù)之前,最好驗證一下你是否可以使用 wordpressuser
賬戶從本地機器和 Web 服務器連接到數(shù)據(jù)庫。
首先,通過嘗試使用我們的新賬戶從數(shù)據(jù)庫服務器登錄來測試數(shù)據(jù)庫機器上的連接:
mysql -u wordpressuser -p
在提示時輸入設置的密碼。
如果你看到了 MySQL 提示符,那么本地連接就成功了。你可以通過輸入以下命令退出:
exit
登錄到你的 Web 服務器上測試遠程連接。
在你的 Web 服務器上,你需要安裝一些 MySQL 客戶端工具以便訪問遠程數(shù)據(jù)庫。更新本地軟件包緩存,然后安裝客戶端工具:
sudo apt-get update sudo apt-get install mysql-client
現(xiàn)在,我們可以使用以下語法連接到我們的數(shù)據(jù)庫服務器:
mysql -u wordpressuser -h database_server_IP -p
再次確保你使用的是數(shù)據(jù)庫服務器的正確 IP 地址。如果你配置了 MySQL 監(jiān)聽私有網(wǎng)絡,請輸入數(shù)據(jù)庫的私有網(wǎng)絡 IP,否則輸入數(shù)據(jù)庫服務器的公共 IP 地址。
你應該被要求輸入 wordpressuser 賬戶的密碼,如果一切順利,你應該看到一個 MySQL 提示符。
如果這一步成功,那么你可以退出提示符,因為你已經(jīng)驗證了你可以遠程連接。
作為額外的檢查,你可以嘗試從第三臺服務器上做同樣的事情,以確保其他服務器沒有被授予訪問權限。你已經(jīng)驗證了本地訪問和來自 Web 服務器的訪問,但你還沒有驗證其他連接會被拒絕。
嘗試在你沒有為其配置特定用戶賬戶的服務器上執(zhí)行同樣的步驟。你可能需要像上面那樣安裝客戶端工具:
mysql -u wordpressuser -h database_server_IP -p
這應該不會成功。它應該返回一個類似于以下的錯誤:
ERROR 1130 (HY000): Host '11.111.111.111' is not allowed to connect to this MySQL server
這是我們期望的結果,也是我們想要的。
設置 Web 服務器
現(xiàn)在我們已經(jīng)驗證了我們的 Web 服務器可以訪問 WordPress 數(shù)據(jù)庫,我們需要通過配置 Nginx、PHP 和必要的組件來將其真正變成一個 Web 服務器。
由于你在上面運行了測試之前更新了軟件包索引,我們不需要再次執(zhí)行這個步驟。讓我們安裝我們需要的所有軟件包:
sudo apt-get install nginx php5-fpm php5-mysql
當所有軟件安裝完成后,你可以開始配置軟件。
配置 PHP
讓我們從 PHP 開始,因為這很簡單。
打開 php-fpm
的 PHP 配置文件,它將處理我們的動態(tài)內容。我們只需要修改這個文件中的一個值:
sudo nano /etc/php5/fpm/php.ini
搜索 cgi.fix_pathinfo
參數(shù)。它可能會被注釋掉,并設置為 “1”。我們需要取消注釋并將其設置為 “0”:
cgi.fix_pathinfo=0
這是一個安全措施。通過設置這個選項,我們告訴 PHP 如果找不到精確匹配的文件,不要嘗試猜測用戶試圖訪問的文件。如果我們不設置這個,惡意用戶可以利用這個機會讓我們的服務器執(zhí)行我們不希望執(zhí)行的代碼。
完成后保存并關閉文件。
接下來,我們需要打開另一個文件來修改我們的 PHP 處理器和 Web 服務器之間的通信方式:
sudo nano /etc/php5/fpm/pool.d/www.conf
查找 listen
指令,它應該設置為 127.0.0.1:9000
。我們將使用一個 Unix 域套接字而不是端口:
listen = /var/run/php5-fpm.sock
完成后保存并關閉文件。
現(xiàn)在我們有了我們的值,重新啟動我們的 PHP 處理器:
sudo service php5-fpm restart
配置 Nginx
現(xiàn)在我們準備配置 Nginx。我們可以通過將默認虛擬主機文件復制到一個新文件來開始工作。我們將根據(jù)我們網(wǎng)站的域名命名這個文件。我將使用占位符 “example.com”:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com
在文件中,我們將修改我們的服務器塊(包含在 server
大括號內的部分)。首先取消注釋監(jiān)聽端口 80 的指令。我們還將更改根目錄,并默認使用 Nginx 提供 PHP 索引文件:
server { listen 80; root /var/www/example.com; index index.php index.hmtl index.htm;
接下來,我們將修改 server_name
指令以使用我們的域名,確保我們的 try_files
被正確設置(如果找不到文件,則將請求傳遞給 PHP),并且我們的錯誤頁面被配置:
server { listen 80; root /var/www/example.com; index index.php index.hmtl index.htm; 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。我們還將使用我們?yōu)?PHP 配置的套接字:
server { listen 80; root /var/www/example.com; index index.php index.hmtl index.htm; 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; } }
這是我們服務器塊配置的結尾。保存并關閉文件。
現(xiàn)在,我們將這個文件鏈接到我們的 “enabled” 目錄,并刪除默認服務器塊文件的鏈接:
sudo rm /etc/nginx/sites-enabled/default sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
安裝 WordPress
現(xiàn)在我們已經(jīng)設置好了帶有 PHP 處理的 Web 服務器,并且有了數(shù)據(jù)庫服務器,我們需要安裝一個應用程序來利用這一點并連接到我們的數(shù)據(jù)庫。正如你現(xiàn)在所知,我們將在本教程中使用 WordPress 來演示這個功能。
首先,將最新的 WordPress 壓縮包下載到你的主目錄:
cd ~ wget http://wordpress.org/latest.tar.gz
解壓文件,這將在你的主目錄中創(chuàng)建一個名為 “wordpress” 的目錄:
tar xzvf latest.tar.gz
WordPress 包含一個示例配置文件,但默認情況下不會被使用。我們將重命名此文件,以便它能夠被正確讀取,然后我們可以在文本編輯器中打開它進行修改:
cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php nano ~/wordpress/wp-config.php
在其中,我們需要輸入我們遠程數(shù)據(jù)庫的正確值。記得使用你在之前遠程數(shù)據(jù)庫測試中使用的相同 IP 地址。
/** WordPress 數(shù)據(jù)庫的名稱 */ define('DB_NAME', 'wordpress'); /** MySQL 數(shù)據(jù)庫用戶名 */ define('DB_USER', 'wordpressuser'); /** MySQL 數(shù)據(jù)庫密碼 */ define('DB_PASSWORD', 'password'); /** MySQL 主機名 */ define('DB_HOST', 'database_server_ip');
完成后關閉文件。實際上,這是整個配置中唯一明確將我們的 Web 服務器和數(shù)據(jù)庫服務器連接起來的部分。
接下來,我們需要創(chuàng)建我們在 Nginx 服務器塊配置中設置的目錄結構。如果你還記得,我在演示中使用的是 “example.com”,但你應該使用你在 Nginx 配置中指定的任何內容:
sudo mkdir -p /var/www/example.com
然后,我們將復制在我們的 ~/wordpress
目錄中找到的文件和目錄到我們剛剛創(chuàng)建的新文檔根目錄:
sudo cp -r ~/wordpress/* /var/www/example.com
現(xiàn)在所有的文件都已經(jīng)就位。唯一剩下的事情就是稍微修改我們的權限和文件所有權。我們應該首先進入服務器的文檔根目錄:
cd /var/www/example.com
我們將把這個目錄中的所有文件交給我們的 Web 服務器用戶,即 www-data:
sudo chown -R www-data:www-data *
然而,我們仍然希望能夠以我們的普通非 root 用戶身份編輯這些文件,因此我們可以將我們的常規(guī)非 root 帳戶添加到 Web 服務器組。然后,我們可以給該組權限在這個目錄中修改文件:
sudo usermod -a -G www-data your_user sudo chmod -R g+rw /var/www/example.com
通過 Web 界面設置網(wǎng)站
現(xiàn)在,你只需要通過 Web 界面完成安裝。
訪問與你的 Web 服務器關聯(lián)的域名(或公共 IP 地址):
http://example.com
你應該看到 WordPress 安裝屏幕,在這里你需要填寫相關信息:
!WordPress 管理設置
完成配置后,你需要使用剛剛創(chuàng)建的帳戶登錄到應用程序中:
!WordPress 管理登錄
你將被帶到管理儀表板,從這里你可以開始配置你的網(wǎng)站:
!WordPress 管理儀表板
限制遠程數(shù)據(jù)庫權限
當你完成配置 WordPress 后,你應該返回并撤銷一些遠程數(shù)據(jù)庫用戶的權限。
大多數(shù)數(shù)據(jù)庫權限在日常操作中都是不需要的,只有在更新或插件安裝時才需要啟用。記住這一點,以防在執(zhí)行這些步驟后進行管理操作時出現(xiàn)錯誤。
某些插件可能還需要額外的權限。調查每個插件以查看它需要什么,并考慮選擇需要最少額外訪問權限的插件。
登錄到你的數(shù)據(jù)庫服務器。然后,使用 MySQL root 帳戶登錄到 MySQL:
mysql -u root -p
輸入密碼以獲得訪問權限。
你可以通過輸入以下命令查看遠程用戶的當前權限:
show grants for 'wordpressuser'@'web_server_IP';
+---------------------------------------------------------------------------------------------------------------------------+ | Grants for wordpressuser@xx.xxx.xxx.xxx | +---------------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'wordpressuser'@'xx.xxx.xxx.xxx' IDENTIFIED BY PASSWORD '*5FD2B7524254B7F81B32873B1EA6D681503A5CA9' | | GRANT ALL PRIVILEGES ON `wordpress`.* TO 'wordpressuser'@'xx.xxx.xxx.xxx' | +---------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
“usage” 權限實際上意味著沒有真正的權限,因此我們不必擔心。第二個權限行是我們最初設置的,允許在 wordpress
數(shù)據(jù)庫上擁有所有權限。
應用比當前權限更嚴格的新權限的過程實際上是兩個步驟。
首先,我們需要撤銷所有當前權限。通過輸入以下命令來執(zhí)行此操作:
REVOKE ALL PRIVILEGES on wordpress.* FROM 'wordpressuser'@'web_server_IP';
如果現(xiàn)在我們再次請求當前授權,我們將看到第二行已經(jīng)消失:
show grants for 'wordpressuser'@'web_server_IP';
+---------------------------------------------------------------------------------------------------------------------------+ | Grants for wordpressuser@10.128.213.175 | +---------------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'wordpressuser'@'xx.xxx.xxx.xxx' IDENTIFIED BY PASSWORD '*5FD2B7524254B7F81B32873B1EA6D681503A5CA9' | +---------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
現(xiàn)在,我們可以將我們希望重新添加到帳戶的權限。我們需要 UPDATE
、INSERT
、SELECT
和 DELETE
權限以進行日常使用:
GRANT SELECT,DELETE,INSERT,UPDATE ON wordpress.* TO 'wordpressuser'@'web_server_ip';
如果我們再次檢查,我們可以看到我們的細粒度權限現(xiàn)在已經(jīng)設置好了。
為了告訴 MySQL 重新讀取權限表以實施我們的更改,我們可以輸入:
FLUSH PRIVILEGES;
之后,再次退出 MySQL:
exit
結論
如果你一直在跟著做,現(xiàn)在你應該已經(jīng)對如何讓遠程數(shù)據(jù)庫與你的應用程序通信有了很好的理解。雖然我們討論了一些特定于 WordPress 的步驟,但一般的思路,特別是與 MySQL 配置和用戶權限相關的部分,在大多數(shù)遠程 MySQL 情況下都是適用的。
以上就是使用MySQL設置遠程數(shù)據(jù)庫以優(yōu)化網(wǎng)站性能的操作步驟的詳細內容,更多關于MySQL設置遠程數(shù)據(jù)庫的資料請關注腳本之家其它相關文章!
相關文章
MySQL日期函數(shù)與日期轉換格式化函數(shù)大全
Mysql作為一款開元的免費關系型數(shù)據(jù)庫,用戶基礎非常龐大,本文列出了MYSQL常用日期函數(shù)與日期轉換格式化函數(shù)2018-03-03MySQL server has gone away 問題的解決方法
MySQL server has gone away 問題解決方法,需要的朋友可以參考下。2010-06-06MySQL如何實現(xiàn)快速插入大量測試數(shù)據(jù)
這篇文章主要介紹了MySQL如何實現(xiàn)快速插入大量測試數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11php 不能連接數(shù)據(jù)庫 php error Can''t connect to local MySQL server
php 不能連接數(shù)據(jù)庫 php error Can't connect to local MySQL server through socket '/tmp/mysql.sock'2011-05-05