1. 程式人生 > 實用技巧 >實時備份與代理配置

實時備份與代理配置

一、資料庫遷移

1.常見原因

1.資料庫要做升級
2.資料庫伺服器到期需要遷移

2.新伺服器搭建資料庫

[root@db02 ~]# yum install -y mariadb-server

3.啟動

[root@db02 ~]# systemctl start mariadb
[root@db02 ~]# systemctl enable mariadb

4.配置資料庫密碼

[root@db02 ~]# mysqladmin -uroot password 'Linhd@123'

5.密碼連線資料庫

[root@db02 ~]# mysql -uroot -p
Enter password:

6.舊資料庫匯出資料

[root@db01 ~]# mysqldump -uroot -p -B wordpress zh edusoho > /tmp/full.sql 
Enter password: 
[root@db01 ~]# ll /tmp/full.sql 
-rw-r--r-- 1 root root 1244924 Aug 28 16:46 /tmp/full.sql

7.新庫授權

MariaDB [(none)]> grant all on *.* to root@'172.16.1.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> grant all on wordpress.* to wp@'172.16.1.%' identified by '123';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> grant all on zh.* to zh@'172.16.1.%' identified by '234';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all on edusoho.* to edu@'172.16.1.%' identified by '345';
Query OK, 0 rows affected (0.00 sec)

8.將資料匯入新庫

[root@db01 ~]# mysql -uroot -p -h172.16.1.52 < /tmp/full.sql 
Enter password: 123456

9.修改專案配置

1)wordpress程式碼

[root@web01 ~]# vim /code/wordpress/wp-config.php
/** WordPress資料庫的名稱 */
define('DB_NAME', 'wordpress');

/** MySQL資料庫使用者名稱 */
define('DB_USER', 'wp');

/** MySQL資料庫密碼 */
define('DB_PASSWORD', '123');

/** MySQL主機 */
define('DB_HOST', '172.16.1.52');

2)知乎程式碼

[root@web01 ~]# vim /code/zh/system/config/database.php 
<?php

$config['charset'] = 'utf8';^M
$config['prefix'] = 'aws_';^M
$config['driver'] = 'MySQLi';^M
$config['master'] = array (
  'charset' => 'utf8',
  'host' => '172.16.1.52',
  'username' => 'zh',
  'password' => '234',
  'dbname' => 'zh',
);^M
$config['slave'] = false;^M

3)edusoho程式碼

[root@web01 ~]# vim /code/edusoho/app/config/parameters.yml 
parameters:
    database_driver: pdo_mysql
    database_host: 172.16.1.52
    database_port: 3306
    database_name: edusoho
    database_user: edu
    database_password: '345'

10.排錯

1.檢視瀏覽器檢查,找到出問題的介面或者檔案頁面
2.檢視日誌
	[root@web01 ~]# ll /var/log/nginx/access.log
	[root@web01 ~]# ll /var/log/nginx/error.log
	業務程序日誌
3.把日誌給開發
4.4xx自己解決
5.5xx給開發

二、拆分PHP

1.修改nginx配置

[root@web01 ~]# vim /etc/nginx/conf.d/linux.blog.com.conf 
server {
    listen 80;
    server_name linux.blog.com;
    root /code/wordpress;
    location / {
        index index.php;
    }
    location ~* \.php$ {
        fastcgi_pass 172.16.1.8:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

2.重啟訪問

[root@web01 ~]# systemctl restart nginx

#訪問頁面http://linux.blog.com/,報錯502

3.修改PHP監聽埠

[root@web02 ~]# vim /etc/php-fpm.d/www.conf
#修改監聽地址
listen = 172.16.1.8:9000
#修改允許連線的ip地址
listen.allowed_clients = 172.16.1.7

#重啟服務
[root@web02 /code]# systemctl restart php-fpm

4.再次訪問頁面

#報錯頁面找不到或者檔案找不到

5.同步nginx站點檔案

[root@web01 /code]# scp -r wordpress 172.16.1.8:/code/

6.再次訪問測試

#圖片丟失

7.php伺服器掛載

[root@web02 /code]# mount -t nfs 172.16.1.31:/data/wp /code/wordpress/wp-content/uploads

8.再次訪問測試沒有問題

三、資料檔案實時備份

1.服務端(backup)

1)安裝

[root@backup ~]# yum install -y rsync

2)配置rsync

