1. 程式人生 > >入門系列之在Ubuntu上使用MySQL設定遠端資料庫優化站點效能

入門系列之在Ubuntu上使用MySQL設定遠端資料庫優化站點效能

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~

本文由蘇子晨 發表於雲+社群專欄

介紹

隨著您的應用程式或網站的增長,您可能已經超出了當前的伺服器設定。如果您在同一臺計算機上託管Web伺服器和資料庫後端,最好將這兩個功能分開,以便每個功能可以在自己的硬體上執行,並分擔響應訪問者請求的負載。

在本教程中,我們將討論如何配置Web應用程式可以連線的遠端MySQL資料庫伺服器。我們將使用WordPress作為示例,以便我們可以使用,但該技術廣泛適用於任何MySQL支援的應用程式。

準備

在開始本教程之前,您將需要:

  • 兩個Ubuntu 16.04伺服器,啟用了具有sudo許可權的非root 使用者,並啟用了UFW防火牆。
  • (可選)(但強烈建議),您可以使用SSL證書保護LEMP Web伺服器。您需要一個域名,但證書是免費的。如果你沒有域名,建議您先去這裡註冊一個域名

第一步 - 在資料庫伺服器上安裝MySQL

在我們觸頂單機配置的效能上限時,將資料儲存在單獨的伺服器上可以從容地解決這個問題。它還提供了負載平衡所需的基本結構,並在以後更多地擴充套件我們的基礎設施。

首先,我們將在安裝LEMP堆疊的伺服器上安裝MySQL。登入到此伺服器,然後更新包快取並安裝MySQL伺服器軟體:

$ sudo apt-get update
$ sudo apt-get install mysql-server

在安裝過程中,系統會要求您設定並確認MySQL的root密碼。選擇一個強密碼並記下它,因為我們稍後會需要它。

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附帶一個指令碼,可引導您鎖定系統:

$ mysql_secure_installation

這將詢問您剛剛設定的MySQL**root**密碼。輸入並按ENTER。現在我們將回答一系列是或否提示。讓我們來看看:

首先,我們被問及驗證密碼外掛,這是一個可以自動為MySQL使用者強制執行某些密碼強度規則的外掛。啟用此功能是您需要根據個人安全需求做出的決定。輸入y並按ENTER啟用它,或只是點選ENTER跳過它。如果啟用,系統還會提示您從0-2中選擇一個級別,以確定密碼驗證的嚴格程度。選擇一個數字並點選ENTER繼續。

接下來,系統會詢問您是否要更改root密碼。由於我們在安裝MySQL時剛剛建立了密碼,因此我們可以安全地跳過這個。點選ENTER繼續,不更新密碼。

其餘提示可以回答。系統將詢問您是否刪除匿名**MySQL使用者,禁止遠端**root登入,刪除測試資料庫以及重新載入許可權表以確保先前的更改正常生效。這些都是個好主意。輸入y並按ENTER。

在回答完所有提示後,指令碼將退出。現在我們的MySQL安裝是合理安全的。在下一步中,我們將配置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

接下來,我們將設定遠端訪問伺服器所需的使用者和資料庫。

第三步 - 設定WordPress資料庫和遠端憑據

即使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:       [email protected]
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安裝了。

第五步 - 安裝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<[email protected]');
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的安裝例程。我們將在下一步中做到這一點。

第六步 - 通過Web介面設定Wordpress

WordPress有一個基於Web的安裝程式,它會詢問幾個問題並在我們的資料庫中安裝它所需的表。我們現在開始吧。

導航到與您的Web伺服器關聯的域名(或公共IP地址):

http://example.com

您將看到WordPress安裝程式的語言選擇螢幕。選擇適當的語言,然後單擊進入主安裝介面:

img主安裝介面

提交資訊後,您需要使用剛剛建立的帳戶登入WordPress管理介面。然後,您將進入儀表板,您可以在其中自定義和操作您的站點。

結論

在本教程中,我們設定了一個MySQL資料庫,以接受來自遠端Wordpress安裝的受SSL保護的連線。我們使用的命令和技術適用於以任何程式語言編寫的任何Web應用程式,但具體的實現細節將有所不同。有關更多資訊,請參閱您的應用程式或語言的資料庫文件。更多MySQL的教程歡迎訪問騰訊雲+社群學習更多知識。

搜尋關注公眾號「雲加社群」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社群

相關推薦

入門系列Ubuntu使用MySQL設定遠端資料庫優化站點效能

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文由蘇子晨 發表於雲+社群專欄 介紹 隨著您的應用程式或網站的增長,您可能已經超出了當前的伺服器設定。如果您在同一臺計算機上託管Web伺服器和資料庫後端,最好將這兩個功能分開,以便

新手入門——Ubuntu的編輯器神Vi / Vim

正常 必須 進步 align 單個 顯示 三種 三種模式 .py   Ubuntu上的編輯器有gedit、vi、sublime等。gedit一般在沒有其他編輯器時臨時使用,大部分情況下,vi和sublime使用的比較多,Linux系統內置了vi和sublime,其中,sub

Docker入門系列三:如何將dockerfile製作好的映象釋出到Docker hub

這個系列的前兩篇文章,我們已經把我們的應用成功地在Docker裡通過nginx運行了起來,並且用dockerfile裡製作好了一個映象。 Docker入門系列之一:在一個Docker容器裡執行指定的web應用 Docker入門系列之二:使用dockerfile製作包含指定web應用的映象 本

Ubuntu下的mysql 設定遠端連線

一、.在配置檔案中,修改/etc/mysql/mysql.conf.d/mysqld.cnf 找到bind-address = 127.0.0.1這一行 改為bind-address = 0.0.0.0即可 二、為需要遠端登入的使用者賦予許可權 1、新建使用者遠端連線

