Linux 萬字入門教程

Java陈序员發表於2024-10-01

0. 前言

文章已經收錄到 GitHub 個人部落格專案,歡迎 Star

https://github.com/chenyl8848/chenyl8848.github.io

或者訪問網站,進行線上瀏覽:

https://chenyl8848.github.io/

1. Linux 介紹

1.1 引言

Linux 是一套免費使用和自由傳播的類 Unix 作業系統,是一個基於 POSIX 和 Unix 的多使用者、多工、支援多執行緒和多 CPU 的作業系統

伴隨著網際網路的發展,Linux 得到了來自全世界軟體愛好者、組織、公司的支援。它除了在伺服器作業系統方面保持著強勁的發展勢頭以外,在個人電腦、嵌入式系統上都有著長足的進步。

關注微信公眾號:【Java陳序員】,獲取開源專案分享、AI副業分享、超200本經典計算機電子書籍等。

目前 Linux 存在著許多不同的 Linux 發行版本,但它們都使用了 Linux 核心。Linux 可安裝在各種計算機硬體裝置中,比如手機、平板電腦、路由器、臺式計算機。


1.2 Linux 誕生

20 世紀 80 年代,計算機硬體的效能不斷提高,PC 的市場不斷擴大,當時可供計算機選用的作業系統主要有 Unix、DOS 和 MacOS 這幾種。

Unix 價格昂貴,不能執行於PC
DOS顯得簡陋,且原始碼被軟體廠商嚴格保密;
MacOS是一種專門用於蘋果計算機的作業系統。

此時,電腦科學領域迫切需要一個更加完善、強大、廉價和完全開放的作業系統。由於供教學使用的典型作業系統很少,因此當時在荷蘭當教授的美國人 AndrewS.Tanenbaum 編寫了一個作業系統,名為 MINIX,為了向學生講述作業系統內部工作原理。MINIX 雖然很好,但只是一個用於教學目的的簡單作業系統,而不是一個強有力的實用作業系統,然而最大的好處就是公開原始碼。

全世界學計算機的學生都透過鑽研 MINIX 原始碼來了解電腦裡執行的 MINIX 作業系統,芬蘭赫爾辛基大學大學二年級的學生 Linus Torvalds 就是其中一個,在吸收了 MINIX 精華的基礎上,Linus 於 1991 年寫出了屬於自己的 Linux 作業系統,版本為 Linux0.01,是 Linux 時代開始的標誌。他利用 Unix 的核心,去除繁雜的核心程式,改寫成適用於一般計算機的 x86 系統,並放在網路上供大家下載,1994 年推出完整的核心 Version1.0,至此,Linux 逐漸成為功能完善、穩定的作業系統,並被廣泛使用。

總結:Linux 出現於 1991 年,是由芬蘭赫爾辛基大學學生,Linus Torvalds 和後來加入的眾多愛好者共同開發完成。


1.3 Linux 特點

  • 完全免費

Linux 是一款免費的作業系統,使用者可以透過網路或其他途徑免費獲得,並可以任意修改其原始碼。這是其他的作業系統所做不到的。正是由於這一點,來自全世界的無數程式設計師參與了 Linux 的修改、編寫工作,程式設計師可以根據自己的興趣和靈感對其進行改變,這讓 Linux 吸收了無數程式設計師的精華,不斷壯大。

  • 多使用者、多工

Linux 支援多使用者,各個使用者對於自己的檔案裝置有自己特殊的權利,保證了各使用者之間互不影響。多工則是現在電腦最主要的一個特點,Linux 可以使多個程式同時並獨立地執行。同時豐富的網路功能,可靠的系統安全,良好的可移植性,具有標準相容性,出色的速度效能


2. Linux 之 CentOS

2.1 CentOS 引言

CentOS(Community Enterprise Operating System,中文意思是社群企業作業系統)是 Linux 發行版之一,它是來自於 Red Hat Enterprise Linux 依照開放原始碼規定釋出的原始碼所編譯而成。