[root@backup ~]# vim /etc/rsyncd.conf 
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[data]
comment = welcome to oldboyedu backup!
path = /data

3)建立使用者

[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -u 666 -g 666

4)建立密碼檔案

[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd

5)建立目錄

[root@backup ~]# mkdir /data
[root@backup ~]# chown -R www.www /data/

6)啟動

[root@backup ~]# systemctl start rsyncd
[root@backup ~]# ps -ef | grep rsync

2.客戶端

1)安裝

[root@nfs ~]# yum install -y rsync inotify-tools

#安裝sersync
[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/sersync

2)配置sersync

[root@nfs ~]# vim /usr/local/sersync/confxml.xml

3)建立密碼檔案

[root@nfs ~]# echo 123456 > /etc/rsync.password
[root@nfs ~]# chmod 600 /etc/rsync.password

4)啟動

[root@nfs /data]# /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml

3.測試

四、代理

1.什麼是代理

代理一詞往往並不陌生, 該服務我們常常用到如(代理理財、代理租房、代理收貨等等),如下圖所示

2.沒有代理

在沒有代理模式的情況下,客戶端和Nginx服務端,都是客戶端直接請求服務端,服務端直接響應客戶端。

3.有代理

那麼在網際網路請求裡面,客戶端往往無法直接向服務端發起請求,那麼就需要用到代理服務,來實現客戶端和服務通訊,如下圖所示

4.代理常見模式

Nginx作為代理服務,按照應用場景模式進行總結,代理分為
1.正向代理
2.反向代理

1)正向代理

正向代理,(內部上網)客戶端<—>代理->服務端

2)反向代理

反向代理,用於公司叢集架構中,客戶端->代理<—>服務端

3)正向代理與反向代理區別

1.區別在於形式上服務的"物件"不一樣
2.正向代理代理的物件是客戶端,為客戶端服務
3.反向代理代理的物件是服務端,為服務端服務

五、Nginx代理服務支援協議

1.支援的協議

2.代理的模式

3.代理模組

反向代理模式與Nginx代理模組總結如表格所示
反向代理模式 Nginx配置模組
http、websocket、https、tomcat(java程式) ngx_http_proxy_module
fastcgi(PHP程式) ngx_http_fastcgi_module
uwsgi(python程式) ngx_http_uwsgi_module
grpc(go程式)(golang) ngx_http_v2_module

六、nginx代理配置

1.代理語法

Syntax:    proxy_pass URL;
Default:    —
Context:    location, if in location, limit_except

2.環境準備

主機 IP 身份
lb01 10.0.0.4,172.16.1.4 代理
web01 172.16.1.7 服務端

3.配置web01頁面

[root@web01 ~]# vim /etc/nginx/conf.d/linux.proxy.com.conf
server {
    listen 80;
    server_name linux.proxy.com;

    location / {
        root /code/proxy;
        index index.html;
    }
}

[root@web01 ~]# systemctl restart nginx

4.編寫網站

[root@web01 ~]# mkdir /code/proxy
[root@web01 ~]# vim /code/proxy/index.html
web01 .............

5.訪問測試

#配置本地hosts
網頁訪問linux.proxy.com

6.配置代理

#安裝nginx
#配置nginx
#建立使用者
#配置站點配置檔案
[root@lb01 ~]# vim /etc/nginx/conf.d/daili.conf
server {
    listen 80;
    server_name linux.proxy.com;

    location / {
        proxy_pass http://172.16.1.7:80;
        #proxy_pass http://10.0.0.7:80;		#正常情況我們使用內網IP,抓包測試使用外網
    }
}
[root@lb01 ~]# systemctl start nginx

7.訪問頁面測試

#訪問http://linux.proxy.com/返回結果不是我們要的內容
原因:
	代理請求後端時,沒有使用域名,是使用IP訪問的,匹配的配置檔案是nginx中第一個配置檔案

8.配置攜帶域名去代理

[root@lb01 ~]# vim /etc/nginx/conf.d/daili.conf 
server {
    listen 80;
    server_name linux.proxy.com;

    location / {
        proxy_pass http://10.0.0.7:80;
        proxy_set_header Host $http_host;
    }
}