1 什麼是FastCGI
FastCGI是一個可伸縮地、高速地在HTTP服務器和動態腳本語言間通信的接口
CGI(common gateway interface)通用網關接口
FastCGI特點總結:
1、是HTTP服務器和動態腳本語言間通信的接口或者工具;
2、FastCGI優點是把動態語言解析和HTTP服務器分離開來;
3、nginx、apache、lighttpd以及多數動態語言都支持FastCGI;
4、FastCGI接口方式採用C/S結構,客戶端(http服務器),服務端(動態語言解析服務器);
5、PHP動態語言服務端可以啓動多個FastCGI的守護進程(php-fpm)
6、http服務器通過FastCGI客戶端(例:Nginx fastcgi_pass)和動態語言FastCGI服務端通信(例:php-fpm)
以下爲Nginx結合PHP FastCGI運行原理圖:
2 PHP安裝前的準備
要安裝PHP,最好先安裝nginx和mysql
檢查nginx是否安裝
[root@lnmp02 data]# /application/nginx/sbin/nginx [root@lnmp02 data]# ps -ef|grep nginx root 1900 1 0 18:12 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx nginx 1901 1900 0 18:12 ? 00:00:00 nginx: worker process root 1903 1035 0 18:12 pts/0 00:00:00 grep nginx
查看Nginx版本信息,編譯環境等
[root@lnmp02 data]# /application/nginx/sbin/nginx -V nginx version: nginx/1.6.3 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) TLS SNI support enabled configure arguments: --user=nginx --group=nginx --prefix=/application/nginx-1.6.3/ --with-http_stub_status_module --with-http_ssl_module
檢查數據庫有沒有安裝
[root@lnmp02 data]# ls /application/mysql/ -al [root@lnmp02 data]# lsof -i :3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 1633 mysql 10u IPv4 18284 0t0 TCP *:mysql (LISTEN)
3 安裝PHP(編譯安裝)
拷貝PHP文件到服務器
[root@lnmp02 data]# cd /home/oldboy/tools/ [root@lnmp02 tools]# rz -y [root@lnmp02 tools]# ls mysql-5.5.32-linux2.6-x86_64.tar.gz nginx-1.6.3 nginx-1.6.3.tar.gz php-5.3.27.tar.gz
查看php運行時調用的一些函數庫是否已經安裝
[root@lnmp02 tools]# rpm -qa freetype-devel libpng-devel gd-devel curl-devel [root@lnmp02 tools]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libiconv-devel zlib-devel-1.2.3-29.el6.x86_64
安裝相關的函數庫包
yum install zlib-devel libxml2-devel libjpeg-devel libiconv-devel -y yum install freetype-devel libpng-devel gd-devel curl-devel libxslt-devel -y echo $? vi /etc/yum.conf 修改keepcache=1 可以讓安裝了的包保留下來
檢查包是否順利安裝
[root@lnmp02 tools]# rpm -qa freetype-devel libpng-devel gd-devel curl-devel freetype-devel-2.3.11-17.el6.x86_64 libpng-devel-1.2.49-2.el6_7.x86_64 gd-devel-2.0.35-11.el6.x86_64 [root@lnmp02 tools]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libiconv-devel zlib-devel-1.2.3-29.el6.x86_64 libxml2-devel-2.7.6-21.el6_8.1.x86_64 libjpeg-devel curl-devel要變名字
[root@lnmp02 tools]# rpm -qa|grep libjpeg libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64 [root@lnmp02 tools]# rpm -qa|grep curl libcurl-devel-7.19.7-53.el6_9.x86_64
yum源裏沒有libiconv-devel,手動安裝後再次檢查
[root@lnmp02 tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz [root@lnmp02 tools]#tar zxf libiconv-1.14.tar.gz [root@lnmp02 tools]#cd libiconv-1.14 [root@lnmp02 libiconv-1.14]#./configure --prefix=/usr/local/libiconv [root@lnmp02 libiconv-1.14]#make [root@lnmp02 libiconv-1.14]#make install
rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel zlib-devel libxml2-devel libjpeg-turbo-devel libiconv-devel zlib-devel-1.2.3-29.el6.x86_64 libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64 freetype-devel-2.3.11-17.el6.x86_64 libpng-devel-1.2.49-2.el6_7.x86_64 libcurl-devel-7.19.7-53.el6_9.x86_64 libxml2-devel-2.7.6-21.el6_8.1.x86_64 gd-devel-2.0.35-11.el6.x86_64
安裝libmcrypt庫
[root@lnmp02 tools]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo [root@lnmp02 tools]# yum install libmcrypt-devel -y [root@lnmp02 tools]# rpm -qa libmcrypt-devel libmcrypt-devel-2.5.8-9.el6.x86_64
安裝mhash加密擴展庫,已經裝了epel源,可以快速安裝
yum install mhash mhash-devel -y [root@lnmp02 tools]# rpm -qa mhash mhash-devel mhash-devel-0.9.9.9-3.el6.x86_64 mhash-0.9.9.9-3.el6.x86_64
安裝mcrypt加密擴展庫
[root@lnmp02 tools]# yum install mcrypt -y [root@lnmp02 tools]# rpm -qa mcrypt mcrypt-2.6.8-10.el6.x86_64
開始安裝PHP服務
[root@lnmp02 tools]# ls libiconv-1.14 mysql-5.5.32-linux2.6-x86_64.tar.gz nginx-1.6.3.tar.gz libiconv-1.14.tar.gz nginx-1.6.3 php-5.3.27.tar.gz [root@lnmp02 tools]# tar xf php-5.3.27.tar.gz [root@lnmp02 tools]# ls libiconv-1.14 nginx-1.6.3 php-5.3.27.tar.gz libiconv-1.14.tar.gz nginx-1.6.3.tar.gz mysql-5.5.32-linux2.6-x86_64.tar.gz php-5.3.27 [root@lnmp02 tools]# cd php-5.3.27 [root@lnmp02 php-5.3.27]#
編譯安裝PHP
./configure \ --prefix=/application/php-5.3.27 \ --with-mysql=/application/mysql \ --with-iconv-dir=/usr/local/libiconv \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir=/usr \ --enable-xml \ --disable-rpath \ --enable-safe-mode \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-inline-optimization \ --with-curlwrappers \ --enable-mbregex \ --enable-mbstring \ --enable-fpm \ --with-mcrypt \ --with-gd \ --enable-gd-native-ttf \ --with-openssl \ --with-mhash \ --enable-pcntl \ --enable-sockets \ --with-xmlrpc \ --enable-zip \ --enable-soap \ --enable-short-tags \ --enable-zend-multibyte \ --enable-static \ --with-xsl \ --with-fpm-user=nginx \ --with-fpm-group=nginx \ --enable-ftp
檢查錯誤
[root@lnmp02 php-5.3.27]# echo $? 0 make: *** [ext/phar/phar.php] 錯誤 127
安裝報錯的處理
將libmysqlclient.so.18庫做個軟鏈接,創建沒有的文件,重新make [root@lnmp02 php-5.3.27]# ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/ [root@lnmp02 php-5.3.27]# touch ext/phar/phar.phar [root@lnmp02 php-5.3.27]# make Build complete. Don't forget to run 'make test'. [root@lnmp02 php-5.3.27]# make install [root@lnmp02 php-5.3.27]# echo $? 0
做個軟鏈接
[root@lnmp02 php-5.3.27]# ln -s /application/php-5.3.27/ /application/php [root@lnmp02 php-5.3.27]# ls -l /application/php lrwxrwxrwx 1 root root 24 6月 25 22:19 /application/php -> /application/php-5.3.27/
查看php配置默認模板文件
[root@lnmp02 php-5.3.27]# ls php.ini* php.ini-development php.ini-production
拷貝配置文件到PHP默認目錄並改名
[root@lnmp02 php-5.3.27]# cp php.ini-production /application/php/lib/php.ini
php.ini比較重要的參數優化
1)比較重要的安全參數優化:
338 safe_mode = On 338行 開啓安全模式 435 expose_php = Off 關閉版本信息 521 error_reporting = E_ALL & ~E_DEPRECATED 報錯的級別 538 display_errors = Off 錯誤信息控制,測試的時候開啓 559 log_errors = On 打開log日誌 643 ;error_log = php_errors.log log日誌的路徑 703 register_globals = Off 關閉全局變量(默認關閉,不能開啓) 756 magic_quotes_gpc = Off 防止SQL注入 854 ;cgi.fix_pathinfo=0 防止Nginx文件類型錯誤解析漏洞 902 allow_url_fopen = Off 打開遠程打開(禁止) 2)根據具體業務可修改的參數: 444 max_execution_time = 30 單個腳本最大運行時間,單位秒***** 454 max_input_time = 60 單個腳本等待輸入的最長時間 465 memory_limit = 128M 單個腳本最大使用內存,單位K或M (128M稍大,可以適當調小) 891 upload_max_filesize = 2M 上傳文件最大許可 894 max_file_uploads = 20 可以通過單個請求上載的最大文件數
配置PHP服務的配置文件php-fpm.conf
[
root@lnmp02 php-5.3.27]# cd /application/php/etc/ [root@lnmp02 etc]# ls pear.conf php-fpm.conf.default [root@lnmp02 etc]# cp php-fpm.conf.default php-fpm.conf
php-fpm.conf配置文件詳解
pid = /usr/local/var/run/php-fpm.pid
#pid設置,一定要開啓,上面是Mac平臺的。默認在php安裝目錄中的var/run/php-fpm.pid。比如centos的在: /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/var/log/php-fpm.log
#錯誤日誌,上面是Mac平臺的,默認在php安裝目錄中的var/log/php-fpm.log,比如centos的在: /usr/local/php/var/log/php-fpm.log
log_level = notice
#錯誤級別. 上面的php-fpm.log紀錄的登記。可用級別爲: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調試信息). 默認: notice.
emergency_restart_threshold = 60
emergency_restart_interval = 60s
#表示在emergency_restart_interval所設值內出現SIGSEGV或者SIGBUS錯誤的php-cgi進程數如果超過 emergency_restart_threshold個,php-fpm就會優雅重啓。這兩個選項一般保持默認值。0 表示 '關閉該功能'. 默認值: 0 (關閉).
process_control_timeout = 0
#設置子進程接受主進程複用信號的超時時間. 可用單位: s(秒), m(分), h(小時), 或者 d(天) 默認單位: s(秒). 默認值: 0.
daemonize = yes
#後臺執行fpm,默認值爲yes,如果爲了調試可以改爲no。在FPM中,可以使用不同的設置來運行多個進程池。 這些設置可以針對每個進程池單獨設置。
listen = 127.0.0.1:9000
#fpm監聽端口,即nginx中php處理的地址,一般默認值即可。可用格式爲: 'ip:port', 'port', '/path/to/unix/socket'. 每個進程池都需要設置。如果nginx和php在不同的機器上,分佈式處理,就設置ip這裏就可以了。
listen.backlog = -1
#backlog數,設置 listen 的半連接隊列長度,-1表示無限制,由操作系統決定,此行註釋掉就行。backlog含義參考:http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1
#允許訪問FastCGI進程的IP白名單,設置any爲不限制IP,如果要設置其他主機的nginx也能訪問這臺FPM進程,listen處要設置成本地可被訪問的IP。默認值是any。每個地址是用逗號分隔. 如果沒有設置或者爲空,則允許任何服務器請求連接。
listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket設置選項,如果使用tcp方式訪問,這裏註釋即可。
user = www
group = www
#啓動進程的用戶和用戶組,FPM 進程運行的Unix用戶, 必須要設置。用戶組,如果沒有設置,則默認用戶的組被使用。
pm = dynamic
#php-fpm進程啓動模式,pm可以設置爲static和dynamic和ondemand
#如果選擇static,則進程數就數固定的,由pm.max_children指定固定的子進程數。
#如果選擇dynamic,則進程數是動態變化的,由以下參數決定:
pm.max_children = 50 #子進程最大數
pm.start_servers = 2 #啓動時的進程數,默認值爲: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 1 #保證空閒進程數最小值,如果空閒進程小於此值,則創建新的子進程
pm.max_spare_servers = 3 #,保證空閒進程數最大值,如果空閒進程大於此值,此進行清理
pm.max_requests = 500
#設置每個子進程重生之前服務的請求數. 對於可能存在內存泄漏的第三方模塊來說是非常有用的. 如果設置爲 '0' 則一直接受請求. 等同於 PHP_FCGI_MAX_REQUESTS 環境變量. 默認值: 0.
pm.status_path = /status
#FPM狀態頁面的網址. 如果沒有設置, 則無法訪問狀態頁面. 默認值: none. munin監控會使用到
ping.path = /ping
#FPM監控頁面的ping網址. 如果沒有設置, 則無法訪問ping頁面. 該頁面用於外部檢測FPM是否存活並且可以響應請求. 請注意必須以斜線開頭 (/)。
ping.response = pong
#用於定義ping請求的返回相應. 返回爲 HTTP 200 的 text/plain 格式文本. 默認值: pong.
access.log = log/$pool.access.log
#每一個請求的訪問日誌,默認是關閉的。
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
#設定訪問日誌的格式。
slowlog = log/$pool.log.slow
#慢請求的記錄日誌,配合request_slowlog_timeout使用,默認關閉
request_slowlog_timeout = 10s
#當一個請求該設置的超時時間後,就會將對應的PHP調用堆棧信息完整寫入到慢日誌中. 設置爲 '0' 表示 'Off'
request_terminate_timeout = 0
#設置單個請求的超時中止時間. 該選項可能會對php.ini設置中的'max_execution_time'因爲某些特殊原因沒有中止運行的腳本有用. 設置爲 '0' 表示 'Off'.當經常出現502錯誤時可以嘗試更改此選項。
rlimit_files = 1024
#設置文件打開描述符的rlimit限制. 默認值: 系統定義值默認可打開句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
rlimit_core = 0
#設置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整數. 默認值: 系統定義值.
chroot =
#啓動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設置, 則chroot不被使用.
chdir =
#設置啓動目錄,啓動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 默認值: 當前目錄,或者/目錄(chroot時)
catch_workers_output = yes
#重定向運行過程中的stdout和stderr到主要的錯誤日誌文件中. 如果沒有設置, stdout 和 stderr 將會根據FastCGI的規則被重定向到 /dev/null . 默認值: 空.
php-fpm.conf一些重要的設置
php-fpm進程分配
在之前的文章中就說過了。在fasgcgi模式下,php會啓動多個php-fpm進程,來接收nginx發來的請求,那是不是進程越多,速度就越快呢?這可不一定!得根據我們的機器配置和業務量來決定。
我們先來看下,設定進程的配置在哪裏?
pm = static | dynamic | ondemand
pm可以設置成這樣3種,我們用的最多的就上前面2種。
pm = static 模式
pm = static
表示我們創建的php-fpm子進程數量是固定的,那麼就只有pm.max_children = 50
這個參數生效。你啓動php-fpm的時候就會一起全部啓動51(1個主+50個子)個進程,頗爲壯觀。
pm = dynamic 模式
pm = dynamic
模式,表示啓動進程是動態分配的,隨着請求量動態變化的。他由 pm.max_children
,pm.start_servers
,pm.min_spare_servers
,pm.max_spare_servers
這幾個參數共同決定。
上面已經講過,這裏再重申一下吧:
pm.max_children
=
50
是最大可創建的子進程的數量。必須設置。這裏表示最多隻能50個子進程。
pm.start_servers = 20
隨着php-fpm一起啓動時創建的子進程數目。默認值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。這裏表示,一起啓動會有20個子進程。
pm.min_spare_servers = 10
設置服務器空閒時最小php-fpm進程數量。必須設置。如果空閒的時候,會檢查如果少於10個,就會啓動幾個來補上。
pm.max_spare_servers = 30
設置服務器空閒時最大php-fpm進程數量。必須設置。如果空閒時,會檢查進程數,多於30個了,就會關閉幾個,達到30個的狀態。
到底選擇static還數dynamic?
很多人恐懼症來襲,不知道選什麼好?
一般原則是:動態適合小內存機器,靈活分配進程,省內存。靜態適用於大內存機器,動態創建回收進程對服務器資源也是一種消耗。
如果你的內存很大,有8-20G,按照一個php-fpm進程20M算,100個就2G內存了,那就可以開啓static模式。如果你的內存很小,比如才256M,那就要小心設置了,因爲你的機器裏面的其他的進程也算需要佔用內存的,所以設置成dynamic是最好的,比如:pm.max_chindren = 8, 佔用內存160M左右,而且可以隨時變化,對於一半訪問量的網站足夠了。
慢日誌查詢
我們有時候會經常飽受500,502問題困擾。當nginx收到如上錯誤碼時,可以確定後端php-fpm解析php出了某種問題,比如,執行錯誤,執行超時。
這個時候,我們是可以開啓慢日誌功能的。
slowlog = /usr/local/var/log/php-fpm.log.slow
request_slowlog_timeout = 15s
當一個請求該設置的超時時間15秒後,就會將對應的PHP調用堆棧信息完整寫入到慢日誌中。
php-fpm慢日誌會記錄下進程號,腳本名稱,具體哪個文件哪行代碼的哪個函數執行時間過長:
[21-Nov-2013 14:30:38] [pool www] pid 11877
script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php
[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2
通過日誌,我們就可以知道第2行的file_get_contents 函數有點問題,這樣我們就能追蹤問題了
啓動PHP服務
[root@lnmp02 ~]# /application/php/sbin/php-fpm [root@lnmp02 etc]# ps -ef|grep php-fpm root 126238 1 0 23:34 ? 00:00:00 php-fpm: master process (/application/php-5.3.27/etc/php-fpm.conf) nginx 126239 126238 0 23:34 ? 00:00:00 php-fpm: pool www nginx 126240 126238 0 23:34 ? 00:00:00 php-fpm: pool www root 126242 126214 0 23:34 pts/0 00:00:00 grep php-fpm [root@lnmp02 etc]# lsof -i :9000 <============默認9000端口提供服務 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME php-fpm 126238 root 7u IPv4 121633 0t0 TCP localhost:cslistener (LISTEN) php-fpm 126239 nginx 0u IPv4 121633 0t0 TCP localhost:cslistener (LISTEN) php-fpm 126240 nginx 0u IPv4 121633 0t0 TCP localhost:cslistener (LISTEN)
配置Nginx支持PHP程序請求訪問
[root@lnmp02 etc]# cd /application/nginx/conf/ [root@lnmp02 conf]# vi extra/blog.conf server { listen 80; server_name blog.etiantian123.org; location / { root html/blog; index index.html index.htm; } location ~ .*\.(php|php5)?$ { root html/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } }
檢查語法並重啓服務
[root@lnmp02 conf]# ../sbin/nginx -t nginx: the configuration file /application/nginx-1.6.3//conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.6.3//conf/nginx.conf test is successful [root@lnmp02 conf]# ../sbin/nginx -s reload
測試LNMP環境生效的情況
1)測試PHP解析請求是否OK
[root@lnmp02 conf]# cd ../html/blog/ [root@lnmp02 blog]# echo "<?php phpinfo(); ?>" >test_info.php [root@lnmp02 blog]# cat test_info.php <?php phpinfo(); ?>
2)調整windows下的host解析
3)打開瀏覽器輸入http://blog.etiantian123.org/test_info.php 若能顯示PHP的信息 則PHP解析已經正常
對PHP連接mysql的情況進行測試
[root@lnmp02 blog]# vi test_mysql.php <?php $link_id=mysql_connect("localhost","root","wangxin") or mysql_error(); if ($link_id) { echo "mysql successful by wangxin !"; }else{ echo mysql_error(); } ?>
瀏覽器測試:
http://blog.etiantian123.org/test_mysql.php
出現mysql successful by wangxin ! 則OK
4 部署一個開源博客wordpress
4.1 mysql數據庫配置準備
登錄數據庫
[root@lnmp02 ~]# mysql -uroot -pwangxian mysql> create database wordpress; <========創建一個專用的數據庫wordpress用於存放blog數據 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | wordpress | +--------------------+ 4 rows in set (0.07 sec)
創建一個專用的wordpress管理用戶
命令如下:
mysql> grant all on wordpress .* to wordpress@'localhost' identified by '123456'; Query OK, 0 rows affected (0.00 sec)
當數據庫和PHP服務不在一臺機器上,修改地址如下: 10.0.0.%爲客戶端地址段
mysql> grant all on wordpress .* to wordpress@'10.0.0.%' identified by '123456';
刷新權限,使得創建用戶生效
mysql> flush privileges; Query OK, 0 rows affected (0.05 sec)
查看用戶對應的權限
show grants for wordpress@'localhost';
查看數據庫裏創建的wordpress用戶
mysql> select user,host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | root | 127.0.0.1 | | root | localhost | | wordpress | localhost | <==============只允許本機通過wordpress用戶訪問數據庫 +-----------+-----------+ 3 rows in set (0.00 sec)
4.2 Nginx及PHP環境配置準備
1、選擇配置好的支持LNMP的blog域名對應的虛擬主機
[root@lnmp02 ~]# cd /application/nginx/conf/extra/ [root@lnmp02 extra]# vi blog.conf server { listen 80; server_name blog.etiantian123.org; location / { root html/blog; index index.php index.html index.htm; 《=========補充一個首頁文件index.php } location ~ .*\.(php|php5)?$ { root html/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } }
檢查語法以及重新加載服務
[root@lnmp02 extra]# ../../sbin/nginx -t nginx: the configuration file /application/nginx-1.6.3//conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.6.3//conf/nginx.conf test is successful [root@lnmp02 extra]# ../../sbin/nginx -s reload
2、獲取wordpress程序,放置到blog域名對應虛擬主機的目錄下
[root@lnmp02 blog]# ls index.html test_info.php test_mysql.php wordpress-4.7.4-zh_CN.tar.gz [root@lnmp02 blog]# tar xf wordpress-4.7.4-zh_CN.tar.gz [root@lnmp02 blog]# ls index.html test_info.php test_mysql.php wordpress wordpress-4.7.4-zh_CN.tar.gz [root@lnmp02 blog]# mv wordpress/* . 《=======把wordpress目錄的內容移動到blog根目錄 [root@lnmp02 blog]# /bin/mv wordpress-4.7.4-zh_CN.tar.gz /home/oldboy/tools/ 將源文件移走備份
授權nginx及php服務訪問blog站點目錄,此授權方法不安全,臨時辦法
[root@lnmp02 blog]# chown -R nginx.nginx ../blog/
5 wordpress數據庫的備份和恢復
mysqldump 最常用的備份工具
5.1數據備份分類
邏輯備份(mysqldump)
小於50G的數據量
原理:將數據庫的數據以邏輯的SQL語句的方式到處
物理備份
1、 scp /application/mysql/data 拷貝到獨立數據庫上就可以
2、 xtrabackup開源的物理備份工具
5.2 mysqldump備份
[root@lnmp02 ~]# mysqldump -uroot -pwangxian -B -A -x|gzip >/opt/backup_$(date +%F).sql.gz -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly. [root@lnmp02 ~]# ll /opt/ 總用量 296 -rw-r--r-- 1 root root 298664 6月 27 21:41 backup_2017-06-27.sql.gz drwxr-xr-x. 2 root root 4096 11月 22 2013 rh
-A 備份所有庫
-B 備份多個庫,並添加use 庫名; create database庫等的功能
-x 備份時鎖表,會影響讀寫,儘量晚上執行。
gzip 壓縮效率高
只備份wordpress庫裏的數據
[root@lnmp02 ~]# mysqldump -uroot -pwangxian -B -x wordpress|gzip >/opt/backup_wordpress_$(date +%F).sql.gz
數據庫備份的遷移到mysql-server
[root@lnmp02 opt]# scp -rp -P52113 backup_wordpress_2017-06-27.sql.gz [email protected]:/opt/
數據庫恢復
先解壓 [root@mysql-server tools]# cd /opt/ [root@mysql-server opt]# gzip -d backup_wordpress_2017-06-27.sql.gz [root@mysql-server opt]# ll 總用量 616 -rw-r--r-- 1 root root 625542 6月 27 21:47 backup_wordpress_2017-06-27.sql [root@mysql-server opt]# mysql -uroot -pwangxian <backup_wordpress_2017-06-27.sql [root@mysql-server opt]# mysql -uroot -pwangxian mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | wordpress | +--------------------+ 5 rows in set (0.00 sec)
給客戶端主機授權訪問數據庫
mysql> grant select,insert,update,delete on wordpress.* to wordpress@'192.168.4.%' identified by '123456'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> select user,host from mysql.user; +-----------+--------------+ | user | host | +-----------+--------------+ | root | 127.0.0.1 | | wordpress | 192.168.4.% | | root | ::1 | | | localhost | | root | localhost | | | mysql-server | | root | mysql-server | +-----------+--------------+ 7 rows in set (0.00 sec)
在Nginx服務器上修改wp-config.php參數,並且修改hosts文件
[root@lnmp02 blog]# pwd /application/nginx/html/blog [root@lnmp02 blog]# vi wp-config.php /** MySQL主機 */ define('DB_HOST', 'db.etiantian123.org'); [root@lnmp02 blog]# vi /etc/hosts 192.168.4.124 db.etiantian123.org
6 搭建LB負載均衡環境
添加虛擬IP(VIP)
[root@lb01 ~]# ip addr add 192.168.4.126/24 dev eth0 [root@lb01 ~]# ip add|grep 4.126 inet 192.168.4.126/24 scope global secondary eth0
負載均衡常用軟件:
L4:tcp負載均衡 lvs
L4-L7 Haproxy
L7 Nginx 國內中小企業集羣比較流行的負載均衡軟件,嚴格來說叫反向代理。Nginx已經支持L4-L7
下載安裝nginx
[root@lb01 tools]# wget http://nginx.org/download/nginx-1.6.3.tar.gz [root@lb01 tools]# ls -l 總用量 788 -rw-r--r-- 1 root root 805253 4月 8 2015 nginx-1.6.3.tar.gz [root@lb01 tools]# useradd nginx -s /sbin/nologin -M [root@lb01 tools]# tar xf nginx-1.6.3.tar.gz [root@lb01 tools]# cd nginx-1.6.3 [root@lb01 nginx-1.6.3]# yum install pcre-devel -y [root@lb01 nginx-1.6.3]# yum install pcre-devel openssl-devel -y [root@lb01 nginx-1.6.3]# mkdir /application [root@lb01 nginx-1.6.3]#./configure --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module [root@lb01 nginx-1.6.3]#make [root@lb01 nginx-1.6.3]#make install
做個軟鏈接
[root@lb01 nginx-1.6.3]# ln -s /application/nginx-1.6.3/ /application/nginx [root@lb01 nginx-1.6.3]# ls -l /application/ 總用量 4 lrwxrwxrwx 1 root root 25 6月 28 14:25 nginx -> /application/nginx-1.6.3/ drwxr-xr-x 6 root root 4096 6月 28 14:24 nginx-1.6.3 [root@lb01 nginx-1.6.3]# ll /application/nginx/ 總用量 16 drwxr-xr-x 2 root root 4096 6月 28 14:24 conf drwxr-xr-x 2 root root 4096 6月 28 14:24 html drwxr-xr-x 2 root root 4096 6月 28 14:24 logs drwxr-xr-x 2 root root 4096 6月 28 14:24 sbin
Nginx負載均衡需要哪些模塊:
1、upstream模塊 ngx_http_upstream_module
定義有哪些節點,調度算法是什麼?
upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; } server { location / { proxy_pass http://backend; } }
2、http_proxy模塊 ngx_http_proxy_module
此模塊負責請求的轉發,例如:proxy_pass發給定義好的指定upstream名字
location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; 《===獲取用戶真實IP }