文章出處

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 查看樹目錄
獲取linux 當前最新的內核版本號www.kernel.org
查看文本
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
三、移動光標
1.H:左 L:右 J:下 K:上
2.按照單詞為單位移動,
w:移動至下一個單詞詞首
e: 移動至下一個單詞詞尾
b: 移動至下一個單詞詞首
3.行內跳轉
0 絕對行首    ^ 行首的非空白字符  s:絕對行尾
4.整段
末行模式下  直接輸行號
四、翻屏
ctrl+f 向下翻一屏
ctrl+b: 向上翻一屏
ctrl+d: 向下翻半屏
ctrl+u: 向上翻半屏
五、粘貼 p
p: 如果刪除的或復制的為整行內容,則粘貼至光標所在行的下方,如果非整行,則粘貼至光標所在行的后面
P: 如果刪除的或復制的為整行內容,則粘貼至光標所在行的上方,如果非整行,則粘貼至光標所在行的前面
六、復制命令 y  和d 一樣
七、修改 ,c 和 d 一樣
八、撤銷 ,u  ,撤銷剛才的撤銷操作,ctrl+r
九、V 是光標滑過的所有都選中
十、查找  /PATTER   ?PATTER   n/N
十一、打開多個文件 vim file1 file2 ..  退出 :qa
切換 在末行模式下 輸入:next 下個文件 :prev 上個文件 :last  最后一個文件  :first  第一個
十二、分屏模式
ctrl+w , s 水平拆分窗口
ctrl+w , V 垂直拆分窗口
在窗口鍵切換  ctrl+w  , 方向鍵
十三、和shell 交互  :! Shell命令
十四、顯示
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
file.sh  hgfs        jisuan.sh  swapfile   test      test2.sh
guazai   jisuan2.sh  project    swapfile2  test1.sh  test.sh
[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)
系統版本:CentOS Linux release 7.0.1406
安裝步驟:
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
[root@centos ~]# wget http://zlib.NET/zlib-1.2.8.tar.gz
下載 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
修改前面幾行為:
user www www;
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
events{
  use epoll;
  worker_connections 65535;
}
4.7 測試和運行
[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
[root@centos ~]# curl http://localhost
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()
 
查看本機硬件設備信息:
1、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
查看編譯情況:bash   -x   a.sh
 
 
腳本編程知識點:
變量中字符的長度:${#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(只能做測試用)
https://www.isc.org/  下載bind 包
配置文件:
/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事件記錄進日志文件
 
 
www.netcraft.com:全球互聯網產品排名
 
 
 
 
 
 
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>
ServerName d.com
DocumentRoot "/www/d.com"
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環境源碼包安裝與配置
http://pan.baidu.com/s/1nvNruzv 安裝包百度網盤地址 
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需要的最新版本庫文件,例如libxml2、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,清空防火墻規則
一、查看SELinux狀態命令:
/usr/sbin/sestatus -v #如果SELinux status參數為enabled即為開啟狀態 SELinux status: enabled getenforce ##也可以用這個命令檢查
關閉SELinux方法:
1、臨時關閉(不用重啟機器): 代碼如下: setenforce 0 #設置SELinux 成為permissive模式 setenforce 1 #設置SELinux 成為enforcing模式 2、修改配置文件需要重啟機器: 修改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
1、安裝libxml2
cd /usr/local/src/libxml2-2.6.30 ./configure --prefix=/usr/local/libxml2 make && make install
2、安裝libmcrypt
cd /usr/local/src/libmcrypt-2.5.8 ./configure --prefix=/usr/local/libmcrypt make && make install
3、安裝zlib
cd /usr/local/src/zlib-1.2.3 CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/zlib/ (用64位元的方法進行編譯) make && make install
4、安裝libpng
cd /usr/local/src/libpng-1.2.31 ./configure --prefix=/usr/local/libpng --enable-shared #--enable-shared(建立共享庫使用的GNU的libtool) make && make install
5、安裝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
6、安裝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
7、安裝autoconf
cd /usr/local/src/autoconf-2.61 ./configure make && make install
8、安裝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
9、安裝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
找到#ServerName localhost.com:80 把#去掉,再重啟apache即可沒事了
配置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擴展的文檔.
與之類似的加速模塊還有eaccelerator和apc,想了解的可以參考《eaccelerator加速》、《apc加速
安裝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/(操作前請做好相應備份)
[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
[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...自己定義
同步時間
開啟web服務并檢查curl http://localhost
各主機之間相互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 的健康狀況:
方式1 :elinks -dump http://192.168.2.130
方式2:echo “ok” >   .health_check.html
elinks -dump http://192.168.2.130/.health_check.html 
elinks -dump http://192.168.2.130/.health_check.html | grep ‘ok’  &>  /dev/null
echo $?
方式3 : curl    —connect—timeout  http://192.168.2.130  &> /dev/null
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  
1.Download the latest epel-release rpm fromhttp://dl.fedoraproject.org/pub/epel/6/x86_64/
 
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  node1.mage.com
hostname / uname -n
vim  /etc/sysconfig/network
HOSTNAME= node1.mage.com
#配置雙機互信
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
vim  ha.cf
#bcast  eth0
#node   node1.mage,com
#node   node2.mage,com
#ping 172.16.0.1
vim   haresources
ls  /usr/lib/heartbeat
yum install httpd
echo  “node1 test” > /var/www/html/index.html
先手動啟動下
service httpd start
在瀏覽器上看下
然后關掉
service httpd stop
一定不能開機啟動
chkconfi  httpd  off
 
#配置
cd /etc/ha.d/
vim haresources
#node1.mage.com  IPaddr::172.16.100.1/16/eth0  httpd
 
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  node2.mage.com
hostname / uname -n
vim  /etc/sysconfig/network
HOSTNAME= node2.mage.com
 
#配置雙機互信
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
#node1.mage.com  IPaddr::172.16.100.1/16/eth0    Filesystem::172.16.100.10:/web/htdocs::/var/www/html::nfs   httpd
 
 
 
高可用集群之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
可以查看文檔怎么配置  http://www.cnblogs.com/xiaocen/p/3705937.html
#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
 
 
 
 
CentOS 7下更改yum源與更新系統。
[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/(操作前請做好相應備份)
[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
[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/ {
}
 
http://www.mage.com/forum  會被轉發到
 
location  ~ ^/forum {
}
 
http://www.mage.com/forum  會被轉發到 服務器本身要有這個目錄
————>  http://192.168.100.11:8080/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_pass http://websrcs
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$ {
fastcgi_pass http://phpsrvs ;
}
location ~*\.(gif|png|joeg|jpg)${
proxy_pass http://imgsrvs;
}
rewrite url 模塊:(用在location里)
if(condition ){
}
location /image/ {
}
location / {
root html;
index index.html;
rewrite “^/bbs/(.*)” http://172.16.100.19/forum/$i last;
}
last : 本次重寫之后,重啟下一次檢查
讀寫分離:
location / {
proxy_pass  http://172.16.100.19;
if($request_method = ‘PUT’ ){
proxy_pass 172.16.100.18;
}
}
防盜鏈:
location ~* \.(gif|jpg|png|swf|flv)$ {
root html
valid_referers none blocked *.nginxcn.com
if($invalid_referer){
rewrite ^/wwww.nginx.cn
#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

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()