OPEN(SAP) UI5 學習入門系列二: 最佳實踐練習(

我們暫時不用Component來做模組化,我們先用最快最簡單的方法讓程式可以跑出個樣子來,然後再慢慢的新增功能。  所以,我們先直接加入MVC。 簡單介紹下,MVC就是模型、檢視和控制器的簡稱,一般的Web開發都會用到這種架構用來把前端的UI和業務邏輯分離。具體先不多介紹,直接做吧。 我們先大致規劃一下,我

深度學習實踐系列--身份證漢字及數字識別系統的實現(

手動 ear 常用 env 窗口 mic 文件下載 oot edr 前言: 本文章將記錄我利用深度學習方法實現身份證圖像的信息識別系統的實現過程,及學習到的心得與體會。本次實踐是我投身AI的初次系統化的付諸實踐,意義重大,讓自己成長許多。終於有空閑的時間,將其

數據庫面試系列五:mysql的存儲引擎

當前 查看 efault 表鎖 blog 如果 show 事務 測試 mysql的默認存儲引擎是innoDB,是唯一一個支持事務和支持外鍵的存儲引擎, 可以通過:show variables like ‘default_storage_engine‘;查看當前數據庫到默認引

Jenkins入門系列——01第一章 Jenkins是什麽?

source 每次 servlet容器 生命 .com .net 優點 指紋 順序 第一章 Jenkins是什麽? Jenkins 是一個可擴展的持續集成引擎。 主要用於: l 持續、自動地構建/測試軟件項目。 l 監控一些定時執行的任務。 Jenkins擁有

TortoiseGit學習系列WindowsTortoiseGit的安裝詳解(圖文)

錯誤 http 用戶名 dev 9.png 安裝包 本地 信息 克隆 TortoiseGit的安裝準備 首先你得安裝windows下的msysgit。 安裝版本控制器客戶端TortoiseGit [不習慣英文的朋友,也可以下個語言包]。   下載地址:https

【轉載】API入門系列三 -那迷惑人的Windows字符和字符指針類型

asc blog char* 讀者 兼容性 部分 lpcstr 意思 wchar_t 原創文章,轉載請註明作者及出處。 首發 http://blog.csdn.net/beyondcode http://www.cnblogs.com/beyond-code/ http:/

算法入門系列排序與檢索

一個 str show tor cal else color mem 函數 UVA340 UVA10420 時間有點久遠,很早之前寫的,然後忘記總結了,這道題其實很容易,一行只取第一個字符串,然後按照字典序輸出每個字符串的個數。 這裏有個技巧就是先用scanf獲

MongoDB入門系列科普篇

目錄 背景 對比 MongoDB的資料儲存格式 背景 最近公司擴充套件了很多國外客戶,那麼一個很嚴重的問題就是翻譯,對於國外客戶來說,肯定看不懂中文,那就要專案中提供切換各自國家語言的功能。 由於每個專案都是各自寫自己的翻譯,所以這塊比較混亂。對於公司來說,

Django入門系列(Web框架)

一 web框架 Web框架(Web framework)是一種開發框架,用來支援動態網站、網路應用和網路服務的開發。這大多數的web框架提供了一套開發和部署網站的方式,也為web行為提供了一套通用的方法。web框架已經實現了很多功能,開發人員使用框架提供的方法並且完成自己的業務邏輯,就能快速開發web應用了

Django入門系列(Django簡介和rom簡單介紹)

1 django中app的概念: 大學:----------------- 專案 資訊學院 ----------app01 物理學院-----------app02 ****強調***:建立了app,要在配置檔案中註冊 ...2 模板路徑配置: 1 templates資料夾 2 settings裡註冊一下 3

UbuntuUFW設定防火牆

轉自:https://www.digitalocean.com/community/users/hazelnut 介紹 UFW或Uncomplicated Firewall是iptables一個介面,旨在簡化配置防火牆的過程。 雖然iptables是一個可靠而靈活的工具,但

DJANGO入門系列(模板層的簡單介紹和視圖層的掃尾)

dir 解析 http eth endif () 查詢 文件上傳 lte 昨日回顧:1 虛擬環境 -1 pycharm裏創建 -2 用命令串講2 視圖層: 1 Request對象---GET,POST,method,body,FILES,META,path(只是

Linux(centos 7)系列(四)----設定系統自動連線網路

  今天開機的時候發現虛擬機器沒有自動連線網路,因此需要對系統自動連線網路進行設定,下面是設定的步驟。     用root使用者登入系統,輸入命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33,最後的是檔名

Linux(centos 7)系列(二)----XShell遠端連線本地虛擬機器

      本來是在自己的一臺筆記本上安裝的雙系統,但是每次都要去開啟筆記本,同時開啟兩臺機器,感覺不是很方便,因此就在自己的桌上型電腦上安裝了虛擬機器,但是虛擬機器的終端操作起來也不是很爽,因此採用了XShell5遠端連線本地的虛擬機器的方式去進行操作,虛擬機器的

flask外掛系列flask_uploads傳檔案

前言 flask可以實現上傳檔案和下載檔案的基本功能,但如果想要健壯的功能,使用flask_uploads外掛是十分方便的。 安裝 pip install flask_uploads 基本使用 # extensions.py from flask_uploads import UploadSet f

資料庫macmysql root密碼忘記或許可權錯誤的解決辦法(phpMyAdmin)無法登陸

(phpMyAdmin)無法登陸,廢話不多說,直接改root密碼就可以了 賬號是root     修改mysql root 的密碼參考:https://blog.csdn.net/u014410695/article/details/50630233