由於出自同樣的原始碼,因此有些要求高度穩定性的伺服器以 CentOS 替代商業版的 [Red Hat](https://baike.baidu.com/item/Red Hat) Enterprise Linux 使用。兩者的不同,在於CentOS 完全開源

2.2 CentOS 和 RedHeat 區別

目前的 Linux 作業系統主要應用於生產環境,主流企業的 Linux 系統仍舊是 RedHat 或者 CentOS,他們出自於同樣的原始碼,但 CentOS 完全免費。其獨有的 yum 命令支援線上升級,可以即時更新系統,不像 RedHat 那樣需要花錢購買支援服務!


2.3 安裝 CentOS

2.3.1 環境準備

# 環境要求:

1. windows7+
2. VMware Workstation8+
3. CentOS 系統(映象)

2.3.2 安裝 CentOS

0、下載 CentOS

官網https://www.CentOS.org/

官網下載地址http://isoredirect.CentOS.org/CentOS/7/isos/x86_64/

1、開啟 VMware Workstation

2、選擇選單 File 的第一項新建虛擬機器

3、選擇自定義虛擬機器安裝

4、選擇下一步

5、虛擬機器設定之後安裝系統

6、選擇虛擬機器安裝系統以及版本

7、選擇虛擬機器名稱與位置

8、設定處理器數

9、設定虛擬機器記憶體

10、選擇網路模式

11、選擇 IO 匯流排 下一步

12、選擇新建硬碟

13、選擇硬碟型別

14、拆分硬碟

15、設定磁碟位置

16、建立完成

3. Linux 目錄結構

# 目錄結構

    bin  (binaries)存放二進位制可執行檔案																									 [重點]
    sbin  (super user binaries)存放二進位制可執行檔案,只有root才能訪問
    etc (etcetera)存放系統配置檔案																											[重點]
    usr  (unix shared resources)用於存放共享的系統資源  																	[重點]
    home 存放使用者檔案的根目錄																														 [重點]
    root  超級使用者目錄																															   [重點]
    dev (devices)用於存放裝置檔案
    lib  (library)存放跟檔案系統中的程式執行所需要的共享庫及核心模組
    mnt  (mount)系統管理員安裝臨時檔案系統的安裝點
    boot 存放用於系統引導時使用的各種檔案
    tmp  (temporary)用於存放各種臨時檔案																							   [重點]
    var  (variable)用於存放執行時需要改變資料的檔案

4. Linux 中常用指令

# Linux 中命令格式:

命令 -選項 引數 如:ls -l /usr

注意:在 Linux 中命令嚴格區分大小寫

4.1 ls 命令

# ls 顯示檔案和目錄列表 (list)

常用引數:  
 -l (long) 長格式顯示檔案和目錄資訊
-a (all) 顯示所有檔案和目錄(包含隱藏檔案和目錄)
-R 遞迴顯示指定目錄下的檔案清單,即會顯示指定目錄分支內各子目錄中的檔案清單。
# 0. ls (檢視目錄下檔案和目錄)
[root@localhost ~]# ls
aa  aa.txt

# 1. ls -l (長格式展示檔案)
[root@localhost ~]# ls -l
總用量 60
drwxrwxr-x      2   user1  user1    4096    Aug 17 09:10 abc
- rw- r-- r--    1   user1  user1    17     Aug 17 09:04 host.conf
- rw- r-- r--    1   user1  user1    38450  Aug 17 09:04 php.ini

`長格式含義:`
檔案型別 檔案許可權   連結數  屬主    屬組    大小   日期   時間    檔名
d     rwxrwxr-x     2     user1  user1 4096  Aug 17 09:10  abc

# 2. ls -a (顯示所有檔案)
[root@localhost ~]# ls -a
.   aa      .bash_history  .bash_profile  .cshrc  .tcshrc
..  aa.txt  .bash_logout   .bashrc        .pki    .viminfo

# 3. ls -R (遞迴顯示檔案)
[root@localhost ~]# ls -R
.:
aa  aa.txt

./aa:

4.2 操作檔案命令[重點]

# 0.cd 用來切換目錄

# 1.pwd 顯示當前工作目錄(print working directory)

# 2.touch 建立空檔案

# 3.mkdir 建立目錄(make directoriy)

    -p 父目錄不存在情況下先生成父目錄 (parents)

# 4.cp 複製檔案或目錄(copy)

    cp  檔名    目錄   複製檔案到指定目錄中
    cp  -r 目錄名    目錄   複製指定目錄到指定目錄中
    	-r 遞迴處理,將指定目錄下的檔案與子目錄一併複製(recursive)

# 5.mv 移動檔案或目錄、檔案或目錄改名(move)

    mv 檔名    新檔名      檔案改名
    mv 檔名    目錄名     	檔案移動
    mv 目錄名    不存在目錄名  目錄改名
    mv 目錄名	  已存在目錄名  目錄移動

# 6.rm 刪除檔案(remove)

    -r 同時刪除該目錄下的所有檔案(recursive)
    -f 強制刪除檔案或目錄(force)

# 7.rmdir 刪除空目錄(remove directoriy)

# 8.cat 顯示文字檔案內容(catenate)用來展示少量內容

# 9.more、less 分頁顯示文字檔案內容 退出用 q 退出

# 10.head、tail 檢視文字中開頭或結尾部分的內容

    head -n 5 a.log 檢視 a.log 檔案的前 5 行

# 11.tail -f b.log 迴圈讀取(fellow)

# 12.echo 輸出命令

    echo I love baby								說明:用來向螢幕輸出一句話
    echo I Love baby >> aa.txt			說明:將這段內容輸入到檔案中

4.3 網路相關命令

# 1.ip addr 檢視 IP 地址

    ip a  簡化寫法

# 2.ping 測試網路連通性

    ping 192.168.0.1

4.4 tar 命令(windows winrar 好壓)

# tar 命令

    -c 建立一個壓縮檔案的引數指令(create)
    -x 解開一個壓縮檔案的引數指令(extract)
    -z 是否需要用 gzip 壓縮
    -v 壓縮的過程中顯示檔案(verbose)
    -f 使用檔名,在 f 之後要立即接檔名(file)

# 通常組合使用:

tar -cvf aaa.tar file1.txt file2.txt 將 file1 和 file2 打包成 aaa.tar
tar -zcvf aaa.tar.gz file1.txt file2.txt 將 file1 和 file2 打包成 aaa.tar 並壓縮
tar -zxvf aaa.tar.gz file1.txt file2.txt 將 aaa.tar.gz 解壓

4.5 systemctl 服務命令

# systemctl

systemctl status|start|stop|restart 服務名 mysqld firewalld(防火牆) network(網路)

systemctl status 服務名 說明:檢視某個服務的執行狀態
systemctl start 服務名 說明:啟動某個服務
systemctl restart 服務名 說明:重啟某個服務
systemctl stop 服務名 說明:停止某個服務

4.6 程序相關命令

# 1.ps 詢在當前控制檯上執行的程序

ps -aux 說明:查詢系統中所有執行的程序,包括後臺程序,其中引數 a 是所有程序,引數 x 包括不佔用控制檯的程序,引數 u 顯示使用者。
ps -ef 說明:查詢系統中所有執行的程序,包括後臺程序,而且可以顯示出每個程序的父程序號。

ps -aux|grep 程序 服務名 關鍵字 Tomcat 重點

# 2.top 命令 動態顯示系統程序

# 3.kill 殺死程序

kill 3029 說明:上述命令中 3029 是程序號;一般在執行 kill 命令之前,先用 ps 或 pstree 來查詢一下將要被殺掉的程序的程序號。
kill -9 3029 說明:強制終止 3029 號程序的執行,其中引數 -9 代表強制的意思,實際上 kill 命令是向該程序傳送訊號,該程序接到訊號後決定是否停止執行,有些守護程序必須要收到引數 9 才終止執行。

4.7 vi 命令

vi/vim 是 Unix/Linux 上最常用的文字編輯器而且功能非常強大。

# 常用命令:

i 在游標前插入
I 在游標當前行開始插入
a 在游標後插入
A 在游標當前行末尾插入
o 在游標當前行的下一行插入新行
O 在游標當前行的上一行插入新行
----------------重點---------------------------
:set nu 顯示行號
:set nonu 取消行號
gg 到文字的第一行
G 到文字的最後一行
:n 到文字的第 n 行
------------------重點-------------------------
u undo,取消上一步操作
Ctrl + r redo,返回到 undo 之前
-------------------重點------------------------
Shift+ zz 儲存退出,與“:wq”作用相同
:q 退出不儲存
:q! 強制退出不儲存
:wq 儲存退出
:wq! 強制儲存退出

4.8 軟體相關命令

RPM 命令:是 RedHat Package Manager(RedHat 軟體包管理工具)的縮寫,這一檔案格式名稱雖然打上了 RedHat 的標誌,但是其原始設計理念是開放式的,現在包括 RedHat、CentOS、SUSE 等 Linux 的分發版本都有采用,可以算是公認的行業標準了。RPM 檔案在 Linux 系統中的安裝最為簡便。

# rpm 命令

常用引數:
i:安裝應用程式(install)
e:解除安裝應用程式(erase)
vh:顯示安裝進度;(verbose hash)
U:升級軟體包;(update)
qa: 顯示所有已安裝軟體包(query all)

## 例子:rmp -ivh gcc-c++-4.4.7-3.el6.x86_64.rpm

安裝命令:
rpm -ivh xxxx.rpm
rpm -evh xxxx.rpm
rpm -Uvh xxx.rpm
rpm -qa

YUM 命令:Yum(全稱為 Yellow dog Updater, Modified)是一個在 Fedora 和 RedHat 以及 SUSE、CentOS 中的 Shell 前端軟體包管理器。基於 RPM 包管理,能夠從指定的伺服器自動下載 RPM 包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。

例子:
yum install gcc-c++
yum remove gcc-c++
yum update gcc-c++

yum install|remove|update 依賴名稱

注意:使用 YUM 命令必須連線外部網路

4.9 使用者和組相關命令

# 1.檢視當前使用者:whoami

# 2.檢視登入使用者:who

-m 或 am I 只顯示執行 who 命令的使用者名稱、登入終端和登入時間
-q 或 --count 只顯示使用者的登入賬號和登入使用者的數量

# 3.退出使用者:exit

# 4.新增、刪除組賬號:groupadd、groupdel

# 5.新增使用者賬號:useradd

-g 指定組名稱 說明:如果建立使用者的時候,不指定組名,那麼系統會自動建立一個和使用者名稱一樣的組名。

# 6.設定使用者密碼:passwd  [使用者名稱]

# 7.su 切換使用者

    su  root

4.10 許可權相關命令

Linux 檔案有三種典型的許可權,即 r 讀許可權、w 寫許可權和 x 執行許可權。在長格式輸出中在檔案型別的後面有 9 列許可權位,實際上這是針對不同使用者而設定的。r=4,w=2,x=1.

# chmod

all = user + group + other
chmod u+rwx,g+rwx,o+rwx 檔名
字母法:chmod u/g/o/a +/-/= rwx 檔案
[u/g/o/a] 含義
u user 表示該檔案的所有者
g group 表示與該檔案的所有者屬於同一組( group )者,即使用者組
o other 表示其他以外的人
a all 表示這三者皆是

[ +-= ] 含義

-     						增加許可權

*     						撤銷許可權
  = 設定許可權

rwx 含義
r read 表示可讀取,對於一個目錄,如果沒有 r 許可權,那麼就意味著不能透過 ls 檢視這個目錄的內容。
w write 表示可寫入,對於一個目錄,如果沒有 w 許可權,那麼就意味著不能在目錄下建立新的檔案。
x excute 表示可執行,對於一個目錄,如果沒有 x 許可權,那麼就意味著不能透過 cd 進入這個目錄。

數字法: 4 讀 2 寫 1 執行
chmod 777 檔名

5. CRT 終端操作

# 0.準備工作

    安裝 CRT 客戶端工具:WinScp工具

# 1.設定 Linux 獲取 ip 地址 (編輯網路配置檔案)

    vi /etc/sysconfig/network-scripts/ifcfg-ens33

# 2.修改 ens33 配置檔案

    BOOTPROTO=dhcp
    ONBOOT=yes

# 3.重啟啟動網路服務載入修改配置生效

    systemctl restart network

# 4.檢視 ip 地址

    ip addr

# 5.此時 ip 已經獲取

    ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:07:16:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.202.136/24 brd 192.168.202.255 scope global noprefixroute dynamic ens33
       valid_lft 1459sec preferred_lft 1459sec
    inet6 fe80::b22b:7e01:db87:52fe/64 scope link noprefixroute

# 6.測試外部網路連通(保證宿主機 windows 可以上網前提)

    ping www.baidu.com

# 7.使用 CRT 工具連線

6. 安裝 JDK

6.1 下載 JDK

# 1.下載 jdk

    https://www.oracle.com/technetwork/java/javase/downloads/index.html
    https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

# 2.透過 CRT|WinSCP 工具將 JDK 上傳到 Linux 系統中

6.2 tar 包安裝

# 1.將 JDK 解壓縮到指定目錄

tar -zxvf JDK-8u171-linux-x64.tar.gz -C /usr/
注意:-C 引數是將 JDK 解壓之後檔案放入 usr 目錄中

# 2.進入 JDK 解壓縮目錄檢視

cd /usr/jdk1.8.0_171/

# 3.檢視詳細資訊

[root@localhost jdk1.8.0_171]# ls
bin db javafx-src.zip lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT include jre LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt

# 4.配置環境變數

vi /etc/profile

# 5.在檔案末尾加入如下配置

export JAVA_HOME=/usr/jdk1.8.0_171
export PATH=$PATH:$JAVA_HOME/bin

# 6.載入配置生效

source /etc/profile 載入配置生效
reboot 重啟系統
注意:以上兩個選項選擇任意一個即可 `source` 可以不用重啟立即生效,某些情況下 `source` 無法生效時,可以使用重啟試試。

# 7.測試環境變數

java
javac
java -version

6.3 rpm 包安裝

# 1.安裝 JDK

[root@localhost ~]# rpm -ivh JDK-8u171-linux-x64.rpm
準備中... ################################# [100%]
正在升級/安裝...
1:jdk1.8-2000:1.8.0_171-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...

# 2.搜尋預設安裝位置

[root@localhost ~]# find / -name "java"
/usr/java/jdk1.8.0_171-amd64/bin/java
/usr/java/jdk1.8.0_171-amd64/jre/bin/java

# 3.配置環境變數

vi /etc/profile

# 4.在檔案末尾加入如下配置

export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64/
export PATH=$PATH:$JAVA_HOME/bin

# 5.載入配置生效

source /etc/profile 載入配置生效
reboot 重啟系統
注意: 以上兩個選項選擇任意一個即可 source 可以不用重啟立即生效,某些情況下 source 無法生效時,可以使用重啟試試

# 6.測試環境變數

java
javac
java -version

7. 安裝 Tomcat

# 0.下載 tomcat

http://mirrors.tuna.tsinghua.edu.cn/apache/Tomcat/Tomcat-8/v8.5.46/bin/apache-Tomcat-8.5.46.tar.gz

# 1.透過工具上傳到 Linux 系統中

# 2.解壓縮到 /usr 目錄中

[root@localhost ~]# tar -zxvf apache-Tomcat-8.5.46.tar.gz -C /usr/
-C 用來指定解壓縮的位置

# 3.檢視解壓內容

[root@localhost apache-Tomcat-8.5.46]# ls -l
總用量 124
drwxr-x---. 2 root root 4096 10 月 13 12:27 bin
-rw-r-----. 1 root root 19318 9 月 17 02:19 BUILDING.txt
drwx------. 2 root root 238 9 月 17 02:19 conf
-rw-r-----. 1 root root 5407 9 月 17 02:19 CONTRIBUTING.md
drwxr-x---. 2 root root 4096 10 月 13 12:27 lib
-rw-r-----. 1 root root 57011 9 月 17 02:19 LICENSE
drwxr-x---. 2 root root 6 9 月 17 02:17 logs
-rw-r-----. 1 root root 1726 9 月 17 02:19 NOTICE
-rw-r-----. 1 root root 3255 9 月 17 02:19 README.md
-rw-r-----. 1 root root 7139 9 月 17 02:19 RELEASE-NOTES
-rw-r-----. 1 root root 16262 9 月 17 02:19 RUNNING.txt
drwxr-x---. 2 root root 30 10 月 13 12:27 temp
drwxr-x---. 7 root root 81 9 月 17 02:17 webapps
drwxr-x---. 2 root root 6 9 月 17 02:17 work

# 4.啟動 tomcat

[root@localhost apache-Tomcat-8.5.46]# ./bin/startup.sh

# 5.關閉網路防火牆

systemctl stop firewalld 關閉網路防火牆
systemctl disable firewalld 關閉開機自啟動(永久關閉)

# 6.在 windows 中訪問 Tomcat

http://10.15.0.8:8080/

# 7.顯示 Tomcat 實時控制檯資訊

進入 Tomcat 的 logs 目錄中使用 tail -f catalina.out 命令實時檢視控制檯資訊

# 8.關閉 Tomcat

在 Tomcat 的 bin 目錄下面使用 ./shutdown.sh

8. 安裝 MySQL

8.1 環境準備

# 1.解除安裝 mariadb,否則安裝 MySQL 會出現衝突

# 2.執行命令 rpm -qa | grep mariadb

# 3.列出所有被安裝的 mariadb rpm 包

# 4.執行命令 rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

8.2 本地安裝(5.6 版本預設 root 沒有密碼)

上傳下載好的軟體包到系統中。

# 0.執行本地安裝包之前必須先安裝 vim
yum install -y vim

# 1.安裝步驟
rpm -ivh perl-*
rpm -ivh net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
rpm -ivh mysql-community-common-5.6.42-2.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.6.42-2.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.6.42-2.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.6.42-2.el7.x86_64.rpm

8.3 線上安裝

# 1.新增官方的 yum 源建立並編輯 mysql-community.repo 檔案

vi /etc/yum.repos.d/mysql-community.repo

# 2.貼上以下內容到原始檔中

[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

注意:如果需要安裝 MySQL5.7 只需要將 baseurl 修改即可
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/

# 3.安裝 MySQL

sudo yum install -y mysql-community-server

8.4 設定 root 使用者密碼

# 1.啟動 MySQL 資料庫

[root@localhost mysql]# systemctl start mysqld

# 2.修改 MySQL 資料庫密碼

mysqladmin -u root -p password 回車 輸入原始密碼 在輸入新的密碼
注意:5.7 之前版本安裝完成之後沒有密碼,MySQL5.7 之後的版本的初始密碼是隨機生成的,放在了  /var/log/mysqld.log
使用命令  grep ‘temporary password’ /var/log/mysqld.log  讀出來即可 ROOT!Q2w

# 3.登入 MySQL

[root@localhost mysql]# mysql -u root -p

8.5 開啟遠端訪問

1、安裝完成 MySQL 時,發現 MySQL 資料庫,不允許我們遠端連線,需要修改設定。

2、登入 MySQL,並選擇使用 mysql 資料庫

3、檢視 mysql 庫中的所有表

4、查詢 user 表

5、執行如下命令
grant all privileges on *.* to 'root'@'%' identified by 'ROOT!Q2w' with grant option;

6、重新整理許可權
flush privileges;

7、重啟服務
systemctl restart mysqld

8、測試連線


9. MySQL 主從複製

# 0.架構規劃

192.168.202.201 master 主節點
192.168.202.202 slave 從節點

# 1.修改 mysql 的配置檔案

[root@localhost mysql]# vim /etc/my.cnf

# 2.分別在配置檔案中加入如下配置

mysql(master):
server-id=1
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

msyql(slave):
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
注意:兩個機器的 server-id 不能一致

# 3.重啟 mysql 服務

systemctl restart mysqld

# 4.登入 mysql 執行如下命令檢測配置是否生效

SHOW VARIABLES like 'server_id';
image-20191013201523812
# 5.登入 master 節點執行如下命令

show master status;

# 6.登入從節點執行如下命令:

change master to
master_host='10.15.0.9',
master_user='root',
master_password='root',
master_log_file='mysql-bin.000001',
master_log_pos=120;

# 7.開啟從節點

start slave;
stop slave;

# 8.檢視從節點狀態

show slave status\G;

************\*\************* 1. row ************\*\*\*************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.15.0.9
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 120
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
注意:

1. 出現 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 說明成功
2. 如果在搭建過程出現錯誤,可以檢視檢視錯誤日誌檔案 cat /var/log/mysqld.log

# 9.透過客戶端工具進行測試

# 10.關閉主從複製(在從節點執行)

stop slave;
  • 注意:如果出現 Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593 錯誤,請執行如下命令 rm -rf /var/lib/mysql/auto.cnf 刪除這個檔案,之所以出現會出現這樣的問題,是因為我的從庫主機是克隆的主庫所在的主機,所以 auto.cnf 檔案中儲存的 UUID 會出現重複。

10. 讀寫分離

10.1 MyCat 引言

基於阿里開源的 Cobar 產品而研發,Cobar 的穩定性、可靠性、優秀的架構和效能以及眾多成熟的使用案例使得 MyCat 一開始就擁有一個很好的起點,站在巨人的肩膀上,我們能看到更遠。

業界優秀的開源專案和創新思路被廣泛融入到 MyCat 的基因中,使得 MyCat 在很多方面都領先於目前其他一些同類的開源專案,甚至超越某些商業產品。

MyCat 背後有一支強大的技術團隊,其參與者都是 5 年以上資深軟體工程師、架構師、DBA 等,優秀的技術團隊保證了 MyCat 的產品質量。MyCat 並不依託於任何一個商業公司,因此不像某些開源專案,將一些重要的特性封閉在其商業產品中,使得開源專案成了一個擺設。

10.2 安裝 Mycat

# 1.下載 MyCat

http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

# 2.解壓 MyCat

tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

# 3.檢視解壓之後目錄

[root@localhost mycat]# ls
總用量 12
drwxr-xr-x. 2 root root 190 10 月 14 22:58 bin
drwxrwxrwx. 2 root root 6 3 月 1 2016 catlet
drwxrwxrwx. 4 root root 4096 10 月 14 22:58 conf
drwxr-xr-x. 2 root root 4096 10 月 14 22:58 lib
drwxrwxrwx. 2 root root 6 10 月 28 2016 logs
-rwxrwxrwx. 1 root root 217 10 月 28 2016 version.txt

# 4.移動到 /usr 目錄

mv mycat/ /usr/

# 5.配置 MyCat 中 conf 下的配置 schema.xml
<!-- 定義MyCat的邏輯庫  -->
<schema name="test_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode"></schema>
<!-- 定義MyCat的資料節點 -->
<dataNode name="testNode" dataHost="dtHost" database="test" />
<dataHost name="dtHost" maxCon="1000" minCon="10" balance="1"
			writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">
			<heartbeat>select user()</heartbeat>
			<!--寫節點-->
			<writeHost host="hostM1" url="192.168.28.128:3306" user="root"
					password="root">
					<!--從節點-->
						<readHost host="hostS1" url="192.168.28.129:3306" user="root" password="root" />
			</writeHost>
</dataHost>
# 6.配置登陸 MyCat 的許可權 server.xml
<system>
  <!-- 這裡配置的都是一些系統屬性,可以自己檢視mycat文-->
  <property name="defaultSqlParser">druidparser</property>
  <property name="charset">utf8mb4</property>
</system>

<user name="root">
  <property name="password">root</property>
  <property name="schemas">test_schema</property>
</user>
# 7.啟動 MyCat

./mycat console

# 8.檢視日誌

tail -f ../logs/mycat.log

# 9.資料庫連線配置,測試

11. 安裝 Nginx

11.1 Nginx 引言

Nginx是一款輕量級Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個 BSD-like 協議下發行。

由俄羅斯的程式設計師 Igor Sysoev 所開發,供俄國大型的入口網站及搜尋引擎 Rambler(俄文:Рамблер)使用。其特點是佔有記憶體少,併發能力強,事實上 Nginx 的併發能力確實在同型別的網頁伺服器中表現較好。

11.2 Nginx 安裝

# 0.安裝必要依賴

yum install -y gcc pcre-devel zlib-devel

# 1.下載 Nginx

http://nginx.org/en/download.html

# 2.將 Nginx 上傳到 Linux 中並解壓縮

tar -zxvf nginx-1.11.1.tar.gz

# 3.檢視 Nginx 安裝目錄

[root@localhost nginx-1.11.1]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src

# 4.在 Nginx 安裝目錄中執行如下命令:(指定安裝位置)

./configure --prefix=/usr/nginx

# 5.執行上述命令後,執行如下命令:

make && make install

# 6.編譯完成後進入編譯安裝目錄 /usr/nginx 目錄中檢視:

[root@localhost nginx]# ls -l
總用量 4
drwxr-xr-x. 2 root root 4096 10 月 14 21:17 conf
drwxr-xr-x. 2 root root 40 10 月 14 21:17 html
drwxr-xr-x. 2 root root 6 10 月 14 21:17 logs
drwxr-xr-x. 2 root root 19 10 月 14 21:17 sbin

# 7.啟動 Nginx,進入 Nginx 安裝目錄的 sbin 目錄中執行:

./nginx

# 8.在 windows 中瀏覽器訪問,可以看到 Nginx 歡迎頁面:

http://10.15.0.8:80/
注意:關閉網路防火牆。

# 9.關閉 Nginx,進入 Nginx 安裝目錄的 sbin 目錄中執行:

./nginx -s stop

# 10.Nginx 配置檔案在 Nginx 安裝目錄的 conf 目錄中:

[root@localhost conf]# ls -l
總用量 60
-rw-r--r--. 1 root root 2656 10 月 14 21:17 nginx.conf
.......

注意:nginx.conf 為 Nginx 的配置檔案,可以在 nginx.conf 修改 Nginx 預設配置。

12. Tomcat 負載均衡叢集

12.1 Tomcat 叢集

# 0.準備多個 Tomcat

tar -zxvf apache-Tomcat-8.5.46.tar.gz #解壓縮一個新的 tomcat 安裝包
mv apache-Tomcat-8.5.46 tomcat1 #將名稱改為 tomcat1
cp -r tomcat1/ tomcat2 #複製一份
cp -r tomcat1/ tomcat3 #複製一份

# 1.此時當前目錄中有三個伺服器,如下:

[root@localhost ~]# ls -l
總用量 12248
-rwxrwxrwx. 1 root root 11623939 10 月 13 12:25 apache-Tomcat-8.5.46.tar.gz
drwxr-xr-x. 9 root root 220 10 月 14 21:28 tomcat1
drwxr-xr-x. 9 root root 220 10 月 14 21:38 tomcat2
drwxr-xr-x. 9 root root 220 10 月 14 21:38 tomcat3
# 2.修改 tomcat1 埠號:(偽分散式)

vim tomcat1/conf/server.xml

命令修改如下內容:
a.<Server port="8001" shutdown="SHUTDOWN"> ---關閉埠
b.<Connector port="8888" protocol="HTTP/1.1" ---http 協議埠
connectionTimeout="20000"
redirectPort="8443" />
c.<Connector port="10010" protocol="AJP/1.3" redirectPort="8443" /> ---AJP 協議埠
# 3.修改 tomcat2 埠號:(偽分散式)

vim tomcat2/conf/server.xml

命令修改如下內容:
a.<Server port="8002" shutdown="SHUTDOWN">
b.<Connector port="8889" protocol="HTTP/1.1"
		connectionTimeout="20000"
		redirectPort="8443" />
c.<Connector port="10011" protocol="AJP/1.3" redirectPort="8443" />
# 4.修改 tomcat3 埠號:(偽分散式)

vim tomcat2/conf/server.xml
命令修改如下內容:
a.<Server port="8003" shutdown="SHUTDOWN">
b.<Connector port="8890" protocol="HTTP/1.1"
		connectionTimeout="20000"
		redirectPort="8443" />
c.<Connector port="10012" protocol="AJP/1.3" redirectPort="8443" />
# 5.將多個 Tomcat 啟動:

tomcat1/bin/startup.sh
tomcat2/bin/startup.sh
tomcat3/bin/startup.sh

# 6.檢視 Tomcat 是否啟動成功

ps -aux|grep Tomcat

# 7.在 Windows 中分別訪問 Tomcat,都看到主頁代表啟動成功:

http://10.15.0.8:8888/
http://10.15.0.8:8889/
http://10.15.0.8:8890/

注意:這步一定要關閉網路防火牆。
# 8.將多個 Tomcat 配置到 Nginx 的配置檔案中:

1、在 server 標籤上加入如下配置:
upstream Tomcat-servers {
server 10.15.0.8:8888;
server 10.15.0.8:8889;
server 10.15.0.8:8890;
}

2、將配置檔案中 location / 替換為如下配置:
location / {
proxy_pass http://Tomcat-servers;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}

# 9.進入 Nginx 安裝目錄 sbin 目錄啟動 Nginx

./nginx -c /usr/nginx/conf/nginx.conf
# 10.訪問 Nginx,看到其中一個 Tomcat 畫面:

http://10.15.0.8/

12.2 Nginx 負載均衡策略

# 1.輪詢

說明: 預設策略,每個請求會按時間順序逐一分配到不同的後端伺服器

# 2.weight 權重

說明:weight 引數用於指定輪詢機率,weight 的預設值為 1,weight 的數值與訪問比率成正比
upstream Tomcat-servers {
server localhost:8080 weight=2;  
 server localhost:8081;  
 server localhost:8082 backup;  
}
注意:1.權重越高分配到需要處理的請求越多。2.此策略可以與 least_conn 和 ip_hash 結合使用主要用於後端伺服器效能不均。

# 3.ip_hash 4%3=1

說明:指定負載均衡器按照基於客戶端 IP 的分配方式,這個方法確保了相同的客戶端的請求一直髮送到相同的伺服器,以保證 session 會話。這樣每個訪客都固定訪問一個後端伺服器,可以解決 session 不能跨伺服器的問題。
upstream Tomcat-servers {
ip_hash; #保證每個訪客固定訪問一個後端伺服器
server localhost:8080;
......
}

# 4.least_conn

說明:把請求轉發給連線數較少的後端伺服器。輪詢演算法是把請求平均的轉發給各個後端,使它們的負載大致相同;但是,有些請求佔用的時間很長,會導致其所在的後端負載較高。
這種情況下,least_conn 這種方式就可以達到更好的負載均衡效果。
upstream Tomcat-servers{
least_conn; #把請求轉發給連線數較少的後端伺服器
server localhost:8080;
}

13. MSM 配置

Memcached Session Manager 基於 MemCache 快取的 session 共享。
即使用 CacheDB 存取 session 資訊,應用伺服器接受新請求將 session 資訊儲存在 CacheDB 中,當應用伺服器發生故障時,排程器會遍歷尋找可用節點,分發請求,當應用伺服器發現 session 不在本機記憶體時,則去 CacheDB 中查詢,如果找到則複製到本機,這樣實現 session 共享和高可用。

# 0.準備一個 MemCache 服務

# 1.安裝 memcached

yum install -y memcached

# 2.啟動 memcached

memcached -p 11211 -vvv -u root

# 3.Tomcat 安裝的 lib 目錄中放入與 MemCache 整合 Jar 包

cp _.jar tomcat1/lib
cp _.jar tomcat2/lib
cp \*.jar tomcat3/lib

# 4.配置 Tomcat 目錄中 conf 目錄中 context.xml(所有 Tomcat 均需要配置)

<Context>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
	memcachedNodes="n1:10.15.0.8:11211"
	sticky="false"  
		sessionBackupAsync="false"  
	requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
	transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
	/>
</Context>

# 5.放入測試專案進行測試