printenv 查看環境
hash 查看緩存命令
clock /hwclock/date 查看時間
help + command 得到幫助 command --help / man command
用戶命令(/bin,/usr/bin,/usr/local/bin)
管理命令(/sbin;/usr/sbin/;/usr/local/sbin)
<>:必選
[]:可選
… 能夠出現多個
|:多選一
{}:分組 沒有特殊意義
向後翻一屏:space
向前翻一屏: b
向後翻一行:enter
向前翻一行:k
查找:
/keyword :向後
n:下一個
N:前一個
?keyword :向前
n:下一個
N:前一個
文檔 /usr/share/doc
type 查看是內部命令仍是外部命令
/boot 系統啓動相關文件
/dev 設備文件
/ect 配置文件
/home 用戶的家目錄
/root 管理員的家目錄
/lib 庫文件
靜態庫 .a
動態庫 .dll .so
/lib/modules內核 模塊文件
/media掛載點目錄 移動設備
/mnt 掛載點目錄 額外的臨時的文件系統
/misc 雜項
/opt 可選目錄,第三方程序安裝目錄
/proc 僞文件系統,內核映射文件
/sys 僞文件系統,跟硬件設備相關的屬性映射文件
/tmp :臨時文件
/var :可變化的文件
/bin 可執行文件,用戶命令
/sbin 管理命令
/usr 全局共享只讀文件
目錄管理
ls cd pwd
mkdir 建立空目錄
-p 遞歸建立
-v 詳細信息
mkdir /tmp/{x,m,y} 建立多個目錄
{a,d}_{b.c} 建立a_b,a_c,d_b,d_c
rm rmdir
stat 顯示文件的信息
touch 建立文件 ,主要是改時間戳
nano 編輯軟件
複製和移動文件
cp src (源) dest(目標)
mv
install 和mv 和cp 相似
file 查看文件是目錄仍是文件
tree 查看樹目錄
查看文本
cat tac more less head tail
tail – f 查看文件尾部,不退出,等待顯示後續追加到這個文件的新內容 能夠監控日誌
文本處理:
cut/join/sed
cut
-d 指定字段分隔符,默認是空格
-f 指定要顯示的字段
-f 1,3
-f 1-3
文本排序: sort uniq
文本統計: wc
字符處理命令:tr -- 轉換或刪除字符
history 查看歷史
-c 清空歷史
環境變量
PATH : 命令搜索路徑
HISTSIZE :命令歷史緩衝區大小
命令歷史的使用技巧:
!n 執行命令歷史中的第n條命令
!-n 執行命令歷史中的倒數第n條命令
!!:執行上一條命令
!string :執行命令歷史中最近一個以指定字符串開頭的命令
alias cls = clear 給命令起別名
unalias 取消別名
bash 支持的引號:
`` 命令替換
「」弱引用,能夠實現變量替換
‘’強引用,不完成變量替換
文件名通配:globbing
/etc/passwd whatis passwd man 5 passwd
account:登陸名
password:密碼
UID
GID:基本組id
comment 註釋
HOME DIR :家目錄
SHELL : 用戶的默認shell
/etc/shadow
account:登陸名
encrypted password :加密的密碼
管理員:0
普通用戶:1-65535
系統用戶:1-499
通常用戶:500-60000
which useradd
ls -l $(which useradd ) 或 ls –l `which useradd` 命令替換
useradd USERNAME
passwd USERNAME
groupadd GROUPNAME
用戶管理:
useradd,userdel,usermod,passwd,chsh,chfn,finger,id,chage
/etc/shells :指定了當前系統可用的安全shell
id:查看用戶的帳號屬性信息
usermod:修改用戶帳號信息
chsh:修改用戶的shell信息
chfn:修改註釋信息
密碼管理:
passwd [USERNAME]
pwck 檢查用戶帳號的完整性
組管理:
groupadd,groupdel,groupmod,gpasswd
權限管理:
chown,chgrp,chmod,umask
chown 改變用的屬主(只有管理員可使用此命令)
#chown USERNAME FILE …
chgrp 改變文件屬組
#chown USERNAME:GROUPNAME file…
chmod :修改文件的權限
#chmod MODE file
修改某類用戶或某些用戶權限
u,g,o,a
chmod 用戶類別=MODE file…
修改某類用戶的某位或某些位權限
u,g,o,a
chmod 用戶類別+|-MODE file ..
# chmod u+x,g-x /mnt/hello.txt
bc 是計算器
手動加密碼
#openssl passwd
#whatis passwd
#man sslpasswd
#openssl passwd -1 -salt ‘123456’
umask 遮罩碼 管理員022 普通用戶 002
666-umask 文件
777-umask 目錄
文件默認不能有執行權限,若是算的的結果有執行權限,則將其權限加1
bash的配置文件:
全局配置:
/etc/profile,/etc/profile.d/*.sh,/etc/bashrc
我的配置:
~/.bash_profile ,~/.bashrc
profile 類的文件
設定環境變量
運行命令或腳本
bashrc 類的文件
設定本地變量
定義命令別名
登陸式shell 如何讀取配置文件?
/etc/profile -> /etc/profile.d/*sh->~/.bash_profile->~/.bashrc-->/etc/bashrc
非登陸式shell如何配置文件?
~/.bashrc /ect/bashrc /ect/profile.d/*.sh
i/o 重定向
>:覆蓋輸出
>>:追加輸出
set -C:禁止對已經存在文件使用覆蓋重定向 強制覆蓋則使用>|
set +C 關閉上述功能
2> :重定向錯誤輸出
2>>:追加方式
&>:重定向標準輸出或錯誤輸出至同一個文件
<:輸入重定向
tee:
練習:
1.統計/usr/bin 目錄下的文件個數
#ls /usr/bin | wc –l
2 取出當前系統上全部用戶的shell ,要求,每種shell 只顯示一次,並按順序進行排序
#cut –d :-f7 /ect/passwd | sort -u
3.思考:如何顯示/var/log 目錄下每一個文件的內容類型
#file /var/log
4.取出/etc/inittab 文件的第6行
#head -6 /ect/inittab | tail -l
5 取出/ect/passwd 文件中倒數第9個用戶的用戶名和shell,顯示到屏幕上並將其保存至/tmp/users文件中
#tail -9 /etc/passwd | head -1 | cut –d:-f1,7 | tee /tmp/users
6顯示/etc 目錄下全部以pa開頭的文件,並統計其個數
#ls -d /ect/pa* | wc -l
7 不使用文本編輯起,將alias cls = clear-行內容添加到當前用戶的.bashrc文件中
# echo 「alias cls = clear」 >>~./bashrc
grep ,egrep ,fgrep
grep :根據模式搜索文本,並將符合模式的文本顯示出來
bash 腳本編寫
本地變量
VARANME = VALUE :做用域爲當前代碼段
局部變量:
local VARNAME = VALUE :做用於爲當前代碼段
環境變量:做用域爲當前shell 進程及其子進程:
export VARNAME=VALUE
條件判斷
if 判斷條件 ;then
…
else
…
fi
練習
給定一個用戶:
1 若是uid 爲 0 , 就顯示此管理員
2 不然,就顯示其爲普通用戶
1 #!/bin/bash
2 NAME=user1
3 UID=`id -u $NAME`
4 if [ $UID -eq 0 ]; then
5 echo "Admin"
6 else
7 echo "user"
8 fi
ehco $? 結果 0
練習:
給定一個用戶,判斷其UID和GID是否同樣
若是同樣,就顯示1,不同顯示2
#USERNAME=user1
#USERID=`id –u $USERNAME`
#GID=`id -g $USERNAME`
shell 中算術運算
1 let 算術運算表達式
a = 3
b=6
let c = $a+$b
2 $[算術運算表達式]
c=$[$A+$b]
3 $((算術運算表達式))
Exit 退出腳本
bash測試:
整數測試 : [ expression ] [[ expression ]]
-gt -le –ne –eq –ge –lt
文件測試:
-e FILE 文件是否存在
-f FILE 文件是不是普通文件
-d FILE 文件是否爲目錄
-r FILE 文件是否有讀權限
-w FILE 文件是否有寫權限
-x FILE 文件是否有執行權限
多分支語句:
if 條件;then
elif 條件;then
else
fi
測試bash 是否有語法錯誤
bash –n bash文件
bash -x 測試執行流程
bash變量:
本地變量(局部變量)
環境變量
位置變量:$1,$2
特殊變量:
$?
$# 參數的個數
$* 參數列表
$@
練習:
接收一個參數(文件路徑)
判斷參數若是是一個文件輸出‘file’
if [ $# -eq 0 ]; then
echo "need param"
exit
fi
if [ -e $1 ];then
echo 'ok'
else
echo 'err'
fi
sed (流編輯器):
sed 基本用法:
sed ‘地址’ ‘文件’
address
1.起始行 – 結束行
a)好比1,100 $$ 表示最後一行
2.、/RegExp/
直接用模式定義
3./pattern1/、/pattern2/
第一次被pattern1 匹配到的行開始,到2結束
4.Linenumber 指定的行
命令
d:刪除符合條件的行 #sed '1,5d' /etc/fstab
p:顯示符合條件的行
a : \string 指定的行的後面追加新行 ,內容爲‘string’
i:\string 指定的行的前面添加新行,內容爲string
r FILE :將指定的文件內容添加至符合條件的某處
w FILE: 將地址指定的範圍內行另存至指定的文件中
s /pattern/string/:查找並替換
sed命令練習:
1.刪除/etc/grub.conf文件中行首的空白字符;
sed -r 's@^[[:space:]]+@@g' /etc/grub.conf
2.替換/etc/inittab文件中「id:3:initdefault:」一行中的數字爲5
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/grub.conf
3.刪除/etc/inittab文件中的空白行
sed '/^$/d' /etc/inittab
4.刪除文件中的#號
sed 's@^#@@g' /etc/inittab
5.刪除某文件中的#號及後面空白字符,但要求#號後面必需要有空白字符
sed -r 's@^#[[:space:]]+@@g' /etc/inittab
6.刪除某文件中以空白字符後面跟#類的開頭的空白字符及#
sed -r 's@^#[[:space:]]+@@g' /etc/inittab
7.取出一個文件路徑的目錄名稱
echo "/etc/rc.d" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
如何生成列表:
1.{1.100}
2.seq 起始數 ,步進數 ,結束數
vim 編輯器:
寧、打開文件
1.vim +# :打開文件,並定位第#行
2.vim +:打開文件,到最後一行
3.vim +/PATTERN:打開文件,地位第一次被匹配到的行首
랗、模式
1.編輯模式
2.末行模式
3.輸入模式
編輯—》輸入:i鍵 a鍵 o鍵 I / A / O
3、移動光標
1.H:左 L:右 J:下 K:上
2.按照單詞爲單位移動,
w:移動至下一個單詞詞首
e: 移動至下一個單詞詞尾
b: 移動至下一個單詞詞首
3.行內跳轉
0 絕對行首 ^ 行首的非空白字符 s:絕對行尾
4.整段
末行模式下 直接輸行號
4、翻屏
ctrl+f 向下翻一屏
ctrl+b: 向上翻一屏
ctrl+d: 向下翻半屏
ctrl+u: 向上翻半屏
5、粘貼 p
p: 若是刪除的或複製的爲整行內容,則粘貼至光標所在行的下方,若是非整行,則粘貼至光標所在行的後面
P: 若是刪除的或複製的爲整行內容,則粘貼至光標所在行的上方,若是非整行,則粘貼至光標所在行的前面
6、複製命令 y 和d 同樣
7、修改 ,c 和 d 同樣
8、撤銷 ,u ,撤銷剛纔的撤銷操做,ctrl+r
9、V 是光標滑過的全部都選中
10、查找 /PATTER ?PATTER n/N
11、打開多個文件 vim file1 file2 .. 退出 :qa
切換 在末行模式下 輸入:next 下個文件 :prev 上個文件 :last 最後一個文件 :first 第一個
12、分屏模式
ctrl+w , s 水平拆分窗口
ctrl+w , V 垂直拆分窗口
在窗口鍵切換 ctrl+w , 方向鍵
十3、和shell 交互 :! Shell命令
十4、顯示
1.顯示或取消行號
:set nu :set nonu
2.設置自動縮進
:set ai :set noai
組合測試:
-a : 與關係
-o : 或關係
! : 取反
寫法: if [ $# -gt 1 -a $# -le 3 ] 或 if [ $# -gt 1 ] && [ $# -le 3 ]
文件查找:
locate:非實時的,查找是根據全系統文件數據庫進行的
find:
查找路徑:默認當前目錄
查找標準:默認指定路徑下的全部文件
處理運做:默認顯示
匹配標準:
-name path -name file 例子: find /etc/ -name 'passwd'
文件名統配:
*:任意長度的任意字符
?:
[]
-iname ‘FILENAME’ : 文件名不區分大小寫
-regex PATH : 基於正則表達式
-user USERNAME: 基於用戶查找
-group GROUPNAME : 根據所屬組查找
-uid UID :根據UID 查找
-gid GID : 根據GID 查找
-nouser :查找沒有數組的文件
-type : 根據文件類型查找
f:普通文件 d s c l p
-size :根據大小查找
[+|-]#k / #M
組合條件:
-a -o -not
日期時間:
-mtime
-ctime
-atime
[+|-] find / -amin -5 5分鐘以內訪問的文件
運做:
--print 顯示
--ls : 顯示細節
--ok : command \; 結束 {} 做爲名稱佔位符
find ./ -perm -006 –exec chmod o-w {} \;
-exec command {} \;
特殊權限
SUID : 運行某程序時,相應進程的屬主是程序文件自身的屬主,而不是啓動者
Chmod u+s FILE
Chmod u-s FILE
若是FILE文件原本就有執行權限,則UUID顯示爲S,不然顯示爲S
SGID:運行某程序時,相應進程的屬組是程序文件自身的屬組,而不是啓動者所屬的基本組
Chmod g+s FILE
Chmod g-s FILE
例子:
#useradd hbase
#useradd hive
#groupadd developteam
#usermod -a -G developteam hbase
#usermod -a -G developteam hive
#mkdir project
#chown :developteam project
#chmod g+s project/
#chmod –R +w prject
#chmod o+t project
Sticky:在一個公共目錄,每一個人均可以建立文件,刪除本身的文件,但不能刪除
別人的文件
Chmod o+t DIR
Chmod o-t DIR
磁盤管理:
ls [ -s -v] SRC DEST
硬件鏈接:
只能對文件建立,不能應用於目錄
不能跨文件系統
建立硬連接會增長文件被鏈接的次數
符號鏈接:
能夠應用目錄
能夠跨文件系統
不會增長被鏈接文件的鏈接次數
其大小爲指定的路徑所包含的文件的個數
du :顯示 文件的大小 –s / -h
df:顯示整個磁盤分區的使用狀況
設備文件:
b:按塊爲單位,隨機訪問的設備 表明:硬盤
c:按字符爲單位,線性設備表明:鍵盤
/dev
主設備號:標示設備類型
次設備號:標示同一種設備類型的不一樣設備
mknod 建立設備
硬盤設備的設備文件名:
IDE:
第一個IDE口,主,從
/dev/hda,/dev/hdb
第二個IDE口,主,從
/dev/hdc,/dev/hdd
hda:
hda1:第一個主分區
hda2:
fdisk:查看當前系統識別了幾個模塊
fdisk –l [/dev/to/some_dev]
管理磁盤分區:
fdisk /dev/sda
p:顯示當前硬件的分區,包括沒保存的改動
n:建立新分區
e:擴展分區
p:主分區
d:刪除一個分區
w:保存退出
q:不保存退出
t:修改分區類型
l:顯示全部支持的類型
cat /proc/partitions 查看分區名稱
partprobe 更新下分區名稱
建立分區:
fdisk -l
fdisk /dev/sda
cat /proc/partitions
partx -l /dev/sda
mkfs : make file system
-t
mkfs –t ext2 /dev/sda5
mkfs –t ext2 = mkfs.ext2
專門管理ext系列文件:
mke2fs
-j:建立ext3類型的文件
-b BLOCK_SIZE:指定塊的大小 ,默認是1024,可設置2048,4096
-l 指定卷標
-m :指定預留給超級用戶的塊數的百分比
-I : 用於指定爲多少字節空間建立一個inode,默認爲8192,這裏給出的數值應該爲塊大小的2^n倍
-N :指定inode個數
-F : 強制建立文件系統
-E:用戶指定額外文件系統屬性
blkid: 查詢或查看磁盤上的uuid 相關屬性
e2label :用於查看或定義卷標
tune2fs:調整文件系統的相關屬性
文件系統是要有類型的 :ext2,ext3
cat /proc/filesystems :查看當前內核支持的文件類型
dumpe2fs : 顯示文件屬性信息
-h:只顯示超級塊中的信息
fsck:檢查並修復linux 文件系統
-a :自動修復
e2fsck : 專用於修復ext2/ext3文件系統
-f : 強制升級
-p: 自動修復
將新的文件系統 ,關聯至當前根文件系統,叫作掛載
將某文件系統,從當前根系統關係移除,叫卸載
mount 設備 掛載點 mount /dev/sda5 /mnt/guazai/
-a : 表示掛載/etc/fstab/文件中定義的全部文件系統
-n: 默認狀況下,mount 命令每掛載一個設備,都會把掛載的設備信息保存至、
etc/mtab 文件,使用-n選項意味着掛載設備時,不把信息寫入文件
-o loop:掛載本地迴環設備
設備:
設備文件
卷標
uuid
掛載點:目錄
要求:
1.此目錄沒有被其餘進程使用
2.目錄事先存在
3.目錄中的原有文件將會暫時的隱藏
掛載完成後,經過掛載點訪問文件
umount : 卸載某文件系統
umount 設備 或 掛載點
free 查看交換分區
-m
建立交換分區:
fdisk 先調整分區類型爲82
mkswap /dev/sda8
swapon /dev/sda8 掛載交換分區
swapoff /dev/sda8 卸載交換分區
迴環設備
loopback ,使用軟件模擬實現硬件
建立一個鏡像文件
dd命令:
if=數據來源 of=保存的位置
dd if=/dev/zero of=/mnt/swapfile bs=1M count=1024
dd if=/dev/zero of=/mnt/swapfile2 seek=1023 bs=1M count=1
製做iso 磁盤鏡像
cat /dev/cdrom > /root/rhe15.iso
/dev/null 黑洞設備
/dev/zero 吐0設備,能源源不斷的輸出0
文件系統配置文件/etc/fstab
os在初始化時,會自動掛載文件裏面的系統
要掛載的設備 掛載點 文件系統類型 掛載選項 轉儲頻率 自檢次序
/dev/sda5 /mnt/test ext4 defaults 0 0
mount –a : 掛載/etc/fstab 文件中定義的全部文件系統
fuser -v /mnt/guzai 查看誰正在訪問這個文件
fuser :驗證進程正在使用的文件或套結字
-v 查看文件上正在運行的進程
fuser –km MOUNT_POINT 終止訪問此掛載點的全部進程
壓縮及壓縮命令:
gzip :.gz
gzip /PATH/TO/SOMEFILE :壓縮完以後會刪除原文件
-d 至關於gunzip
gunzip :
gunzip /PATH/TO/SOMEFILE :壓縮完以後會刪除原文件
bzip2 : 比着 gzip 有着更大壓縮比
xz /PATH/TO/SOMEFILE
zip : 即歸檔又壓縮
archive:歸檔
tar: 歸檔不壓縮 .tar
-c : 建立歸檔文件
-f file.tar : 操做的歸檔文件
-x :展開歸檔
-t : 顯示歸檔裏面的文件,不展開歸檔
--xattrs:歸檔時,保留文件的擴展性信息
-zxf: gz解壓並展開歸檔
-zcf: 調用GZ歸檔並壓縮
cpio : 歸檔工具
read : 輸入交互內容
-p 「PROMPT」 :給出提示
while循環:
while CONDITION;do
done
RAID
級別:僅表明磁盤組織方式不一樣,沒有上下之分
條帶
性能提高:讀寫
冗餘能力:無
鏡像
性能提高:讀性能提高,寫性能降低
空間利用率:1/2
3
4 校驗碼
5
性能表現:讀,寫提高
冗餘能力:有
空間利用率:(n-1)/n
10
01
jbod
md:
mdadm:將任何設備作成RAID
模式化的命令:
建立模式
-C
專用選項:
-1 : 級別
-n : 設備個數
-a : 自動爲其建立設備文件
-c : 指定數據塊chunk大小
-x :指定空閒盤設備個數
管理模式
--add,--DEL
mdadm /dev/md# --fail /dev/sda7
監控模式
-F
增加模式
-G
裝配模式
-A
RAID0:
2G
建立raid0鏡像環境:
準備幾個分區
mount
fdisk –l 查看分區
fdisk 建立分區
創鍵兩個1G ,而後調整爲fd
cat /proc/partitions
partx -l /dev/sda
重啓下計算機,執行
mdadm –C /dev/md0 –a yes –l 0 –n 2 /dev/sda{5,6}
cat /proc/mdstat
mke2fs /dev/md0 格式化md0
mount /dev/md0 /mnt/ 掛載
建立raid0 軟件鏡像 環境
fdisk /dev/sda
n +2G 建立3個2G的分區
t 7,8,9 fd 格式化成fd raid 格式
w 保存
cat /proc/partitions
partx -l /dev/sda
重啓下計算機,執行
mdadm --create --level=1 --raid-devices=2 -a yes --metadata=0.90 /dev/md1 /dev/sda{7,8}
cat /proc/mdstat
mke2fs /dev/md1 格式化md1
mount /dev/md0 /mnt/ 掛載
unmount /media/ 卸載掛載
模擬損壞鏡像md1
mdadm –-detail /dev/md1 顯示磁盤的狀態
mdadm /dev/md# --fail /dev/sda7 模擬順壞磁盤
mdadm /dev/md1 --remove /dev/sda7 移除換掉的磁盤
mdadm /dev/md1 --add /dev/sda9 更換換掉的,添加一塊新盤
在增長一塊盤做爲 備份盤,若是其中一塊盤壞了,就自動補上
mdadm /dev/md1 --add /dev/sda7
中止陣列: mdadm –S /dev/md#
watch 監控狀態,週期性的指定命令,顯示全屏結果
watch ‘cat /proc/mdstat’
mdadm -D -scan 顯示 當前raid設備的信息
mdadm -D -scan > /etc/mdadm.conf 讀取到配置文件,以後開機時就會自動讀取該信息
lsmod :列出模塊
mdadm : 只是個管理工具
MD: meta device
DM : LVM2 快照
Pv:
Pvcreate pvremove pvscan pvdisplay pvmove
Vg:
vgcfgbackup vgchange vgconvert vgdisplay vgextend vgimportclone vgmknodes vgremove vgs vgsplit
vgcfgrestore vgck vgcreate vgexport vgimport vgmerge vgreduce vgrename vgscan
Lv:
lvcreate lvremove lvscan lvdisplay lvmove,lvextend,lvreduce
建立成物理卷:
先 生成分區,調整成8e 類型
pvcreate /dev/sda{10,11}
pvs 查看當前的pvs
pvdisplay 顯示的比較詳細
pvscan 掃描當前的原數據
建立VG
vgcreate myvg /dev/sda{10,11}
能夠指定PE的大小
vgcreate –s 8M myvg /dev/sda{10,11}
刪除
vgremove myvg
縮減磁盤卷,先移動下數據
pvmove /dev/sda11
vgreduce myvg /dev/sda11
pvremove /dev/sda11
若是發現不夠用
pvcreate /dev/sda12
vgextend myvg /dev/sda12
建立lv
lvcreate --size 50M --name testlv myvg
lvdisplay
mke2fs /dev/myvg/testlv
mount /dev/myvg/testlv /var/testlvs/
mount 查看當前掛載
一》擴展邏輯卷
lvextend
-L [+] #:
resize2fs:
resize2fs /PATH/TO/LV 5G
resize2fs -p /dev/myvg/testlv
lvcreate --size 2G --name tlv myvg
lvs
mke2fs /dev/myvg/tlv
mkdir user
vim /etc/fstab
#/dev/myvg/tlv /var/user ext4 defaults,acl 0 0
mount -a
lvextend --size 5G /dev/myvg/tlv
df –lh
lvs
resize2fs –p /dev/myvg/tlv
二》縮減邏輯卷
注意:1.不能在線縮減,得先卸載
2.確保縮減後的空間大小依然可以存儲原有的數據
3.在縮減以前應該先檢查文件系統
resize2fs /PATH/TO/PV 3G
lvreduce –L [-]# /PATH/TO/PV
三》快照卷
lvcreate
-s
-p r|w
lvcreate –-size # --name # -p –r /PATH/TO/PV
ping –c /-w
awk:
dd if=/dev/zero of=/dev/sdb bs=512 count=1
寫一個腳本(前提是:請爲虛擬機新增一塊硬盤,假設爲sdb)爲指定的硬盤建立分區
列出當前系統上的全部磁盤,讓用戶選擇,若是選擇quit則退出腳本;若是選擇錯就就從新選擇
當用戶選擇後,提醒用戶截下來的操做可能會損壞 數據,並請用戶確認,若是用戶選擇就按y就繼續,不然,讓用戶從新選擇
抹除那塊硬盤上的全部分區(提示:抹除分區後執行sync命令,讓腳本睡眠3秒後再分區);併爲其建立三個主分區,第一個20M ,第二個521M,第三個128M,且第三個爲swap分區類型:(提示:將分區命令經過echo傳遞給fdisk 便可實現)
You have new mail.
bogon:~ luodongyun$ ssh root@192.168.225.214
^C
bogon:~ luodongyun$ ssh root@192.168.225.215
The authenticity of host '192.168.225.215 (192.168.225.215)' can't be established.
RSA key fingerprint is SHA256:DZAcpZeHl1tZvXB3kkuqcifvnJRWxja67TXtozcqShQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.225.215' (RSA) to the list of known hosts.
root@192.168.225.215's password:
Last login: Fri Jul 21 02:00:01 2017 from 192.168.225.1
[root@bogon ~]# cd /mnt/
[root@bogon mnt]# ls
[root@bogon mnt]# touch
j.sh
[root@bogon mnt]# chmod +x
j.sh
[root@bogon mnt]# sudo vim
j.sh
[root@bogon mnt]# pwd
/mnt
[root@bogon mnt]# sudo vim
j.sh
[root@bogon mnt]# sudo vim
j.sh
+512M
n
p
3
+128M
t
3
82
w" | fdisk $PARIDISK &> /dev/null
partprobe $PARIDISK
sync
sleep 2
mke2fs -j ${PARIDISK}1
mke2fs -j ${PARIDISK}2
mkswap ${PARIDISK}3
fi
echo $PARTDISK
網絡配置:
網關:
route
add:添加
-host :主機路由
-net :網絡路由 0.0.0.0
route add –net 10.0.0.0/8 gw 192.168.0.1
route add –net | -host DEST gw NEXTHOP
route add default gw NEXTHOP
del :刪除
-host
-net
route del –net 10.0.0.0/8 gw NEXTTOP
route del –net 0.0.0.0
網絡配置文件:
/etc/sysconfig/network
網絡接口配置文件:
/etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME
DEVICE="eth0" 關聯的設備名稱,要與文件的後半部分保持一致 ifcfg-et0
BOOTPROTO="dhcp" 引導協議,static,dhcp,none,bootcp ,要使用靜態地址,使用[static,none],dhcp 表示使用dhcp服務器獲取地址,
IPADDR=IP地址
NETMASK= 子網掩碼
GATEWAY=設定默認網關
HWADDR="00:0C:29:96:B1:CD" 硬件地址,要與硬件中的地址保持一致,可省略
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes" 是否自動激活此網絡接口
TYPE="Ethernet"
UUID="aac7db94-31e0-4553-9907-0fc8b2a86f2f"
不會當即生效,重啓網卡或重啓後生效
重啓腳本: /etc/init.d/network restart
路由:
/ect/sysconfig/network-scripts/route-ethX
添加格式一:
DEST via nexthop
192.168.1.1 via 10.10.10.1
添加格式二:
ADDRESS0=192.168.1.1
NEXTMASK0=255.255.255.0
GETEWAY0=10.10.10.1
DNS 服務器指定的方法只有一種:
/etc/resolv.conf
nameserver //定義DNS服務器的IP地址
domain //定義本地域名
search //定義域名的搜索列表
sortlist //對返回的域名進行排序
指定本地解析:
/etc/hosts
DNS解析順序:
先查詢/etc/hosts ,而後在去查詢dns緩存,在找dns服務器
配置主機名:(當即生效,但不會永久有效)
hostname HOSTNAME
/etc/sysconfig/network
HOSTNAME=
Setup 設置
Ifconfig ,老舊
Ip命令: 功能強大
Ip Link:網絡接口屬性
Show ip –s link show
Set ip link set DEV {up|down}
Ip addr : 網絡協議
一塊網卡能夠有多個網址,網絡設備能夠別名:
配置方法:
1,ifconfig ethX:X IP/NETWORK
2./etc/sysconfig/network-scripts/ifcfg-ethX:X
DEVICE=ethX:X
3.IP addr add 192.168.225.218/24 dev eth1
IP addr del 192.168.225.218/24 dev eth1
IP addr show dev DEV to PREFIX
IP addr flush dev DEV to PREFIX
4.Ip route :路由
軟件包安裝:
安裝
rpm
–i /PATH/TO/PACKAGE_FILE
-h 以#顯示進度:每一個#表示2%
-v 顯示詳細過程
-vv 顯示更詳細的過程
rpm -ivh /PATH/TO/PACKAGE_FILE
--nodepes:忽略依賴關係
--relacepages : 從新安裝,替換原有安裝
--force: 強行安裝,能夠實現重裝或降級
查詢
rpm –q PAGENAME_NAME :查詢指定的包是否已經安裝
rpm –qa :查詢已安裝的全部包
rpm -qi PAGKAGE_NAME 查詢指定包的說明信息
rpm -ql PAGKAGE_NAME 查詢指定安裝包生成的文件列表
rpm -qc PAGKAGE_NAME 查詢指定安裝的配置文件
rpm -qd PAGKAGE_NAME 查詢指定安裝的幫組文件
rpm –q --script PAGKAGE_NAME 查詢指定包中包含的腳本
rpm -qf /path/to/file :查詢指定的文件是由那個rpm包安裝完成
若是某rpm包還沒有安裝,咱們須要查詢其說明信息,安裝之後會生成的文件
rpm –qpi /path/to/file
升級
rpm -Uvh /path/to/file 若是有老版本則升級,不然安裝
rpm -Fvh 若是有老版本則升級,不然退出
卸載
rpm -e PAKEAGE_NAME
校驗
rpm -V PAKEAGE_NAME
編譯安裝的三個步驟:
yum grouplist
安裝「development tools」和「development libraries」
yum groupinstall development tools -y #安裝開發工具組
yum groupinstall development libraries -y #安裝開發工具包,有時可能不用安裝
yum install gcc 從軟件倉庫下載gcc,而後安裝,這個是編譯器
yum install make 安裝make,這個是自動編譯源碼的工具,寫好makefile就能夠方便編譯
yum install kernel-headers 安裝內核頭文件,編譯內核,驅動必要的頭文件
yum install kernel-devel 同上
#./configure
--prefix = /path/to/somewhere
--sysconfdir=/path/to/conffile_path
--help
# make
# make install
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx dso module path: "/usr/local/nginx/modules/"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
vim /etc/profile
export 前加 PATH=$PATH:/usr/local/nginx/sbin
source /etc/profile 重讀
nginx
netstat -tnlp
vim /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables stop
service iptables start
chkconfig iptables on
chkconfig iptables off
環境:
系統硬件:VMware vsphere (CPU:2*4核,內存2G)
安裝步驟:
1.系統環境
1.1 更新系統
[root@centos ~]# yum update -y
1.2 查看環境
[root@centos ~]# cat /etc/
RedHat-release
CentOS
linux release 7.0.1406 (Core)
[root@centos ~]# uname -a
Linux tengine 3.10.0-123.4.2.el7.x86_64 #1 SMP Mon Jun 30 16:09:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
2.安裝tengine
2.1.準備安裝
[root@centos ~]# cd /usr/local/src/
下載 pcre-8.35.tar.gz到/usr/local/src
下載zlib-1.2.8.tar.gz到/usr/local/src
下載 openssl-1.0.1h.tar.gz到/usr/local/src
下載jemalloc-3.6.0.tar.bz2到/usr/local/src
下載 tengine-2.0.3.tar.gz到/usr/local/src
2.2 更新包
[root@centos ~]# yum install zlib-devel openssl-devel -y
2.3 安裝Pcre
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# tar zvxf pcre-8.35.tar.gz
[root@centos ~]# cd pcre-8.35
[root@centos ~]# ./configure
[root@centos ~]# make && make install
2.4 安裝openssl
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# tar zvxf openssl-1.0.1h.tar.gz
[root@centos ~]# cd openssl-1.0.1h
[root@centos ~]# ./config
[root@centos ~]# make && make install
2.5 安裝zlib
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# tar zlib-1.2.8.tar.gz
[root@centos ~]# cd zlib-1.2.8
[root@centos ~]# ./configure
[root@centos ~]# make && make install
2.6 安裝jemalloc
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# tar zvxf jemalloc-3.6.0
[root@centos ~]# cd jemalloc-3.6.0
[root@centos ~]# ./configure
[root@centos ~]# make && make install
[root@centos ~]# echo ‘/usr/local/lib‘ > /etc/ld.so.conf.d/local.conf
[root@centos ~]# ldconfig
4.4 建立www用戶和組,建立www虛擬主機使用的目錄,以及Nginx使用的日誌目錄,而且賦予他們適當的權限
[root@centos ~]# groupadd www
[root@centos ~]# useradd -g
www www
[root@centos ~]# mkdir -p /data/www
[root@centos ~]# chmod +w /data/www
[root@centos ~]# chown -R
www:www /data/www
4.5 安裝tengine
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# tar zvxf tengine-2.0.3.tar.gz
假裝服務器信息(能夠不修改)
[root@centos ~]# cd nginx-1.6.0/src/core
[root@centos ~]# vim ./src/core/nginx.h
修改NGINX_VERSION爲你但願顯示的版號
修改NGINX_VER爲你但願顯示的名稱
修改NGINX_VAR 爲你但願顯示的名稱
保存
開始安裝NGINX
./configure --prefix=/opt/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.0.1h --with-zlib=/usr/local/src/zlib-1.2.8 --with-pcre=/usr/local/src/pcre-8.35 --with-jemalloc
[root@centos ~]# make && make install
4.6 修改 nginx.conf
[root@centos ~]# vim /opt/nginx/conf/nginx.conf
修改前面幾行爲:
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
events{
use epoll;
worker_connections 65535;
}
[root@centos ~]# cd /opt/nginx
[root@centos ~]# ldconfig
[root@centos ~]# ./sbin/nginx -t
若是顯示下面信息,即表示配置沒問題
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful
輸入代碼運行nginx服務
[root@centos ~]# ./sbin/nginx
[root@centos ~]# ps au|grep nginx
若是顯以相似下面的信息,即表示nginx已經啓動
root 2013 0.0 0.0 103156 856 pts/0 S+ 03:22 0:00 grep nginx
輸入代碼檢測是否支持加速
查看是否生效
[root@centos ~]# lsof -n | grep jemalloc
ginx 2346 root mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2347
www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2348
www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2349
www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2350
www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
4.8 打開防火牆80端口
#中止firewall
[root@centos ~]# systemctl stop firewalld.service
#禁止firewall開機啓動
[root@centos ~]# systemctl disable firewalld.service
安裝 iptables
[root@centos ~]# yum install iptables-services
設置防火牆規則 (增長80端口)
[root@centos ~]# vim /etc/sysconfig/iptables
打開文件,增長80端口那一行
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:wq #保存退出
#重啓防火牆使配置生效
[root@centos ~]# systemctl restart iptables.service
#設置防火牆開機啓動
[root@centos ~]# systemctl enable iptables.service
4.9 做爲服務,開機後啓動
[root@centos ~]# vim /usr/lib/systemd/system/tengine.service
增長如下內容
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
:wq 保存退出
[root@centos ~]# systemctl stop tengine
[root@centos ~]# systemctl start tengine
[root@centos ~]# systemctl reload tengine
[root@centos ~]# systemctl enable tengine
[root@centos ~]# shutdown -r now
1.默認狀況下,系統搜索庫文件的路徑/lib,/usr/lib,要增添額外搜索路徑
2.在/ect/ld.so.conf.d/中建立以.conf爲後綴文件,然後把要增添的路徑直接寫到這個文件中
#ldconfig 通知從新搜索文件 ,當即生效
頭文件:輸出給系統
默認:/usr/include
增添同文件搜索路徑,使用鏈接進行
/usr/local/nginx/include/ /usr/include
兩種方式:
ln –s /usr/local/nginx/include/* /usr/include/ 或
ln –s /usr/local/nginx/include /usr/include/nginx
man 文件路徑,安裝—prefix 指定目錄下的man的目錄,/usr/share/man
1.man –M /path/to/man_dir command
2.在/etc/man.config添加一條路徑manpath
netstat命令:
-nltp
-r :顯示路由表
-n:以數字顯示
-t:創建tcp鏈接
-u:顯示udp鏈接
-l:監聽狀態鏈接
-p:監聽指定套接字的進程號
進程管理
ps
a:全部和終端有關的進程
u :
x :全部和終端無關的進程
進程的分類:
進程狀態:
D:不可中斷的睡眠
R:運行或就緒
S:可中斷的睡眠
T:中止
Z:僵死狀態
<:高優先級進程
N:低優先級進程
+:前臺進程組中的進程
l:多線程進程
s:會話進程的首進程
pgrep
pidof 顯示pid
top : 監視進程
交互式選項:
M:根據駐留內存大小進行排序
P: 根據cpu使用百分比進行排序
T: 根據累計時間進行排序
l: 是否顯示平均負載和時間
t: 是否顯示進行和cpu狀態相關信息
m: 是否顯示內存相關信息
c: 是否顯示完整的命令信息
q: 退出top
k: 終止某個進程
進程間通信(IPC):
重要的信號:
kill -l
1,2,9,15
kill PID
killall 進程名
renice 調進程的優先級
&:後臺運行
前臺---》後臺:命令後 + &
jobs:查看後臺的全部做業,
做業號不一樣於進程,有 + 的 命令 將默認操做做業, - 命令將第二個默認操做做業
bg:讓後臺中止的做業繼續運行 bg [jobid]
fg:將後臺的做業調回前臺 fg [JOBID]
kill %JOBID :終止某做業
vmstat : 系統狀態查看命令
cat /proc/meminfo :查看內存狀態
日誌系統:
chroot:
ldd : 顯示二級文件所依賴的共享庫
GIMP是什麼
最容易理解的說法:Linux下的Photoshop,但如今的 Windows 版本一樣好用。
lftp :下載ftp
查看運行級別:
runlevel/ who –r
查看內核relase號:
uname –r
安裝grub stage1:
#grub
grub > root(hd0,0)
grub > set(hd0)
安裝grub 第二種方式:
#grub-install --root-directory=/ /dev/sda
例子: 操做步驟
fdisk /dev/sda
n
p
+20M
w
partprobe /dev/sda
fdisk –l
mke2fs /dev/sda1
mkdir /mnt//boot
mount /dev/sda1 /mnt/boot/
grub-install --root-directory=/mnt /dev/sda
sync
ls /mnt/boot/
ls /mnt/boot/grub/
vim /mnt/boot/grub/grub.conf
若是grub.Conf 損壞
grub> find
grub> root(hd#,N)
grub> kernel /PATH/TO/KERNEL_FILE
grub> initrd /PATH/TO/INITRD_FILE
grub> boot
服務器腳本:
syav:/etc/rc.d/init.d
start|stop|restart|status|reload|configtest
/etc/rc.d/rc.local:系統最後啓動一個服務,準確說,應該執行的一個腳本;
/etc/inittab的任務:
設定默認的運行級別
運行系統初始化腳本
運行指定運行級別對應的目錄的腳本
設定ctrl+alt+del組合鍵操做
定義ups電源在電源故障/恢復時執行的操做
啓動虛擬終端(2345級別)
啓動圖形終端(5級別)
chkconfig –list:查看全部獨立守護服務的啓動設定,獨立守護進程
chkconfig –list SERVER_NAME
chkconfig –add SERVER_NAME
chkconfig –del SERVER_NAME
chkconfig --level RUNLEVES SERVER_NAME(on|off)
內核模塊管理:
lsmod:查看
modprode mod_name : 裝載某模塊
modprode –r mod_name:卸載某模塊
modinfo mod_name:查看模塊的具體信息
insmod /path/to/module_file:裝載模塊
rsmod mod_name : 卸載模塊
如何手動編譯內核:
make gconfig : Gname 桌面環境使用,須要安裝圖形開發組,
make kconfig: KDE桌面環境使用,須要安裝圖形開發庫
make menuconfig
make
make modules_install
make install
系統的啓動流程:
POST->BIOS(boot sequence)->BootLoader(MBR)->Kernel(initrd,initramfs)->init(/etc/inittab)
/etc/inittab:
設定默認運行級別
系統初始化(/etc/rc.d/rc.sysinit)
運行指定級別的腳本
/etc/rc.d/init.d
/etc/rc.d/rc#.d
rc0.d-rc6.d
啓動虛擬終端
啓動圖形終端
/ect/rc.d/rc.sysinit:
檢測以讀寫方式從新掛載根文件系統
設定主機名
檢測並掛載/etc/fstab中的其餘文件系統
啓用swap分區
初始化外圍硬件設備的驅動
根據/etc/sysctl.config設定內核參數
激活udev 和 selinux
激活LVM 和 RAID 設備
清理過時的鎖和PID文件
裝載鍵映射
/etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
/etc/rc.d/rc.sysinit
echo
insmod
ifconfig
/bin/bash
REHL6:
Upstart--init
/etc/inittab
/etc/init/*.conf
內核初始化:
硬件檢測
裝載驅動
掛載根目錄文件
啓動用戶空間中的第一個進程init
內核編譯:
busybox;
kernel+ROOTFS()
查看本機硬件設備信息:
一、cat /proc/cpuinfo
2.lsusb
3.lspci
4.hal-device
編譯內核:
配置
make menuconfig
make gconfig
make kconfig
make oldconfig
make config
保存爲.config
2.
make
make modules_install
make install
模塊安裝位置:/lib/modules/KERNEL_VERSION/
如何實現部分編譯:
之編譯某目錄下的相關代碼
make dir/
只編譯某一模塊
make M=drivers/net
只編譯某一模塊
make drivers/net/pcnet2.so
將編譯完成的結果放在別的目錄中
make O = /tmp/kernel
如何編譯busybox:
bash 引入配置文件:
. /mnt/a.conf
腳本編程知識點:
變量中字符的長度:${#VARNAME}
變量賦值等
${parameter:-word}:若是parameter 爲空 或未定義,則變量展開爲」word」,不然爲parameter的值
mktemp 建立臨時文件或目錄:
mktemp test.XXXXXX
信號:
trap
trap ‘COMMAND’信號列表
任務計劃:
在將來某個時間點執行某一次任務:
at
at 時間
at> COMMAND
at> ctrl+d
batch
週期性的執行某任務:
cron:自身是一個不間斷的任務
anacron:cron的補充,可以實現讓cron 由於各類緣由在過去的時間執行而未執行的任務在回覆正常執行一次
系統cron任務:
/etc/crontab
分鐘 小時 天 月 周 用戶 任務
用戶cron任務:
/var/spool/cron/USERNAME
分鐘 小時 天 月 周 用戶 任務
時間取值範圍:
分鐘:0-59
小時:0-23
天:1-31
月:1-12
周:0-7 0和7都是週日
時間通配符:
*:表示對應的全部的有效取值
,:表示離散時間點取值 10,20 * * * *
-:表示聯繫時間點 10-20 * * * *
/: 每多長時間執行一次 */3 * * * *
crontab –l : 列出當前用戶的全部cron的任務
-e : 編輯
-r : 移除全部任務
kernel -> 物理終端(/dev/console) -> /var/log/dmesg
#dmesg
#cat /var/log/dmesg
/sbin/init
/var/log/messages: 系統標準錯誤日誌信息
/var/log/maillog : 郵件系統產生的日誌信息
/var/log/secure:
syslog:
syslogd
klogd
配置文件:/ect/syslog.conf
telnet:遠程登陸協議
scp :
scp src dest
-r
-a
scp username@host:/path /localpath 遠程主機複製到本地
scp /localpath username@host:/path 把本地文件複製到遠程主機
ssh-keygen:
-r rsa
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
公鑰保存到遠程主機某用戶的家目錄下的.ssh/authorized_keys文件或.ssh/authorized_keys2文件
ssh-copy-id
-I ~/.ssh/id_rsa.pub
ssh-copy-id -I ~/.ssh/id_rsa.pub username@host
加密類型及加密算法:
diffie->hellman 協議:
A-_---B:
P,G(大素數,大質數)
A:x
B: y
A:G^X%P ----B
B:g^y%p ----A
A: (g^x%p)^y = g^xy%p
B: (g^y%p)^x = g^xy%p
公鑰加密算法:非對稱加密算法
祕鑰對:
公鑰:P
私鑰:s
發送方用本身的私鑰加密數據,能夠實現身份驗證
發送方用對方的公鑰加密數據,能夠保證數據機密性
ca證書:
x509:
公鑰及有效期
證書的合法擁有者
證書該如何被使用
CA的信息
CA簽名的校驗碼
PKI : Tls/ssl: 使用的是x509
Pki: OpenGPG
對稱加密:
DES/3DES/AES/BlowFish
單向加密:
MD4,MD5,SHA1,SHA192,SHA256,SHA384,CRC32
公鑰加密(加密、簽名):
身份認證(數字簽名)、數據加密,密鑰交換
RSA:既能加密,又能簽名/DSA:僅簽名/ElGamal
OpenSSL:ssl的開源實現
Libcrypto:加密庫
Libssl:TLS/SSL的實現
基於會話的/實現了身份認證,數據機密性或會話完整性的TLS、SSL庫
openssl:多用途命令行工具
實現私有證書頒佈機構
openssl 實現私有CA:需設置權限爲600
先生成一對密鑰
私鑰:
openssl genrsa 2048 > server.key
或者
(umask 077; openssl genrsa -out server1024.key 1024)
公鑰:
openssl rsa -in server1024.key -pubout 提取公鑰
生成自簽證書
openssl req -new -x509 -key server1024.key -out server.crt -days 365
cd /etc/pki/tls/openssl.cnf 有CA配置項
具體實踐生成(CA 先本身頒發個證書):
cd /etc/pki/CA
(umask 077; openssl genrsa -out private/cakey.pem 2048 ) 生成祕鑰
openssl req -new -x509 -key private/cakey.pem -out cacert.pem 生成自簽證書
mkdir certs newcerts crl
touch index.txt
touch serial
echo 01 > serial
向CA申請證書:
cd
mkdir /etc/httpd
cd /etc/httpd
mkdir ssl
cd ssl
(umask 077 ; openssl genrsa –out httpd.key 1024)
openssl req -new -key httpd.key -out cacert.csr
openssl ca -in httpd.csr -out httpd.crt -days 365
安裝配置DNS(只能作測試用)
配置文件:
/ect/named.conf
BIND進程的工做屬性
區域的定義
/ect/rndc.key
祕鑰文件
配置信息:/ect/rndc.conf
/var/named
區域數據文件
/etc/rc.d/init.d/named
啓動文件
DNS
監聽的端口:
53/udp 53/tcp 953/tcp,rndc
socket 套接字:
IP:PORT
狀態代碼:
1xx:純信息
2xx:成功類的信息(200)
3xx:重定向類信息(301,302,304)
4xx:客戶端錯誤類的信息(404)
5xx:服務器端錯誤類信息(500)
web服務器主要操做:
創建鏈接—接受或拒絕客戶端鏈接請求
接收請求—經過網絡讀取HTTP請求報文
處理請求—解析請求報文並做出相應的動做
訪問資源—訪問請求報文中相關的資源
構建相應—使用正確的首部生成HTTP響應報文
發送響應—向客戶端發送生成的響應報文
記錄日誌—當已經完成的HTTP事件記錄進日誌文件
Httpd安裝:
Getenforce 先看下 是否是 disenable,或者permissive
Setenforce 0 臨時生效
Vim /ect/sysconfig/selinux
Vim /ect/selinux/config
Httpd 工做:
/usr/sbin/httpd
/etc/rc.d/init.d/httpd
/etc/httpd:工做目錄
/etc/httpd/conf 有配置文件
yum 安裝
yum install httpd
rpm -ql httpd查看文件
service httpd start 啓動服務
ps aux | grep httpd
loadrunner 惠普公司 出的測試壓力 工具
mpm
4種配置形式
mpm_winnt
prefork (一個請求一個線程相應)
worker(一個請求用一個線程相應,啓動多個進程,每一個進程多個線程)
event( 一個進程處理多個請求)
options
indexs :索引目錄 ,生產環境關閉
elinks 文本瀏覽器
服務器配置https
cd /etc/pki/CA
(umask 077 ; openssl genrsa -out private/cakey.pem 2048)
ls -l private/
vim ../tls/openssl.cnf
更改默認省份等信息
生成自簽證書
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
vim ../tls/openssl.cnf
更改 openssl.cnf 配置
dir = /etc/pki/CA
cd /etc/pki/CA
mkdir certs ctl newcerts
touch index.txt
echo 01>serial
cd /ect/httpd
mkdir ssl
cd ssl
(umask 077 ; openssl genrsa -out httpd.key 2048)
openssl req -new –key httpd.key -out httpd.csr
#comon name 給那個虛擬主機用 ,就寫哪一個域名
把生成的文件發送到簽署ca服務器
scp httpd.csr 172.16.100.8:/tmp
正式頒發證書
openssl ca –in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650
配置成https
yum install openssl mod_ssl -y
cd /etc/httpd/conf.d/
mv ssl.conf ssl.conf.bak
vim ssl.conf
<VirtualHost 192.168.225.232:443>
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
service httpd restart
httpd –t
netstat -nltp
vim hosts 192.168.225.332
d.com
解決安全性:
從服務器上下載 /etc/pki/CA/cacert.pem放到本地,並命名爲.crt,而後把這個crt文件導入瀏覽器
數據庫:
建立用戶:
CREATE USER ‘ROOT’@’HOST’ [IDENTFIED BY ‘PASSWORD’]
DROP USER ‘USERNAME’@’HOST’
_:匹配任意字符,192.168.233._
%:匹配任意字符
受權
GRANT pri1,pri2… ON DB_NAME.TB_NAME TO ‘USERNAME’@’HOST’ [IDENTFIELD BY ‘PASSWORD’];
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
取消受權
REMOVE pri1,pri2… ON DB_NAME.TB_NAME TO ‘USERNAME’@’HOST’;
查看受權
SHOW GRANTS FOR ‘USERNAME’@’HOST’
爲用戶設定密碼
SET PASSWORD FOR ‘USER’@’HOST’ = PASSWORD(‘password’); FLUSH PRIVILEGES;
# mysqladmin –uUSERNAME –hHOST -p password ‘12345’
mysql> UPDATE user SET Password=PASSWORD(‘password’) where user=’root’ ;
phpadmin
論壇:
discus/phpwind/phpbb
源碼安裝lamp
yum –y install pcre-devel
tar xf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure –prefix=/usr/local/apr
make
make install
tar xf apr-util-1.4.1.tar.gz
cd apr-util-1.4.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
cd httpd2.4.4
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-rewrite --enable-ssl --enable-cgi --enable-cgid --enable-modules = most --enable-mpms-shared=all --with-apr=/usr/local/apr --with-apr-unil=/usr/local/apr-util
make
make install
getenforce
setenforce 0
vim /etc/selinux/config
SELINUX=permissive
Cd /usr/local/apache
Vim /etc/httpd/httpd.conf
PidFile=/var/run/httpd.pid
Cp /usr/local/apache/bin/apachect1 /etc/init.d/httpd
Chkconfig –add httpd
Chkconfig –list | grep httpd
Chkconfig –level 2345 httpd on
Service httpd start
安裝mysql
Group add –r -g 306 mysql
Useradd –g 306 -r –u 306 mysql
建立分區
fdisk /dev/sda
n
e 先加擴展卷
n
p
t 8e
w
partprobe /dev/sdb
pvcreate /dev/sdb2
vgcreate myvg /dev/sdb2
lvcreate -n mydata -L 5G myvg
lvs
mke2fs -j /dev/myvg/mydata
mkdir /mydata
vim /etc/fstab 開機自動掛載
/dev/myvg/mydata /mydata ext3 defaults 0 0
mount –a 掛載
mount 查看
mkdir /mydata/data
chown -R mysql.mysql /mydata/data/
mysql服務器維護了兩類變量:
服務器變量:
定義mysql 服務器運行屬性
SHOW GLOBAL VARIBALES
狀態變量:
保存了mysql服務器統計數據
SHOW GLOBAL STATUS
Centos6.5 LAMP環境源碼包安裝與配置,附安裝包百度網盤地址
Centos6.5 LAMP環境源碼包安裝與配置
LAMP是一種web網絡應用和開發環境,是linux,Apache,MySQL,php/perl的縮寫,每個字母表明瞭一個組件,每一個組件就其自己而言都是在它所表明的方面功能很是強大的組件。
Linux:Linux 處在最底層,提供操做系統。它的靈活性和可定製化的特色意味着它可以產生一種高度定製的平臺,讓其它組件在上面運行。其它組件運行於Linux 之上,可是並不必定侷限於 Linux,也能夠在 Microsoft Windows, Mac OS X 或 UNIX上運行。
Apache:Apache位於第二層,它是一個Web 服務平臺,提供可以讓用戶得到 Web 頁面的機制。Apache 是一款功能強大、穩定、可支撐關鍵任務的Web服務器,Internet 上超過 50% 的網站都使用它做爲 Web 服務器。
MySQL:MySQL 是最流行的開源關係數據庫管理系統,是LAMP的數據存儲端。在 Web 應用程序中,全部賬戶信息、產品信息、客戶信息、業務數據和其餘類型的信息都存儲於數據庫中,經過 SQL 語言能夠很容易地查詢這些信息。
PHP/Perl:Perl是一種靈活的語言,特別是在處理文本要素的時候,這種靈活性使Perl很容易處理經過 CGI接口提供的數據,靈活地運用文本文件和簡單數據庫支持動態要素。PHP 是一種被普遍應用的開放源代碼的多用途腳本語言,它可嵌入到 HTML中,尤爲適合 web 開發。可使用 PHP 編寫能訪問 MySQL 數據庫中的數據和 Linux 提供的一些特性的動態內容。
系統環境
系統平臺:CentOS release 6.5
Apache版本:httpd-2.2.9.tar.gz
Mysql 版本:mysql-5.5.20.tar.gz
Php版本:php-5.3.22.tar.gz
安裝前準備:
安裝gcc、gcc-c++編譯器
用gcc –v命令檢查安裝時使用的編譯工做是否存在
若是未安裝,在聯網的狀況下使用:
yum install gcc和yum install gcc-c++安裝
確認搭建LAMP所需的環境是否已經安裝:
rpm -q make cmake gcc gcc-c++ zlib-devel libtool libtool-ltdl libtool-ltdl-devel bison ncurses-devel
備註:安裝libpng時須要zlib-devel 安裝php時須要libtool、libtool-ltdl、libtool-ltdl-devel 安裝mysql時須要bison、ncurses-devel
若是以上所需環境沒安裝則yum安裝:
yum -y install make cmake gcc gcc-c++ zlib-devel libtool libtool-ltdl libtool-ltdl-devel bison ncurses-devel
在安裝PHP以前,應先安裝PHP5須要的最新版本庫文件,例如libxml二、libmcrypt以及GD2庫等文件。安裝GD2庫是爲了讓PHP5支 持GIF、PNG和JPEG圖片格式,因此在安裝GD2庫以前還要先安裝最新的zlib、libpng、freetype和jpegsrc等庫文件。並且中間還會穿插安裝一些軟件
ps -ef|grep mysqld #查看是否有mysqld進程 ps 命令用於查看當前正在運行的進程。 grep 是搜索 ps -aux | grep java #-aux 顯示全部狀態 kill 命令用於終止進程 例如: kill -9 [PID] #-9 表示強迫進程當即中止 一般用 ps 查看進程 PID ,用 kill 命令終止進程 ps [選項] -e 顯示全部進程,環境變量 -f 全格式 -h 不顯示標題 -l 長格式 -w 寬輸出 a 顯示終端上地全部進程,包括其餘用戶地進程 r 只顯示正在運行地進程 x 顯示沒有控制終端地進程
查看是否安裝httpd、MySQL、PHP是否安裝:若是安裝了就將其舊版本卸載
卸載Apache
rpm -qa | grep httpd #檢查是否安裝了httpd軟件包 rpm -e httpd-2.2.3-63.el5.centos --nodeps #卸載軟件包, --nodeps: 若是有連帶關係,也強制卸載 cd /etc/httpd/ rm -rf * #到原來的apache安裝目錄下,將其全部的安裝目錄和文件都刪掉
卸載Mysql
rpm -qa | grep mysql #檢查是否安裝了mysql軟件包 rpm -e mysql-5.0.77-4.el5_4.2 --nodeps #卸載mysql
卸載Php
rpm -qa | grep php #檢查是否安裝了php軟件包 rpm -e php-common-5.1.6-27.el5 --nodeps rpm -e php-ldap-5.1.6-27.el5 --nodeps rpm -e php-cli-5.1.6-27.el5 --nodeps rpm -e php-5.1.6-27.el5 --nodeps #卸載PHP
關閉selinux,清空防火牆規則
1、查看SELinux狀態命令:
/usr/sbin/sestatus -v #若是SELinux status參數爲enabled即爲開啓狀態 SELinux status: enabled getenforce ##也能夠用這個命令檢查
關閉SELinux方法:
一、臨時關閉(不用重啓機器): 代碼以下: setenforce 0 #設置SELinux 成爲permissive模式 setenforce 1 #設置SELinux 成爲enforcing模式 二、修改配置文件須要重啓機器: 修改vim /etc/selinux/config 文件 將SELINUX=enforcing 改成 SELINUX=disabled 重啓機器便可
使用ssh shell將windows下的13個源碼包上傳到/usr/local/src 解包
編譯安裝過程介紹:
1)解壓tar.gz爲後綴的壓縮軟件包:LAMP環境搭建所須要的每一個軟件的軟代碼文件,都是以tar.gz或.tgz提供給咱們的打包壓縮文件,因此咱們必須將其解壓再解包。命令以下:
tar–zxvf *.tar.gz
2)在linux系統中源代碼包安裝過程:LAMP環境搭建所須要的軟件都是使用C語言開發的,因此安裝源代碼文件最少須要配置、編譯和安裝三個步驟
配置(configure)、編譯(make)、安裝(makeinstall)
安裝LAMP
一、安裝libxml2
cd /usr/local/src/libxml2-2.6.30 ./configure --prefix=/usr/local/libxml2 make && make install
二、安裝libmcrypt
cd /usr/local/src/libmcrypt-2.5.8 ./configure --prefix=/usr/local/libmcrypt make && make install
三、安裝zlib
cd /usr/local/src/zlib-1.2.3 CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/zlib/ (用64位元的方法進行編譯) make && make install
四、安裝libpng
cd /usr/local/src/libpng-1.2.31 ./configure --prefix=/usr/local/libpng --enable-shared #--enable-shared(創建共享庫使用的GNU的libtool) make && make install
五、安裝jpeg
這個軟件包安裝有些特殊,其它軟件包安裝時若是目錄不存在,會自動建立,但這個軟件包安裝時須要手動建立。
mkdir /usr/local/jpeg && mkdir /usr/local/jpeg/bin && mkdir /usr/local/jpeg/lib && mkdir /usr/local/jpeg/include && mkdir -p /usr/local/jpeg/man/man1 # mkdir /usr/local/jpeg (建立jpeg軟件的安裝目錄) # mkdir /usr/local/jpeg/bin(建立存放命令的目錄) # mkdir /usr/local/jpeg/lib (建立jpeg庫文件所在目錄) # mkdir /usr/local/jpeg/include(建立存放頭文件目錄) # mkdir -p /usr/local/jpeg/man/man1(創建存放手冊的目錄) cd /usr/local/src/jpeg-6b ./configure --prefix=/usr/local/jpeg --enable-shared --enable-static #>--enable-shared \ (生成動態連接庫) #>--enable-static (生成靜態連接庫) make && make install
執行make時若是出現以下錯誤:
./libtool --mode=compile gcc-O2 -I. -c ./jcapimin.c make: ./libtool: Command notfound make: *** [jcapimin.lo] Error 127
解決方法:
默認已安裝libtool及libtool-ltdl-devel(如需幫助請看過程2)
[root@localhostjpeg-6b]# find / -name config.sub /usr/share/libtool/config/config.sub [root@localhostjpeg-6b]# find / -name config.guess /usr/share/libtool/config/config.guess 操做以下: [root@localhostjpeg-6b]# cp -vRp /usr/share/libtool/config/config.sub . [root@localhostjpeg-6b]# cp -vRp /usr/share/libtool/config/config.guess .
也就是把libtool裏面的兩個配置文件拿來覆蓋掉jpeg-6b目錄下的對應文件
make clean 再從新configure
./configure --prefix=/usr/local/jpeg --enable-shared --enable-static make && make install
六、安裝freetype
cd /usr/local/src/freetype-2.3.5 ./configure --prefix=/usr/local/freetype --enable-shared #>--enable-shared(創建共享庫使用的GUN的libtool) make
安裝 freetype make [install] 錯誤 1 (忽略) 報錯問題
當 make install 時老是: rm -f /usr/local/modules/freetype/include/freetype2/freetype/cache/* rmdir /usr/local/modules/freetype/include/freetype2/freetype/cache rm -f /usr/local/modules/freetype/include/freetype2/freetype/internal/* rmdir /usr/local/modules/freetype/include/freetype2/freetype/internal rmdir: ‘/usr/local/modules/freetype/include/freetype2/freetype/internal’: 沒有那個文件或目錄 make: [install] 錯誤 1 (忽略) /usr/bin/install -c -m 644 ./builds/unix/ft2unix.h \ /usr/local/modules/freetype/include/ft2build.h /usr/bin/install -c -m 644 ./builds/unix/ftconfig.h \ /usr/local/modules/freetype/include/freetype2/freetype/config/ftconfig.h /usr/bin/install -c -m 644 /opt/src/lamp/freetype-2.2.1/objs/ftmodule.h \ /usr/local/modules/freetype/include/freetype2/freetype/config/ftmodule.h /usr/bin/install -c -m 755 ./builds/unix/freetype-config \ /usr/local/modules/freetype/bin/freetype-config /usr/bin/install -c -m 644 ./builds/unix/freetype2.m4 \ /usr/local/modules/freetype/share/aclocal/freetype2.m4 /usr/bin/install -c -m 644 ./builds/unix/freetype2.pc \ /usr/local/modules/freetype/lib/pkgconfig/freetype2.pc (報錯)
解決辦法:
mkdir /usr/local/freetype/include/freetype2/freetype/internal #須要在freetype的安裝目錄下建立internal 這個目錄而後, make install
七、安裝autoconf
cd /usr/local/src/autoconf-2.61 ./configure make && make install
八、安裝GD庫
cd /usr/local/src/gd-2.0.35 ./configure --prefix=/usr/local/gd --enable-m4_pattern_allow --with-zlib=/usr/local/zlib/ --with-jpeg=/usr/local/jpeg/ --with-png=/usr/local/libpng/ --with-freetype=/usr/local/freetype/ #>--enable-m4_pattern_allow \ #>--with-zlib=/usr/local/zlib/ \ (指定zlib庫文件的位置) #>--with-jpeg=/usr/local/jpeg/ \ (指定jpeg庫文件的位置) #>--with-png=/usr/local/libpng/ \ (指定png庫文件的位置) #>--with-freetype=/usr/local/freetype/(指定freetype字體庫的位置) make
出現錯誤:
make[2]: *** [gd_png.lo] Error 1 make[2]: Leaving directory `/usr/local/src/gd-2.0.35' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/local/src/gd-2.0.35' make: *** [all] Error 2
分析:這個問題是由於gd庫中的gd_png.c這個源文件中包含png.h時,png.h沒有找到致使的。
解決:
[root@localhostgd-2.0.35]# find / -name gd_png.c
/usr/local/src/gd-2.0.35/gd_png.c
[root@localhostgd-2.0.35]# find / -name png.h
/usr/local/libpng/include/png.h
[root@localhostgd-2.0.35]# vi gd_png.c
在編譯文件裏
vi gd_png.c
將include 「png.h」 改爲 include 「/usr/local/libpng/include/png.h」
其中/usr/local/libpng/爲libpng安裝路徑。
make install
九、安裝Apache
cd /usr/local/src/httpd-2.2.9 ./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite #> --enable-so \ (以動態共享對象編譯)讓apache核心裝載DSO #>--enable-rewrite (基於規則的URL操控)啓用重寫功能 make make install
將apache加入開機啓動
cp -vRp /usr/local/apache2/bin/apachectl /etc/init.d/httpd chmod +x /etc/init.d/httpd
添加apache服務↓
chkconfig --add httpd
執行chkconfig時,若是出現以下錯誤:
不支持 chkconfig service httpd does not supportch kconfig apache
解決方法:
用chkconfig將自編譯設置爲系統服務的時候,httpd 服務不支持chkconfig。
解決過程以下:
1.編輯
vim /etc/init.d/httpd #!/bin/bash 添加: #chkconfig:345 61 61 #description:Apache httpd
保存後再執行chkconfig
chkconfig --add httpd chkconfig --list|grep httpd chkconfig --level 2345 httpd on service httpd start
啓動服務時,若是出現以下錯誤:
httpd: Could not reliablydetermine the server's fully qualified domain name, using localhost.localdomainfor ServerName
解決方法:
[root@localhosthttpd-2.2.9]# vi /usr/local/apache2/conf/httpd.conf
配置Apache
啓動Apache # /usr/local/apache2/bin/apachectl start 關閉Apache # /usr/local/apache2/bin/apachectl stop 查看80端口是否開啓 # netstat -tnl|grep 80
訪問Apache服務器
防火牆
打開防火牆80端口,以使外部網絡能夠訪問
vi /etc/sysconfig/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT service iptables restart
外部網絡經過瀏覽器訪問
編譯安裝mysql
(最新版本都須要cmake編譯安裝)
如何清除 cmake 編譯腳本
刪除文件夾下的文件 rm CMakeCache.txt
從新編譯便可。
編譯安裝 MySQL5.5.20
[root@localhostsrc]# groupadd mysql #添加一個mysql標準組 [root@localhostsrc]# useradd -g mysql mysql #添加mysql用戶並加到mysql組中 [root@localhostlinux]# tar -zxvf mysql-5.5.20.tar.gz [root@localhostlinux]# cd /usr/local/src/mysql-5.5.20 [root@localhostmysql-5.5.20]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_INNODB_MEMCACHED=1 -DWITH_DEBUG=OFF -DWITH_ZLIB=bundled -DENABLED_LOCAL_INFILE=1 -DENABLED_PROFILING=ON -DMYSQL_MAINTAINER_MODE=OFF -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_TCP_PORT=3306 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 #cmake-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ (安裝根目錄) #-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \ (UNIX socket文件) #-DDEFAULT_CHARSET=utf8 \ (默認字符集) #-DDEFAULT_COLLATION=utf8_general_ci \ (默認編碼) #-DWITH_EXTRA_CHARSETS=utf8,gbk \ (額外的編碼) #-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \(啓用PERFSCHEMA引擎支持) #-DWITH_FEDERATED_STORAGE_ENGINE=1 \ (啓用FEDERATED引擎支持) # -DWITH_PARTITION_STORAGE_ENGINE=1\ (啓用PARTITION引擎支持) #-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ (啓用ARCHIVE引擎支持) #-DWITH_READLINE=1 \(使用readline功能) #-DMYSQL_DATADIR=/usr/local/mysql/data \ (數據庫數據目錄) #-DMYSQL_TCP_PORT=3306 (TCP/IP端口) **mysql經常使用參數** # -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安裝路徑 # -DMYSQL_DATADIR=/usr/local/mysql/data \ #數據文件存放位置 # -DSYSCONFDIR=/etc \ #my.cnf路徑 # -DWITH_MYISAM_STORAGE_ENGINE=1 \ #支持MyIASM引擎 # -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #支持InnoDB引擎 # -DWITH_MEMORY_STORAGE_ENGINE=1 \ #支持Memory引擎 # -DWITH_READLINE=1 \ #快捷鍵功能(我沒用過) # -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \ #鏈接數據庫socket路徑 # -DMYSQL_TCP_PORT=3306 \ #端口 # -DENABLED_LOCAL_INFILE=1 \ #容許從本地導入數據 # -DWITH_PARTITION_STORAGE_ENGINE=1 \ #安裝支持數據庫分區 # -DEXTRA_CHARSETS=all \ #安裝全部的字符集 # -DDEFAULT_CHARSET=utf8 \ #默認字符 make make install
cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
修改配置文件
[root@localhostmysql-5.5.20]# vi /etc/my.cnf [mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data log-error=/usr/local/mysql/data/error.log pid-file=/usr/local/mysql/data/mysql.pid
初始化數據庫文件
[root@localhostmysql-5.5.20]# /usr/local/mysql/scripts/mysql_install_db --defaults-flie=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql.pid --user=mysql
權限設置↓(進入MySQL文件下)
cd /usr/local/mysql [root@localhostmysql]# chown -R root . [root@localhostmysql]# chown -R mysql data [root@localhostmysql]# chgrp -R mysql .
將mysql加入開機啓動
[root@localhostmysql]# cp -vRp support-files/mysql.server /etc/init.d/mysqld [root@localhostmysql]# chmod +x /etc/init.d/mysqld
添加mysql服務
[root@localhostmysql]# chkconfig --add mysqld [root@localhostmysql]# chkconfig --level 345 mysqld on [root@localhostmysql]# service mysqld start
沒法啓動?
MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解決辦法
緣由:沒有初始化權限表
[root@localhost ~]# cd /usr/local/mysql [root@localhost mysql]# chown -R mysql.mysql . [root@localhost mysql]# su - mysql [mysql@localhost ~]$ cd /usr/local/mysql [mysql@localhost mysql]$ scripts/mysql_install_db [mysql@localhost mysql]$ /usr/local/mysql/bin/mysqld_safe --user=mysql & [root@localhostmysql]# service mysqld start 或者 [mysql@localhost mysql]$ /etc/init.d/mysqld start
配置mysql
[root@localhostmysql]# bin/mysql
若是mysql進不去MySQL:
ln -s /usr/local/mysql/bin/mysql /usr/bin
有時候安裝好MySQL程序的時候,直接輸入命令MySQL或mysqladmin會發現提示命令不存在,這是因爲系統默認會查找/usr/bin下的命令,若是這個命令不在這個目錄下,固然會找不到命令,咱們須要作的就是映射一個連接到/usr/bin目錄下,至關於創建一個連接文件。
首先得知道mysql命令或mysqladmin命令的完整路徑,好比mysql的路徑是:/usr/local/mysql/bin/mysql,咱們則能夠這樣執行命令:
ln -s /usr/local/mysql/bin/mysql(mysqladmin) /usr/bin
mysql> deletefrom mysql.user where Host!='localhost'; #(只留容許本機登陸的賬號) mysql> flushprivileges; #(刷新受權表) mysql> setpassword for 'root'@'localhost'=password('123456'); #(設置用戶密碼) mysql> exit [root@localhostmysql]# bin/mysql -h localhost -u root -p123456 #(登陸mysql)
編譯安裝php
[root@localhostlinux]# tar -zxvf php-5.3.22.tar.gz [root@localhostlinux]# cd /usr/local/src/php-5.3.22 [root@localhostphp-5.3.22]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql/ --with-libxml-dir=/usr/local/libxml2/ --with-png-dir=/usr/local/libpng/ --with-jpeg-dir=/usr/local/jpeg/ --with-freetype-dir=/usr/local/freetype/ --with-gd=/usr/local/gd/ --with-mcrypt=/usr/local/libmcrypt/ --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-soap --enable-mbstring=all --enable-sockets **若是出錯,將 --with-gd=/usr/local/gd/ 改成 --with-gd 系統gd** #./configure --prefix=/usr/local/php \ #--with-apxs2=/usr/local/apache2/bin/apxs \ #--with-mysql=/usr/local/mysql/ \ #--with-libxml-dir=/usr/local/libxml2/ \ #--with-png-dir=/usr/local/libpng/ \ #--with-jpeg-dir=/usr/local/jpeg/ \ #--with-freetype-dir=/usr/local/freetype/ \ #--with-gd=/usr/local/gd/ \ #--with-mcrypt=/usr/local/libmcrypt/ \ #--with-mysqli=/usr/local/mysql/bin/mysql_config \ #--enable-soap\ (變量激活SOAP和web services支持) #--enable-mbstring=all \ (使多字節字符串支持) #--enable-sockets (變量激活socket通信特性) [root@localhostphp-5.3.22]# make [root@localhostphp-5.3.22]# make install [root@localhostphp-5.3.22]# cp -vRp php.ini-development /etc/php.ini [root@localhostphp-5.3.22]# vi /usr/local/apache2/conf/httpd.conf 找到: AddType application/x-compress .Z AddType application/x-gzip .gz .tgz 在後面添加: AddType application/x-httpd-php .php AddType application/x-httpd-php-source .php5 找到: <IfModule dir_module> DirectoryIndex index.html </IfModule> 添加:在index.html後面添加index.php就行啦! [root@localhostphp-5.3.22]# service httpd stop [root@localhostphp-5.3.22]# service httpd start [root@localhostphp-5.3.22]# vi /usr/local/apache2/htdocs/phpinfo.php 添加內容爲: <?php phpinfo(); ?>
打開瀏覽器進行訪問,若是出現PHP版本界面,及安裝成功。
安裝PHP擴展xcache
xcache模塊能夠緩存
php運行時編譯生成的opcode能夠加速php程序的效率,安裝xcache和安裝
memcache方法相似,都是以擴展的方式安裝,PHP任何擴展方法基本上都是以下,因此不須要特地去找xxx擴展的文檔.
安裝PHP擴展xcache
1
2
3
4
5
# tar -xvf xcache-3.2.0.tar.gz
# cd xcache-3.2.0
# ./configure –with-php-config=/usr/local/php/bin/php-config –enable-xcache
# make && make install
會生成相似以下信息
1
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
全部的模塊都會生成到這個目錄下
編輯php配置文件
1
2
# vim /usr/local/php/etc/php.ini
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so
重載PHP
1
# service php-fpm reload
若是是你Apache+PHP模式,那麼重啓Apache便可.
1
2
3
# service httpd restart
或者
# /usr/local/apache-2.2.27/bin/apachectl restart
Ulimit –t 10000 調整線程 默認爲1024
經常使用的測試工具
ab/http_load/webbech/siege
vmstat –l
郵件服務:
SMTP 協議/ POP3 / IMAP4 / UUTP
MTA: 郵件傳輸代理
Sendmail/qmail/postfix/exim/exchange
SASL:
Cyrus-sasl
Courier
MDA: 郵件投遞代理
Procmail / maildrop
MRA : 郵件檢索代理
Cyrus-imap/dovecot
MUA :郵件用戶代理
Outlook,express,outlook,foxmail
Thunderbird,evolution,mutt
Webmail:
Openwebmail,squiremail,extmail
配置安裝郵件系統
Postfix+SASL(courier+authlib) + mysql
Dovecot + mysql
Webmail+extman+httpd
安裝和配置postfix
groupadd -g 2525 postfix
useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
groupadd -g 2526 postdrop
useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop
make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH -DUSE_CYRUS_SASL –I/usr/include/sasl -DUSE_ITS''AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
make
make isntall
postfix start
master:/etc/postfix/master.cf
main:/etc/postfix/main.cf
postconf:
-d:顯示默認的配置
ftp:相關內容
服務器端:
vsftpd/proftpd/wu-ftpd/pureftpd/filezila
客戶端:
ftp/lftp/gftpd/filezila
vsftpd:
/etc/vsftpd :配置文件目錄
/etc/init.d/vsftpd : 服務腳本
/usr/sbin/vsftpd:主程序
rpm -qa | grep vsftpd 查看是否安裝vsftp
yum install vsftpd 安裝vsftp
service vsftpd start 啓動
rpm -ql vsftpd 查看生成的文件
chkconfig vsftpd on
配置vsftpd
提供rpc 服務的程序:portmap
yum install nfs-utils
yum install rpcbind
service rpcbind start
service nfs start
showmount -e NFS_SERVER:查看NFS服務器「導出」各文件系統
客戶端使用mount命令掛載
mount -t nfs NFS_SERVER:/path/to/some_export /path/to/
some_where
服務器端:
mkdir /shared
vim /etc/exports
/shared 192.168.2.156/16(ro)
service nfs restart
showmount -e 192.168.225.238
客戶端:
mount -t nfs 192.168.225.238:/shared /mnt/nfs
文件屬性(ro,rw,sync,async,root_squash:將管理員映射成來賓帳號,no_root_squash,all_squash,anonuid,anongid)
setfacl 能夠以更詳細的劃分權限
讓mountd,rquotad 監聽在固定端口上
vim /etc/sysconfig/nfs
monutd_port=892
rpcinfo -p localhost 查看當前監聽的端口
LINUX:網絡防火牆
netfilter: 框架
iptables: 數據報文過濾,net,mangle等規則生成的工具
hook function :鉤子函數
prerouting
input
output
forward
postrouting
filter(過濾):
INPUT
OUTPUT
FORWARD
nat(地址轉換):
PREROUTING
POSTROUTING
mangle(拆開,修改,封裝)
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING
raw():
OUTPUT
PREROUTING
iptables [-t TABLES] COMMAND CHAIN [num] 匹配標準 -j 處理辦法
匹配標準:
通用匹配:
-s | —src : 指定原地址
-d | —dst : 指定 目標地址
-p | (tcp | udp | icmp ) :指定的協議
-i INTERFACE :指定數據報文流入的接口,可用於定義標準蓮(INPUT,PREROUTING,FORWARD)
-o INTERFACE : 指定數據報文流出的接口 ,可用於定義標準蓮(OUTPUT,POSTROUTING , FORWARD)
擴展匹配:
1.隱式匹配:不一樣特別指明有那個模塊進行的擴展,所以使用-p(tcp|udp|icmp)
-p tcp :
—sport PORT[PORT] : 源端口
—dport PORT[PORT] : 目標端口
--tcp-flags mask comp : 只檢查mask 指定的標示位
--tcp-flags SYN,ACK,FIN,RST SYN
-p icmp:
—icmp-type
0:echo-reply
8:echo-request
-p udp
—sport
—dport
2.顯示匹配:-m 指明擴展模塊
-m EXESTION —spe-opt
state :狀態擴展
結合ip_conntrack 追蹤會話狀態
NEW : 新鏈接請求
ESTABLESHED : 已創建的鏈接
INVALID: 非法鏈接請求
RELATED:想關聯的
-m state —state NEW, ESTABLESHED -j ACCEPT
-m multiport:離散多端口匹配擴展
—source-port
—destinaion-port
-m ipragne
—src-range
—dst-range
-m connlimit:鏈接數限定
! —connlimit-above n
iptables -A INPUT -d 192.168.225.239 -p tcp —dport 80 -m connlimit ! —connlimit-above 2 -j ACCEPT
-m limit :
—limit RATE
—limit-brust 7
-m string :
—algo ( bm | kmp )
—string 「string」
-j TARGET
ACCEPT
DROP
REJECT
LOG
命令:
管理規則
-A : 附加一條規則,添加在鏈的尾部
-I CHAIN [num] : 插入一條規則,插入爲對應CHAIN上的第num條
-D CHAIN [num] : 刪除指定鏈中第num條規則
-R CHAIN[num] : 替換特定的規則
管理鏈:
-F [CHAIN]: flush 用於清空指定規則鏈 , 刪除表中的全部鏈
-P CHAIN : 設定指定鏈的默認策略
-N :自定義一條新的空鏈
-X : 刪除一個自定義空鏈
-Z : 置零全部計數鏈上的計數
-E : 重命名自定義的鏈
查看類:
-L : 顯示指定表中的全部規則 iptables -L -n -v -x
-n : 以數字格式顯示主機地址和端口號
-v : 顯示詳細信息
-x : 顯示精確值
—line-numbers : 顯示規則號碼
動做:
ACCEPT :放行
DROP : 丟棄
REJECT : 拒絕
DNAT : 目標地址轉換
SNAT : 原地址轉換
REDIRECT : 端口重定向
MASQUERADE: 地址假裝
LOG : 日誌
MARK : 標記
保存:
方法一:service iptables save
方法二:
iptables-save > /etc/syscofig/iptables.2013
iptables-restore < /etc/syscofig/iptables.2013
lsmod | grep ip
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWORD DROP
iptables -t filter -A INPUT -s 192.168.1.105/16 -d 192.168.225.239 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 192.168.225.239 -d 192.168.1.105/16 -p tcp --sport 22 -j ACCEPT
iptables -I INPUT -d 192.168.225.239 -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT -s 192.168.225.239 -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
iptables -A OUTPUT -s 192.168.225.239 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 192.168.225.239 -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -d 192.168.225.239 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.225.239 -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
一條規則放行
iptables -A INPUT -d 192.168.225.239 -m state —state ESTABLISHED -j ACCEPT
ipatbels -A INPUT -d 192.168.225.239 -p tcp -m state —state NEW,RELATED -j ACCEPT
ipatbels -A OUTPUT -s 192.168.225.239 -p tcp -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -d 192.168.225.239 -p tcp -m multiport —desinaion-ports 21,22,80 -m state —state NEW -j ACCEPT
iptables -A INPUT -p tcp -m iprange -src-range 192.168.225.239-192.168.225.255 —dport 22 -m state —state NEW,ESTABLISHED -j ACCEPT
利用iptables的recent模塊抵禦DOS攻擊
ssh:遠程鏈接
iptables -I INPUT -p tcp —dport 22 -m connlimit —connlimit-above 3 -j DROP
iptables -I INPUT -p tcp —dport 22 -m state —state NEW -m recent —set —name SSH
iptables -I INPUT -p tcp —dport 22 -m state —state NEW -m recent —update —sencond 300 —hitcount 3 -name SSH -j DROP
cat /proc/net/ip_contrack |nf_contrack
cat /proc/sys/net/ipv4/ip_conntrack_max
iptstate 查看頂部顯示的IP表狀態表條目
modprobe 內核程序移出 或者 增長
lsmod 查看模塊
裝載模塊
vim /etc/sysconfig/iptables-config
iptables 重啓會清空全部的表
從新加載 /etc/sysconfig/iptables
service iptables save 保存規則
內核編譯:
配置: .config (/proc/cpuinfo,lspci,lsusb,hal-device)
[1] 首先備份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[2] 進入yum源配置文件所在文件夾
[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[3] 下載163的yum源配置文件,放入/etc/yum.repos.d/(操做前請作好相應備份)
[4] 運行yum makecache生成緩存
yum clean all
[root@localhost yum.repos.d]# yum makecache
[5] 更新系統
[root@localhost yum.repos.d]# yum -y update
[6] 安裝vim編輯器
[root@localhost ~]# yum -y install vim*
samba 服務: 共享 文件服務器
/etc/rc.d/init.d/smb
/etc/samba
vim /etc/samba/smb.cnf
[tools]
comment = Public Stuff
path = /share/test
public = yes
writable = yes
printable = no
write list = +staff
testparm 測試語法寫的是否是有問題
service smb start
添加一個用戶
smbpasswd -a luodongyun
mysql 數據庫
單進程 多線程
約束:
域約束:數據類型約束
外鍵約束:引用完整性的約束
主鍵約束:某字段能衛衣標示此字段所屬的實體,而且不能爲空,一個表只有一個主鍵
惟一約束:每行的字段不容許出現相同值,能夠爲空 ,一張表能夠有多個
檢查性約束:age:int
數據查詢和儲存:
存儲管理器:
權限及完整性管理器
事務管理器
文件管理器
緩衝區處理器
查詢管理器:
DML解釋器:
DDL解釋器:
查詢執行引擎:
MariaDB
Percona
用戶密碼修改:
1.mysqlamdin -u USERNAME -h HOSTNAME password ‘newpass’ -p
2.mysql>SET PASSWORD FOR ‘USER’@‘HOSTNAME’=PASSWORD(‘PASS’);
3.mysql>UPDATE mysql.user SET PASSWORD=PASSWORD(‘PASS’) WHERE CONDITION ; FLUSH PRIVILEGES;
mysql 源碼安裝:
tar -zxv -f /root/cmake-2.8.4.tar.gz
cd cmake-2.8.4
./configure
make && make install
groupadd mysql
useradd -g mysql -s /bin/false -M mysql
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make && make isntall
若是出錯:
yum -y install ncurses-devel
make clean
rm -f CMakeCache.txt
rm -rf /etc/my.cnf
mysql 客戶端工具:
mysql
mysqldump
mysqladmin
mysqlcheck
mysqlimport
mysql 非客戶端工具:
myisamchk
myisampack
cd /usr/local/mysql
chown -R :mysql .
scipts/mysql_install_db —user=mysql
cp support-files/my.cnf /ect/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig —add mysqld
chkconfig —list mysqld
service mysqld start
vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
./ etc/profile.d/mysql.sh
echo $PATH
刪除兩個匿名用戶
drop user ''@'localhost' ;
drop user ''@'bogon' ;
修改密碼:
update user set password=PASSWORD(‘123456’) where user=‘root’;
show variables;
Myisam:
每表三個文件:
.frm 表結構
.MYD 表數據
.MYI 表索引
InnoDB:
全部表共享一個表空間文件:建議每表一個獨立的表空間
.frm 表結構
.ibd 表空間
mysql : \?
—user -u
—host -h
mysql>
載入sql
批處理模式
\. /tmp/test.sql 或者 mysql -uroot -p < test.sql
mysql 命令兩類:
客戶端命令:
服務器語句命令:
help COMMAND 獲取幫助
\d 定義語句結束符
\g 不管語句結束符是什麼,直接將語句送到服務器端執行
mysqladmin :
create database ;
drop databases;
ping
processlist
status
—sleep
—count
extended-status:顯示狀態量
variables:顯示服務器變量
flush-priileges:讓mysql 重讀受權表
start-slave : 啓動從服務器的複製線程
sql thread
io thread
stop-slave: 中止複製線程
show engines : 顯示引擎
show table status like ‘user' : 顯示特定表的引擎
/etc/mys.cnf->/etc/mysql/my.cnf->$MYSQL_HOME/my.cnf -> —-default-extra-file=/path/to/somefile -> ~/.my.cnf
mysqld —help —verbose :查看能夠配置的命令
出錯:
1.killall mysqld
mysql > show collation ;
mysql> show character set ;
last_insert_id(); 能夠得到上次執行的結果
SET GLOBAL sql_mode = ‘static_all_tables’;
查看狀態:
show table status like ‘table’;
顯示錶上的索引:
SHOW INDEXES FROM TABLE;
建立數據庫:
help create database;
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name CHARACTER SET [=] charset_name COLLATE [=] collation_name
刪除數據庫:
help drop database;
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
建立表(有3種方法):
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name(col_name col_defination ,constarct)
單字段:
PRIMARY KEY
UNIQUE KEY
單或多字段:
INDEX
create table tb1(id int unsigned not null auto increment primany key , name varchar(20) not null );
create table tb2(id int unsigned not null auto increment, name varchar(20) not null ,primany key(id) ,unique key(name) , index(age) );
仿照一張表建立另外一張表:
create table tb2 select * from tb1 where id <= 2 ;
仿照一張表建立一張空表:
create table tb3 like tb1 ;
鍵也稱爲約束,可用於索引,屬於特殊的索引,B+Tree
建立索引:
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX ndex_name [index_type] ON tbl_name (index_col_name,…) ;
修改表:
help alter table
alter table tb3 add starttime date
alter table tb3 rename to tb3_1 ;
外鍵(在數據字段類型統一的狀況下)(不建議使用):
alter table student add foreign key foreign_cid(cid) REFERENCES course(id);
建立索引:
help create index ;
show index from student ;
create index name_on_student on student (name) ;
DML:
SELECT
UPDATE
INSERT
DELETE
查詢語句類型:
簡單查詢
select * from tb_bame ;
select [distinct]
多表查詢
交叉鏈接:笛卡爾乘積
select * from student,course
天然鏈接
select * from student,course where student.cid =
course.id ;
外連接:
left join ..on
select * from student left join course on student.cid =
course.id ;
right join .. on
select * from student right join course on student.cid =
course.id ;
自鏈接:
select * from student as c , students as s where c.tid = s.sid ;
子查詢
比較操做中使用子查詢
select * from students where age > (select avg(age) from student );
in()
select * from students where age in (select age from student );
在form 中使用子查詢
select * from (select * from student ) as t where t.age > 20 ;
UNION 聯合查詢:s
select * from student UNION select * from teacher ;
建立視圖:
help create view ;
create view sct as select name.cname,name from student,teacher,course where student.cid =
course.id and course.tid =
teacher.id ;
查看錶怎麼創建的語句:
show create table student
清空一張表:
TRUNCATE tb_name ;
鎖表:
lock table ;
隔離級別:
READ UNCOMMITED : 讀 未提交
READ COMMITTED : 讀 提交
REPATABLE READ : 可重讀
SERIABLIZABLE : 可串行
修改變量:
SET tx_isolation = 「READ-COMMITTIED」
開始事務:
START TRANSACTION ;
提交:
COMMIT;
回滾:
ROLLBACK
select @@autocommit
關閉自動提交:
SET autocommit=0 ;
設置保存點:
SAVAPOINT point_name ;
回滾到保存點:
ROLLBACK TO point_name ;
MYSQL 用戶管理:
建立用戶
help create use ;
create user amao@‘%’ indentfied by ‘haha’;
權限:
help grant
若是忘記mysql密碼:
service mysqld stop
vim /etc/init.d/mysqld
找到start 下面 —datadir 前面加 —-skip-grant-tables —-skip-networking
update table mysql.user set password=PASSWORD(‘pass’) where user=‘root’
而後再把上面的參數取消
錯誤日誌:
通常查詢日誌:
general_log
general_log_file
log
log_output
慢查詢日誌:
long_query_time
log_slow_queries
slow_query_log
slow_query_log_file
二進制日誌:任何引發或可能引發數據庫變化的操做
複製,即時點恢復
mysqlbinlog
重放
查看當前的二進制文件
SHOW MASTER STATUS ;
SHOW BINLOG EVENTS IN 「mysql-bin.00005」;
mysqlbinlog 「mysql-bin.000005」;
刪除二進制文件:
HELP PURGE
PURGE LOGS TO ‘mysql-bin.00003’;
SHOW BINARY LOGS;
中繼日誌:
從服務上,從主服務器的二進制日誌文件中複製而來的事件,並保存爲的日誌文件
事務日誌:
事務性儲存引擎用於保證原子性,一致性,隔離性和持久性
innodb_flush_log_at_trx_commit :
0: 每秒同步,並執行磁盤flush操做
1: 每事務同步,比執行磁盤flush操做
2: 每事務同步,但不執行磁盤flush
任何產生IO的地方都是能夠優化提高的地方
MYISAM:
不支持事務
表鎖
不支持外鍵
B樹索引,FULLTEXT索引,空間索引
支持表壓縮
INNODB:
事務
行級鎖
B樹索引,聚簇索引,自適應hash索引
表空間,raw磁盤設備
mysql的備份和還原:
備份類型:
1.熱備份 、 溫備份 、冷備份
熱備份:讀寫操做不受影響
溫備份:能讀不能寫
冷備份:關機備份
2.物理備份,邏輯備份
物理備份:複製數據文件,速度快,
邏輯備份: 將數據導出文本文件中,速度慢,丟失精度,方便使用文本文件操做,可移植性強
3.徹底備份,差別備份,增量備份
徹底備份:備份所有數據(整表或整數據庫)
增量備份:僅備份上次徹底備份或增量備份的數據
差別備份:備份上次徹底備份的數據
還原:
備份什麼?
數據,二進制日誌,事務日誌,配置文件
熱備份:
MYISAM:溫備份
InnoDB:xtrackbackup,mysqldump,mysqlhotcopy
冷備份:
設置成主從服務器,從 從服務器上備份
mysql備份工具:
mysqldump : 邏輯備份,myisam(溫) innodb(熱)
mysqlhotcopy:物理備份工具,溫備份
文件系統工具:
cp: 冷備
lv:邏輯卷的快照功能,幾乎熱備
mysql> flushs tables ;
mysql > lock tables ;
建立快照,釋放鎖,然後複製數據
第三方工具:
ibbckup:商業工具
xtrackbackup:開源工具
mysql> flush tables with read lock;
mysql> flish logs ;
mysql> show binary logs ;
mysqldump DB_NAME(tb1,tb2)
備份:mysqldump -uroot -p testdb > testdb.sql
導入:mysql -uroot -p testdb < testdb.sql
unlock tables;
—-master-data = (0|1|2)
0 : 不記錄二進制文件 日誌及數量
1 : 以 change master to 的方式 記錄位置 ,可用於恢復後直接從服務器啓動
2 : 以 change master to 記錄位置,默認被註釋掉的
mysqldump -uroot -p --master-data=2 testdb > testdb-`date +%F-%H-%M-%S`.sql
—-lock-all-tables :鎖定全部表
—-flush-logs : 執行日誌flushs
若是指定庫中全部表都是innodb ,可使用—single-transaction啓動熱備
—-all-databases: 備份全部庫
—-databases DB_NAME : 備份指定庫
備份策略: 每週徹底+每日增量
徹底備份:mysqldump
增量備份:備份二進制日誌文件,天天備份以前先(flush logs)
mysqldump -uroot -p --master-data=2 --flush-logs --all-databases --lock-all-tables > all.sql
less all.sql
purge binary logs to ‘mysql-bin.000004’;(刪除二進制日誌,先備份下之前的再刪除)
show binary logs ;
flush logs ;
mysqlbinlog mysql-bin.000005 > ~/mon-increment.sql
還原:
mysql -uroot -p < all.sql
mysql -uroot -p < mon-increment.sql
INNoDB 熱備份:
—single-transaction
—flush-logs
—events
—routines
—triggers
—master-data={0|1|2}
保存爲文本:
select * into outfile ‘/tmp/t1.txt’ from t1
導入:
load data infile ‘/tmp/t1.txt’ into table t1 ;
幾乎熱備:lvm
SNAPSHOT
前提:
1.數據文件要在邏輯卷
2.此邏輯卷所在的必須有足夠的快照卷空間
使用第三方備份工具:
xtrabackup + 二進制日誌 備份
innobackupex —-user=root —-password=123456 /backup
innobackupex —-apply-log /backup/2017-09-04_00-50-31
恢復:
innobackupex —-copy-back /backup/2017-09-04_00-50-31
mysqlbinlog /root/mysql-bin.000004 > /tmp/adb.sql
mysql> set sql_log_bin=0 ;
mysql> SOURCE /tmp/adb.sql
mysql> set sql_log_bin=1 ;
作下增量備份:
innobackupex —-user=root —-password=123456 /backup
innobackupex —-incremental /backup —-incremental-basedir=/backup/2017-09-04_01-18-35
集羣:
rr輪調/wrr加權輪調
cluser:
LB 集羣
HA 集羣 : 高可用集羣
HP 集羣 : 高性能計算 超級計算機集羣
並行處理集羣:分佈式文件系統 將大任務分割爲小任務,分別進行處理的機制
調度算法 :rr / wrr
hardware:
F5 , BIGIP ,A10 , Citrix ,Netscaler
software :
四層實現:LVS 七層實現: nginx(http,smtp,pop3,imap) , haproxy (http , tcp)
LVS : linux virtual server
有三種類型:
NAT : 地址轉化
集羣節點須要和direct在同一IP網絡中
RIP 一般是私有地址,僅用於各集羣節點間的通訊
director 位於 client 和 server 之間,並負責處理進出全部通訊
realserver 必須將網關指向DIP
支持端口映射
realserver 可使用任意操做系統
較大規模應用中,director 易成爲系統瓶頸
DR : 直接路由
集羣節點跟director 必須在同一個物理網絡中
RIP 可使用公用網址,實現便捷的遠程管理和監控
director 僅負責處理入站請求,響應報文則由director直接發往客戶端
realserver集羣節點必定不能將網關指向DIP
TUN : 隧道
集羣節點能夠跨越互聯網
RIP必須是公網地址
director 僅負責處理入站請求,響應報文則由director直接發往客戶端
realserver 網關不能指向director
只有支持隧道OS才能用於realserver
不支持端口映射
iptables/netfilter 和 lvs 不能同時用
ipvasadm :
ipvs:
動態調度方法:
lc:最少鏈接
active*256 + inactive 誰的小選誰
wlc:加權最少鏈接
(active*256 + inactive) / weight
sed:最短時間望延遲
(active + 1) *256 / weight
nq :
LBLC:基於本地最少鏈接
LBLCR:基於本地的帶複製功能的最少鏈接
默認方法:wlc
先配置directer(設置另個網卡,一個橋接,一個只讀主機)
lvs nat 鏈接:
setup
ifconfig eth1
service network restart
grep -i ‘vs’ /boot/config——…
yum install ipvsadm
而後配置readserver:
準備兩個realserver(都是隻讀主機網卡)
setup 配置:和directer上的默認網關192.168...相同,ip寫192.168...本身定義
同步時間
各主機之間相互ping下,看看通不通
若是不一樣檢查下防火牆 iptales -L -n 清空:iptables -F
開始集羣:
ipvsadm -A -t 172.16.201.131:80 -s rr
ipvsadm -a -t 172.16.201.131:80 -r 192.168.225.239 -m
ipvsadm -a -t 172.16.201.131:80 -r 192.168.225.240 -m
ipvsadm -L -n
保存
service ipvsadm save
清空
ipvsadm -C
從新加入
ipvsadm -R < /etc/sysconfig/ipvsadm
網卡間的轉換要打開
cat /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
調整輪調方式:
ipvsadm -E -t 172.16.201.131:80 -s wrr
ipvsadm -e -t 172.16.201.131:80 -r 192.168.225.239 -m -w 3
ipvsadm -e -t 172.16.201.131:80 -r 192.168.225.240 -m -w 1
service ipvsadm save
注意:各節點時間誤差不能超過1秒鐘 NTP ntpdate
service ntpd stop
ntpdate 192.168.2.156
service ntpd start
ipvsadm用法:
管理集羣服務
添加:-A | -t|u|f service-address [-s scheduler]
-t : TCP 協議的集羣
-u : UDP 協議的集羣
-f : firewallMark 防火牆標記
修改:-E
刪除:-D -t|u|f service-address
#ipvsadm -A -t 172.168.100.1:80 -s rr
管理集羣服務的RealServer
添加:-a|e -t|u|f service-address -r server-address
[-g|i|m] [-w weight] [-x upper] [-y lower]
修改: -e
添加:-d
#ipvsadm -a -t 172.168.100.1:80 -r 192.168.10.8 -m
#ipvsadm -a -t 172.168.100.1:80 -r 192.168.10.9 -m
查看
-L
-n :數字格式顯示主機地址和端口
—stats:統計數據
—rate:速率
—timeout:顯示tcp,tcp和udp 的會話時長
-c:顯示當前的ipvs鏈接狀態
刪除全部集羣服務:
-C :清空ipvs規則
保存規則:
-S
#ipvsadm -S > /path
載入此前定義的規則:-R
#ipvsadm -R < /path
碰見的錯誤:
虛擬機克隆的時候出現的問題,會由於複製了網卡信息致使這個狀況,具體處理方式以下
解決辦法:
首先,打開/etc/udev/rules.d/70-persistent-net.rules內容以下面例子所示:
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:67:c5:e2", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:75:d1:d7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
也就是說,克隆的時候把網卡的MAC地址也克隆了,致使了有兩個系統有相同的MAC地址。因而,要麼把DEVICE=eth0改爲DEVICE=eth1,而後HWADDR改爲00:0c:29:75:d1:d7;要麼在70-persistent-net.rules文件中把eth0的地址改爲00:0c:29:75:d1:d7,同時把eth1的配置註釋掉,而後在ifcfg-eth0中修改HWADDR。以後再service network restart便可。
我使用的方法是 註釋eth1 把eth1的 ATTR{address}=="00:0c:29:75:d1:d7"粘貼到要使用的「eth0」 中去
而後修改配置文件 cat /etc/sysconfig/network-scripts/ifcfg-eth0 將其中的 HWADDR= 08:00:27:4f:47:15更改成剛纔是信息
Bringing up interface eth0: Error: Unknown connection: 985a38e0-eaa1-476c-bbb8-9c4bf4cd501d
chkconfig NetworkManager off
chkconfig NetworkManager on
service network restart
DR 模型的lvs :
VIP : MAC(DVIP)
kernel parameter :
arp_ignore:定義接收到ARP 請求時的響應級別;
0:默認,只要本地配置的有響應地址,就予以響應
1:僅在請求的目標地址與請求到達的接口上的時候才響應
arp_announce: 定義將本身地址向外通告時的通告級別
0: 將本機接口上的任何地址向外通告
1:試圖僅向目標網絡通告與其網絡匹配的地址
2 : 僅將與本地接口地址匹配的網絡進行通告
VIP( 172.16.100.1 ) / DIP(172.16.100.2) / RIP(172.16.100.8) 必須在同一網絡
配置:(三個都使用橋接)
DIrector
eth0: ,DIP 172.16.100.2
Eth0:0 ,VIP :172.16.100.1
RS1:
Eth0 ,rip1: 172.16.100.7
Lo,vip :172.16.100.1
RS2:
Eth0 ,rip1: 172.16.100.8
Lo,vip :172.16.100.1
Director:
ifdown eth1 down
setup
ip : 172.16.100.2
save
ipconfig eth0:0 172.16.1001.1/16
service network restart
route add -host 172.16.100.1 dev eth0:0
RS1:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=172.16.100.7
GATWAY=172.16.0.1
NETMASK=255.255.0.0
BOOTPROTO=none
service network restart
RS2:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=172.16.100.8
GATWAY=172.16.0.1
NETMASK=255.255.0.0
BOOTPROTO=none
service network restart
相互能夠通訊:
ping 172.16.100.2 172.16.100.7 172.16.100.8
RS1:
cd /proc/sys/net/ipv4/conf/
sysctl -w net.ipv4.conf.eth0.arp_announce=2
cat eh0/arp_announce
sysctl -w net.ipv4.conf.all.arp_announce=2
cat all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255
route add -host 172.16.100.1 dev lo:0
RS2:
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255
route add -host 172.16.100.1 dev lo:0
ipvsadm -C
ipvsadm -A -t 172.16.100.1:80 -s wlc
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.7 -g -w 2
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.8 -g -w 1
ipvsadm -L -n
檢查 rs 的健康情況:
方式2:echo 「ok」 > .health_check.html
echo $?
echo $?
腳本:
#!/bin/bash
VIP=192.168.0.3
CPORT=80
FALL_BACK=127.0.0.1
RIP=(「192.168.10.7」 「192.168.10.8」)
RSTATUS=(「1」 「1」)
RW=(‘2’ ’1’)
RPORT=80
let COUNT=0
TYPE=g
add(){
ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
[ $? -eq 0 ] && return 0 || return 1
}
del(){
ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
[ $? -eq 0 ] && return 0 || return 1
}
while ; do
for I in $(RS[*]) ; do
if curl —connect-timeout 1
http://$I &> /dev/null ; then
if [ $ (RSTATUS[$COUNT]) -eq 0 ]; then
add $I $(RW[$COUNT)
[ $? -eq 0 ] && RSTATUS[$COUNT] = 1
fi
else
if [ $ (RSTATUS[$COUNT]) -eq 1 ]; then
del $I
[ $? -eq 0 ] && RSTATUS[$COUNT] = 0
fi
fi
let COUNT++
done
sleep 5
done
LVS 持久鏈接
不管使用算法,LVS持久都能實現哎必定時間內,未來自同一客戶端請求派發到之前的RS
持久鏈接模板(內存緩衝區):
每個客戶端,及分配給他的RS的映射關係
ipvsadm -A | E -p timeout :
timeout : 就是設置鏈接時長
在基於SSL:用到持久鏈接
PPC:未來自於同一個客戶端dui同一個集羣服務的請求,始終定向至此前選定的RS ,持久端口鏈接:
pvsadm -A -t 172.16.100.1:80 -s rr -p 600
PCC: 持久客戶端鏈接,未來自同一客戶端對全部端口的請求,始終定向至此前選定的RS,把全部端口通通定義爲集羣服務,一概向RS轉發;(把端口定義爲0)
pvsadm -A -t 172.16.100.1:0 -s rr -p 600
PNMPP:持久防火牆標記鏈接
iptables -t mangle -A PREROUTING -d 192.168.10.3 -i eth0 -p tcp —dport 80 -j MARK —set-mark 8
iptables -t mangle -A PREROUTING -d 192.168.10.3 -i eth0 -p tcp —dport 23 -j MARK —set-mark 8
pvsadm -A -f 8 -s rr -p 600
同步更新:
方案一:rsync server ( inotify + rsync server )
方案二:sersync(金山開發的)
共享session :
能夠用mamcache, redis
高可用集羣詳解
資源約束( constraint):
排列約束( colation ):
資源是否可以運行同一節點:
socre:
正值,能夠在一塊兒
負值 , 不能在一塊兒
位置約束:
正值,傾向於此節點
負值,傾向於逃離此節點
順序約束:
定義資源啓動或關閉的次序
-inf : 負無窮
inf : 正無窮
IDE/SATA/SCSI/SAS/USB
Messaging Layer
heartbeat
corosync
cman
keepalived
ultramokey
CRM:
haresoure
pacemaker
rgmaager
高可用集羣 hearbeat 安裝和配置:(使用host-only)
ha web
node1 , node2
節點名稱:/etc/hosts
節點名稱必須和uname -n 命令的執行結果一致
ssh 互信通訊
時間必須同步
ha1 : 172.16.100.6
ha2 : 172.16.100.7
vip : 172.16.100.1
下載epel
2.Install epel-release rpm:# rpm -Uvh epel-release*rpm
3.Install heartbeat rpm package:# yum install heartbeat
HA1:
setup
static ip 172.16.100.6
netmask 255.255.0.0
gateway ip 172.16.0.1
service network restart
#配置主機名
hostname / uname -n
vim /etc/sysconfig/network
#配置雙機互信
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P 「」
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.100.7
ssh 172,16.100.7 ‘ifconfig’
#配置域名解析
vim /etc/hosts
172.16.100.6 node1.mage,com node1
172.16.100.7 node2.mage,com node2
scp /etc/hosts node2:/etc/
#清空
iptables -F
#配置時間同步
date
ntpdate 172.16.0.1
#建議使用ntpd
service ntpd stop
chkconfig ntpd off
which ntpdate
crontab -e
*/5 * * * * /sbin/ntpdate 172.16.0.1 &> /dev/null
#增長快照
#安裝heartbeat
epel 搜索 ,上面有關於一些系統上的所用到的軟件的下載
下載安裝
三個主要配置文件:
1.祕鑰文件 600權限 authkeys
2.heartbeat 服務的配置文件
ha.cf
3.資源管理配置文件 haresources
cd /etc/ha.d
ls /usr/share/doc/heartbeat-2.1.4/
cp /usr/share/doc/heartbeat-2.1.4/{authkeys,ha.cf,haresouces} ./
chmod 600 authkeys
vim authkeys
#auth1
#1 md5 salt
#bcast eth0
#node node1.mage,com
#node node2.mage,com
#ping 172.16.0.1
vim haresources
ls /usr/lib/heartbeat
yum install httpd
先手動啓動下
service httpd start
在瀏覽器上看下
而後關掉
service httpd stop
必定不能開機啓動
chkconfi httpd off
#配置
cd /etc/ha.d/
vim haresources
scp -p authkeys haresources
ha.cf node2:/etc/ha.d/
service heartbeat start
ssh node2 ‘servic hearbeat start’
tail -f /var/log/messages
HA2:
setup
static ip 172.16.100.7
netmask 255.255.0.0
gateway ip 172.16.0.1
service network restart
#配置主機名
hostname / uname -n
vim /etc/sysconfig/network
#配置雙機互信
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P 「」
ssh-copy-id -i .ssh/id_rsa.pub root@172.16.100.6
ssh 172,16.100.7 ‘ifconfig’
#配置域名解析
vim /etc/hosts
172.16.100.6 node1.mage,com node1
172.16.100.7 node2.mage,com node2
ping node1.mage,com
#清空
iptables -F
#配置時間同步
date
ntpdate 172.16.0.1
crontab -e
*/5 * * * * /sbin/ntpdate 172.16.0.1 &> /dev/null
#增長快照
進行測試:
cd /usr/lib/heartbeat
./hb_standby
掛載一個nfs服務器,做爲備用
ifonfig eth0 172.16.100.10/16
mkdir -p v /web/htdocs
vim /etc/exports
/web/htdocs 172.16.0.0/255.255.0.0 (ro)
service nfs start
showmount -e 172.16.100.10
ssh node2 「/etc/init.d/heartbeat stop 」 先停node2
service hearbeat stop 再停本身
setenforce 0
mount 172.16.100.10:/web/htdocs /mnt
ls /mnt
vim haresources
高可用集羣之heartbeat基於crm 進行資源管理
vim /ha.d/ha.cnf
#crm respawn
cd /usr/lib/heartbeat
/usr/lib/heartbeat/ha_propagate同步配置
service hearbeat start
ssh node2 「service heartbeat start」
安裝hb_gui
passwd hacluster
hb_gui &
基於hb v2 crm 來實現mysql高可用集羣
nfs:samba / sisci
nfs:mysql,app,data
/etc/my.cnf————->/etc/mysql/mysql.cnf
$MYSQL_BASE
—default-extra-file =
高可用集羣之 corosync
須要安裝packmaker , heartbeat , ,corosync
cluster-glue
cluster-glue-libs
corosync
corosynclib
hearbeat
hearbeat-libs
libesmtp
pacemaker
pacemaker-acts
pacemaker-libs
resource-angents
首先要配置 heartbeat 裏面的配置
cd /etc/corosync
cp corosync.conf.example corosync.conf
vim corosync.conf
#amf {
# mode: disable
#}
#service {
# ver: 0
# name: packmaker
#}
corosync-keygen
scp -p corosync-keygen corosync.conf
mkdir /var/log/custer
ssh node2 mkdir /var/log/custer
service pacemaker start
service corosync start
檢查是否正常
grep -e "Corosync Cluster Engine" -e "configurtion file" /var/log/cluster/corosync.log
查看初始化成員節點通知是否正常
grep TOTEM /var/log/cluster/corosync.log
查看有沒有錯誤的產生
grep ERROR: /var/log/cluster/corosync.log
查看pacemaker是否正常啓動
grep pcmk_startup /var/log/cluster/corosync.log
安裝crmsh
cd /etc/yum.repos.d/
yum -y install crmsh
#rpm –ivh pssh-2.3.1-15.1.x86_64.rpm
#yum install -y python-dateutil redhat-rpm-config
#rpm –ivh crmsh-1.2.5-55.8.x86_64.rpm
[1] 首先備份/etc/yum.repos.d/CentOS-Base.repo
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[2] 進入yum源配置文件所在文件夾
[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[3] 下載163的yum源配置文件,放入/etc/yum.repos.d/(操做前請作好相應備份)
[4] 運行yum makecache生成緩存
[root@localhost yum.repos.d]# yum makecache
[5] 更新系統(時間比較久,主要看我的網速)
[root@localhost yum.repos.d]# yum -y update
[6] 安裝vim編輯器
[root@localhost ~]# yum -y install vim*
基於drbd+corosync的高可用mysql(沒有看)
RHCS架構詳解
( LVS 負載均衡, HA 高可用 )
cobbler 自動化程序
去fedora.redhat 網站下載
前提:
1 時間同步
2 名稱解析,且主機的主機名和「uname -n 」保持一致
3 iptables 要通 ,配置每一個節點yum
RHCS :
cman , rgmanager,system-config-cluster
1.每一個集羣都有惟一的集羣名稱
2.至少有一個fence設備
3.至少有三個節點,l兩個節點的場景中使用qdisk
alias ha='for I in {1..2} ; do’
ha ssh node$I 'yum -y install scan rgmanager system-config-cluster' ;done
rpm -ql cman | less
man cman_tool
fence_manual -h
大規模高併發web服務器的相關架構:
複製的做用:
1.實現備份 2.高可用 3.容災 4.分攤負載
讀寫分離軟件:
mysql-proxy
amobea
數據拆分:
cobar
主服務器:
mkdir /mydata/data
chown mysql.mysql /mydata/data
tar zxvf mysql-5.5.54-linux2.6-i686.tar.gz
mv mysql-5.5.54-linux2.6-i686.tar.gz mysql
cd mysql
chown -R root.mysql ./*
./scripts/mysql_install_db —user=mysql —datadir=/mydata/data/
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
cp support-files/my-large.cnf /etc/my.cnf
chkconfig —add mysqld
vim /etc/my.cnf
log-bin=master-bin
log-bin-index=master-bin.index
binlog_format=mixed
server-id = 1
innodb_file_per_table=1
datadir = /mydata/data
vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin/
. /etc/profile.d/mysql.sh
mysql>grant replication slave on *.* to 'zhangsan'@'192.168.%.%' identified by 'zhangsan';
mysql>flush privileges;
mysql>show master status
mysql>show binlog events in ‘master-bin.000002’
mysql>show global variables like ‘log’
mysql>set sync-binlog=1
從服務器:
vim /etc/my.cnf
relay-log=relay-log
relay-log-index=relay-log.index
server-id=11
mysql>show slave status;
mysql>change master to master_host=‘192.168.1.113',master_user='zhangsan',master_password='zhangsan',master_log_file='master-bin.000002',master_log_pos=498
mysql>start slave
mysql>show slave status\g;
mysql>show global variables like ‘%read%’
mysql>set global read_only = 1
vim /etc/my.cnf
read_only = 1
配置mysql複製的步驟:
一.master
1.啓動二進制日誌
log-bin = master-bin
log-bin-index = master-bin.index
2.選擇惟一的server_id
server-id = {0 - 2^32}
3.建立具備複製權限的用戶
REPLICATION SLAVE
REPLICATION CLIENT
二.slave
1.啓用中繼日誌
relay-log = relay-log
relay-log-index =
2.選擇一個惟一的server_id
server-id = {0 - 2^32}
3.鏈接到主服務器,並開始複製數據
mysql> CHANGE MASTER TO MASTER_HOST=「」 , MASTER_PORT=「」 , MASTER_LOG_FILE=「」 ,MASTER_LOG_FILE_POS = 「」 ,MASTER_USER=「」,MASTER_PASSWORD=「」;
mysql> START SLAVE ;
mysql> START SLAVE IO_Thread ;
mysql> START SLAVE SQL_Thread ;
複製線程:
master:dump
slave : IO_Thread ,SQL_Thread
先配置好mysql的服務器,安裝好mysql
node1 :
vim my.cnf
datadir = /mydata/data
log-bin = mysql-bin
log-bin-index = master-bin.index
innodb_file_per_table = 1
server-id= 1
給權限從服務器:
GRANT REPLICATION SLAVE ON *.* TO ‘repluser’@‘192.168.%.%’ IDENTIFIED BY 「replpass」 ;
FLUSH PRIVILEGES;
SHOW MASTER STATUS ;
SHOW BINLOG EVENTS IN 「mysql-bin.000002」
node2 :
datadir = /mydata/data
relay-log = relay-log
relay-log-index = relay-log.index
innodb_file_per_table = 1
server-id= 11
連到主服務器上:
CHANGE MASTER TO MASTER_HOST=「192.168.225.140」 , MASTER_PORT=「3306」 ,MASTER_USER=‘repluser’ , MASTER_PASSWORD=‘replpass’ , MASTER_LOG_FILE=「mysql-bin.000002」 ,MASTER_LOG_POS = 473 ;
SHOW SLAVE STATUS \G;
START SLAVE ;
SHOW SLAVE STATUS \G;
讓從服務器變成只讀
SHOW GLOBAL VARIABLES LIKE ‘read%’
vim /etc/my.cnf
read-only=on
sync-binlog=on
在主服務器上設定 ,用於事務安全
cd /lib/plugin
設置半同步步驟:
在master和slave的mysql命令運行以下:
on master :
mysql> INSTALL PLUGIN rpl_semi_sync_matser SONAME ‘semisync_master.so’
mysql> SET GLOBAL rpl_semi_sync_matser_enabled = 1 ;
mysql> SET GLOBAL rpl_semi_sync_matser_timeout = 1000 ;
on slave :
mysql> INSTALL PLUGIN rpl_semi_sync_slove SONAME ‘semisync_slove.so’
mysql> SET GLOBAL rpl_semi_sync_slove_enabled = 1 ;
mysql> STOP SLAVE IO_THREAD ; STOP SLAVE IO_THREAD ;
在Master和Slave的my.cnf中編輯:
on master:
[mysqld]
rpl_semi_sync_matser_enabled = 1
rpl_semi_sync_matser_timeout = 1000
on slave :
[mysqld]
rpl_semi_sync_slove_enabled = 1
查看服務器上semi_sync是否是開啓:
mysql> SHOW GLOBAL STATUS LIKE ‘rpl_semi%’
管理工具:
percona
設置主主複製:
1.在兩臺服務器上各創建y一個具備複製權限的用戶;
2.修改配置文件;
#在主服務器上
[mysqld]
server-id=10
log-bin=mysql-bin
relay-log=relay-log
relay-log-index=relay-log.index
auto-increment-increment=2
auto-increment-offset=1
#在從服務器上
[mysqld]
server-id=20
log-bin=mysql-bin
relay-log=relay-log
relay-log-index=relay-log.index
auto-increment-increment=2
auto-increment-offset=2
3.若是此時兩臺服務器都爲新創建,且無其餘寫入操做,各服務器只需記錄當前z本身二進制日誌文件及事件位置,以做爲另外的服務器複製的起始位置
server1 | mysql> SHOW MASTER STATUS \G ;
server2 | mysql> SHOW MASTER STATUS \G ;
4.各服務器接下來指定另外一個服務器做爲本身的主服務器:
server1 | mysql> CHANGE MASTER TO MASTER_HOST=「192.168.225.135」 , MASTER_PORT=「3306」 ,MASTER_USER=‘repluser’ , MASTER_PASSWORD=‘replpass’ , MASTER_LOG_FILE=「mysql-bin.000002」 ,MASTER_LOG_POS = 473 ;
server1 | mysql> CHANGE MASTER TO MASTER_HOST=「192.168.225.140」 , MASTER_PORT=「3306」 ,MASTER_USER=‘repluser’ , MASTER_PASSWORD=‘replpass’ , MASTER_LOG_FILE=「mysql-bin.000002」 ,MASTER_LOG_POS = 473 ;
MYSQL主從複製——MySQL-5.6基於GTID及多線程的複製:
master:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/mydata/data
innodb_file_per_table=ON
server-id=1
socket=/tmp/mysql.sock
log-bin=master-bin
log-bin=master-bin.index
binlog-format=ROW
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
report-port=3306
port=3306
report-host=192.168.1.113
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.18.%' IDENTIFIED BY 'replpass';
mysql> flush privileges;
若是 不能登陸,刪除空的用戶,而後flush
slave:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/mydata/data
innodb_file_per_table=ON
server-id=11
socket=/tmp/mysql.sock
log-bin=master-bin
relay-log = relay-log
relay-log-index = relay-log.index
binlog-format=ROW
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
report-port=3306
port=3306
report-host=192.168.1.114
show global variables like ‘%uuid%’;
change master to master_host='192.168.1.113', master_user='lisi',master_password='123456',master_auto_position=1;
mysql-proxy:
另外一個服務器:
vim /etc/profile.d/mysql-proxy.sh
export PATH=$PATH:/usr/local/mysql-proxy/bin
. /etc/profile.d/mysql-proxy.sh
mysql-proxy --daemon --log-level=debug --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="192.168.1.113:3306" --proxy-read-only-backend-addresses="192.168.1.114:3306" --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"
192.168.1.113 master
grant all on *.* to 'root'@'%' identified by '123456';
flush privileges ;
能夠用mysql的
mysql -uroot -p -h192.168.1.112 --port=4040
mysql 工具:mysqlreplicate , mysqlrplcheck , mysqlrplshow ,mysqlfailover , mysqlrpladmin
在mysql5.6中使用複製功能的時候,其服務器配置【mysqld】中至少應該定義以下選項
binlog-format:二進制日誌格式,有row,statement和mixed幾種類型:
須要注意的是:當設置隔離級別爲READ
COMMITED 必須設置二進制日誌格式爲ROW,如今MYSQL官方認爲STATEMENT這個y已經再也不適合繼續使用,但mixd類型在默認事務隔離級別下,可能致使主從數據不一致
log-slave-updates , gtid-mode , enforce-gtid-consistency,report-port和report-host : 用於啓動 GTID 及知足 附屬的其餘需求
master-info-repository 和 relay-log-info-repository :啓用此兩項和,可用於實現崩潰時保證二進制功能和服務器安全
sync-master-info: 啓用可確保無信息丟失
slave-paralles-workers:設定從服務器的線程數,0 表示關閉多線程複製功能
binlog-checknum,master-verify-checknum 和 slave-sql-verify-checknum :啓用複製有關的校驗功能
binlog-rows-query-log-events:啓用之可用於在二進制日誌記錄相關信息,可下降故障排查的複雜度
log-bin:啓用二進制文件
server-id:同一個複製拓撲中的全部服務器的id號必須惟一
讀寫分離軟件:
mysql proxy(lua)
amoeba(java)
cobar(java)
mysqlDB 封閉 ,關注下MariaDB,PerconaDB
nginx1.4 安裝
groupadd -r -g 108 nginx
useradd -r -g 108 -u 108 nginx
rpm -ql pcre-devel
yum install pcre-devel
nguni 配置:
location {= | ~ | ~* | ^~ | } uri {…}
location URI {}:
對當前路徑及子路徑下的全部對象生效
location = URI {} :
精確匹配指定路徑,不包括路徑,所以,只對當前資源生效
location ~ URI
localtion ~* URI {}:
模式匹配URI ,此處的URI可使用正則表達式,~區分大小寫,~*不區分大小寫
location ^~ URI{}:
不使用正則表達式
反向代理
location /forum/ {
}
location ~ ^/forum {
}
upstream websrvs{
ip_bash;
server 172.16.100.6 weight=1 max_fails=2 fail_timeout=2
server 172.16.100.7 weight=1 max_fails=2 fail_ttimeout=2
#server 127.0.0.1:8080 weight=1 backup 這個是代理到錯誤頁
}
server {
listen 80 ;
index index.html ;
proxy_set_header X-Real-IP $remote_addr;
proxy_path first ;
}
server{
listen 8080 ;
server_name localhost;
index index.html;
root /html/errorpage;
}
nginx :
cache : 共享內存,儲存鍵和緩存對象
磁盤空間:存儲源數據
proxy_cache_path:不能定義在server{}中
proxy_cache_path /nginx/cache/first levels=1:2 keys_zone first:20m max_size=1g;
查看緩存命中狀態:
add_header X-Cache 「$upstream_cache_status from $server_addr」;
php服務器
upstream phpsrvs{
server1
server2
}
圖片突兀器:
upstream imgsrvs{
server1
server2
}
靜態資源及文件服務器:
upstream staticfilesrvs{
server1
server2
}
location / {
root /web/roots;
index index.php;
}
location ~*\.php$ {
}
location ~*\.(gif|png|joeg|jpg)${
}
rewrite url 模塊:(用在location裏)
if(condition ){
}
location /image/ {
}
location / {
root html;
index index.html;
}
last : 本次重寫以後,重啓下一次檢查
讀寫分離:
location / {
if($request_method = ‘PUT’ ){
proxy_pass 172.16.100.18;
}
}
防盜鏈:
location ~* \.(gif|jpg|png|swf|flv)$ {
root html
if($invalid_referer){
#return 404 ;
}
}
memcached 安裝和配置:
內存緩存服務器:48byte-1M
buddy system : 夥伴系統
避免內存外碎片
haproxy : 工做在7層的 反向代理服務器
keeplive + nginx keeplive + haproxy keeplive+lvs 三種經常使用的前端負載均衡
好用的緩存服務器:varnish
早期的緩存服務器:squid
cpu 優化: 若是是numad 架構
運行在linux 上面的虛擬化技術
xen虛擬化及domU的實現
xen 和 kvm 都是虛擬化技術
xen:本身百度,
kvm:本身百度
openstack:構建私有云
google pagerank : google的 網頁排名算法
學習hadoop的過程:
1.安裝配置HDFS
2.安裝配置MapReduce
3.HBase
4.Hive
5.sqoop
6.flume/scribe/chukwa
mysql優化思路及框架:
1.sql語句的優化;
2.索引的優化;
3.數據結構的優化;
4.InnoDB表的優化;
5.Memory表的優化;
6.理解查詢執行計劃;
7.緩衝和緩存
8.鎖優化;
9.MYSQL服務器優化;
10.性能評估;
11.mysql優化內幕
去mysql 查詢explain 的優化:
索引分爲:
1.B樹索引:
適用全鍵值,鍵值範圍或左前綴查找
侷限性:
1):若是不是從最左開始,索引沒有用;where name like ‘jjj%’;
2):不能跳過索引中的列;where name like ‘kkk%’ and salary>3000;
3):存儲引擎不能優化訪問任何一個範圍條件右邊的列;
Hash索引(速度快):
適合精確查找
只支持適用 = IN() <=> 條件進行的比較;
缺陷:(1) 沒法適用索引排序(2)不支持部分鍵匹配
2.主索引 輔助索引
explain 顯示執行計劃,在每句查詢語句前面加;
type:通常出現all,index ,range ,索引須要優化
企業級監控———SNMP實戰和原理:
工具:SNMP , RRDTool , cacti , Nagios
SNMP+RRDTool+cacti;
安裝net-snmp / net-sump-utils
service snmpd start
rpm 安裝製做:
cd /usr/src/
rpmbuild --showrc
su - luodongyun
vim .rpmmacros
#%_topdir /home/luodongyun/rpmbuild
mkdir -pv rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
rpmbuild --showrc | grep _topdir
掛載:
fdisk /dev/sdb
n
p
w
格式化:
mkfs -t ext4 /dev/sdb1
掛載:
mount /dev/sdb1 /mnt/sdb1
按卷標掛載:
e2label /dev/sdb1 web
mount -L 「web」 /web
自動掛載
/etc/fstab
/dev/sdb1 /mnt/sdb1 ext4 defaults 0 0
mysql