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@[0-9]@\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 终止访问此挂载点的所有进程
https://www.kernel.org/ linux 内核
压缩及压缩命令:
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
[root@centos ~]# wget
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.35.tar.gz
下载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
[root@centos ~]# wget
http://www.openssl.org/source/openssl-1.0.1h.tar.gz
下载jemalloc-3.6.0.tar.bz2到/usr/local/src
[root@centos ~]# wget
http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2
下载 tengine-2.0.3.tar.gz到/usr/local/src
[root@centos ~]# wget
http://tengine.taobao.org/download/tengine-2.0.3.tar.gz
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 文本浏览器
elinks
http://www.baidu.com
服务器配置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
tar xf
httpd-2.4.4.tar.bz
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
http://rpmfind.net/ rpm 库
创建分区
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扩展的文档.
安装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
http://www.postfix.org/ 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下,看看通不通
在directer 上curl
http://192.168.225.239
http://192.168.225.240
如果不同检查下防火墙 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 $?
脚本:
vim
health_check.sh
#!/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 from
http://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
#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/ {
proxy_pass
http://192.168.100.11:8080/bbs/ ;
}
————>
http://192.168.100.11:8080/bbs/ ;
location ~ ^/forum {
proxy_pass
http://192.168.100.11:8080;
}
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/ {
rewite
http://172.16.100.19/images/
}
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