第十五章 LVM管理和ssm存储管理器使用 随堂笔记
第十五章 LVM管理和ssm存储管理器使用
本节所讲内容:
15.1 LVM的工作原理
15.2 创建LVM的基本步骤
15.3 实战-使用SSM工具为公司的邮件服务器创建可动态扩容的存储池
LVM的基本概念
实战场景:对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办?
答:只能换一个更大的磁盘。 如果用了一段时间后, 空间又不够了,怎么办?再加一块更大的?换磁盘的过程中,还需要把数据从一个硬盘复制到另一个硬盘,过程太慢了。
解决方案:使用LVM在线动态扩容
15.1 LVM的工作原理
LVM( Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘
它就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
15.1.1 LVM常用的术语
物理存储介质(The physical media):LVM存储介质可以是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用
物理卷PV(physical volume) :物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数,创建物理卷它可以用硬盘分区,也可以用硬盘本身;
卷组VG(Volume Group) :一个LVM卷组由一个或多个物理卷组成
逻辑卷LV(logical volume) :LV建立在VG之上,可以在LV之上建立文件系统
PE(physical extents) :PV物理卷中可以分配的最小存储单元,PE的大小是可以指定的,默认为4MB
LE(logical extent) : LV逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应
最小存储单位总结:
名称 最小存储单位
硬盘 扇区(512字节)
文件系统 block(1K或4K )# mkfs.ext4 -b 2048 /dev/sdb1 ,最大支持到4096
raid chunk (512K) #mdadm -C -v /dev/md5 -l 5 -n 3 -c 512 -x 1 /dev/sde{1,2,3,5}
LVM PE (4M) # vgcreate -s 4M vg1 /dev/sdb{1,2}
LVM主要元素构成:
总结:多个磁盘/分区/raid-》多个物理卷PV-》合成卷组VG-》从VG划出逻辑卷LV-》格式化LV挂载使用
15.1.2 LVM优点
使用卷组,使多个硬盘空间看起来像是一个大的硬盘
使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf
在使用逻辑卷时,它可以在空间不足时动态调整它的大小
在调整逻辑卷大小时,不需要考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间
可以在线对LV,VG 进行创建,删除,调整大小等操作。LVM上的文件系统也需要重新调整大小。
允许创建快照,可以用来保存文件系统的备份。
RAID+LVM一起用:LVM是软件的卷管理方式,而RAID是磁盘管理的方法。对于重要的数据,使用RAID来保护物理的磁盘不会因为故障而中断业务,再用LVM用来实现对卷的良性的管理,更好的利用磁盘资源。
15.2创建LVM的基本步骤
1) 物理磁盘被格式化为PV,(空间被划分为一个个的PE) #PV包含PE
2) 不同的PV加入到同一个VG中,(不同PV的PE全部进入到了VG的PE池内) #VG包含PV
3) 在VG中创建LV逻辑卷,基于PE创建,(组成LV的PE可能来自不同的物理磁盘) #LV基于PE创建
4) LV直接可以格式化后挂载使用 #格式化挂载使用
5) LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据
15.2.1 lvm常用的命令
功能
|
PV管理命令
|
VG管理命令
|
LV管理命令
|
scan 扫描
|
pvscan
|
vgscan
|
lvscan
|
create 创建
|
pvcreate
|
vgcreate
|
lvcreate
|
display显示
|
pvdisplay
|
vgdisplay
|
lvdisplay
|
remove 移除
|
pvremove
|
vgremove
|
lvremove
|
extend 扩展
|
|
vgextend
|
lvextend
|
reduce减少
|
|
vgreduce
|
lvreduce
|
下面的操作会用的一些查看命令:
查看卷名
|
简单对应卷信息的查看
|
扫描相关的所有的对应卷
|
详细对应卷信息的查看
|
物理卷
|
pvs
|
pvscan
|
pvdisplay
|
卷组
|
vgs
|
vgscan
|
vgdisplay
|
逻辑卷
|
lvs
|
lvscan
|
lvdisplay
|
15.2.2 创建并使用LVM逻辑卷
1、 创建PV
添加一个sdb磁盘
[root@xuegod63 ~]# fdisk /dev/sdb #创建4个主分区,每个分区1G
[root@xuegod63 ~]# ls /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4
设定分区类型代码:fdisk /dev/sdb ===> t ===> 选择分区号 ====> 8e ====> w
注:现在系统已经很智能了, 直接使用默认的 83 Linux分区,也可以创建pv的。
[root@xuegod63 ~]# pvcreate /dev/sdb{1,2,3,4} #创建pv
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
Physical volume "/dev/sdb4" successfully created.
[root@xuegod63 ~]# pvdisplay /dev/sdb1 #查看物理卷信息
"/dev/sdb1" is a new physical volume of "1.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 1.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID SHKFwf-WsLr-kkox-wlee-dAXc-5eL0-hyhaTV
创建vg卷组:
语法: vgcreate vg名字 pv的名字 可以跟多个pv
[root@xuegod63 ~]# vgcreate vg01 /dev/sdb1
Volume group "vg01" successfully created
[root@xuegod63 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 0 0 wz--n- 1020.00m 1020.00m
[root@xuegod63 ~]# vgdisplay vg01
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1020.00 MiB
PE Size 4.00 MiB
Total PE 255
Alloc PE / Size 0 / 0
创建LV
lvcreate -n 指定新逻辑卷的名称 -L指定lv大小的SIZE(M,G) (-l:小l 指定LE的数量) vgname
[root@xuegod63 ~]# lvcreate -n lv01 -L 16M vg01
Logical volume "lv01" created.
[root@xuegod63 ~]# lvcreate -n lv02 -l 4 vg01
Logical volume "lv02" created.
[root@xuegod63 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-a----- 16.00m
lv02 vg01 -wi-a----- 16.00m
[root@xuegod63 ~]# pvdisplay /dev/sdb1
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg01
PV Size 1.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 255
Free PE 247
Allocated PE 8 # Allocated ['æləkeɪtɪd] 分配 ,已经使用了8个PE
[root@xuegod63 ~]# vgdisplay vg01
。。。
Alloc PE / Size 8 / 32.00 MiB #已经使用8个PE,32MB
Free PE / Size 247 / 988.00 MiB
2.6 文件系统格式与挂载
[root@xuegod63 ~]# mkdir /lv01
互动: lv01 逻辑卷的路径在哪?
[root@xuegod63 ~]# ls /dev/vg01/ #查看逻辑卷
lv01 lv02
[root@xuegod63 ~]# ll /dev/vg01/lv01 #其实lv01是dm-0的软链接
lrwxrwxrwx 1 root root 7 5月 18 19:02 /dev/vg01/lv01 -> ../dm-0
[root@xuegod63 ~]# mkfs.ext4 /dev/vg01/lv01
[root@xuegod63 ~]# mount /dev/vg01/lv01 /lv01
[root@xuegod63 ~]# df -Th /lv01
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 ext4 15M 268K 14M 2% /lv01
[root@xuegod63 ~]#echo "/dev/vg01/lv01 /lv01 ext4 defaults 0 0" >> /etc/fstab
15.2.3 指定PE大小用
指定PE大小用的参数: -s ,如果存储的数据都是大文件,那么PE尽量调大,读取速度快
[root@xuegod63 ~]# vgcreate -s 16M vg02 /dev/sdb2
Volume group "vg02" successfully created
PE的大小只有为2的幂数,且最大为512M
[root@xuegod63 ~]# vgdisplay vg02
--- Volume group ---
VG Name vg02
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1008.00 MiB
PE Size 16.00 MiB #已经是16MB
15.2.4 LV扩容
首先,确定一下是否有可用的扩容空间,因为空间是从VG里面创建的,并且LV不能跨VG扩容
[root@xuegod63 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 2 0 wz--n- 1020.00m 988.00m
vg02 1 0 0 wz--n- 1008.00m 1008.00m
用的命令如下:
extend扩展
|
vgextend
|
lvextend
|
扩容逻辑卷
[root@xuegod63 ~]# lvextend -L +30m /dev/vg01/lv01
说明:在指定大小的时候,扩容30m和扩容到30m是不一样的写法
扩容30m ====> -L +30M
扩容到30m =====> -L 30M
[root@xuegod63 ~]# lvextend -L +30m /dev/vg01/lv01
Rounding size to boundary between physical extents: 32.00 MiB.
Size of logical volume vg01/lv01 changed from 16.00 MiB (4 extents) to 48.00 MiB (12 extents).
Logical volume vg01/lv01 successfully resized.
[root@xuegod63 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 48.00m #LV已经扩容成功
lv02 vg01 -wi-a----- 16.00m
[root@xuegod63 ~]# df -Th /lv01
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 ext4 15M 268K 14M 2% /lv01
注:可以看到LV虽然扩展了,但是文件系统大小还是原来的,下面开始扩容文件系统
ext4文件系统扩容使用命令语法: resize2fs 逻辑卷名称
xfs文件系统扩容使用命令语法: xfs_growfs 挂载点
resize2fs和xfs_growfs 两者的区别是传递的参数不一样的,xfs_growfs是采用的挂载点;resize2fs是逻辑卷名称,而且resize2fs命令不能对xfs类型文件系统使用
[root@xuegod63 ~]# resize2fs /dev/vg01/lv01
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /lv01; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg01/lv01 is now 49152 blocks long.
[root@xuegod63 ~]# df -Th /lv01
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 ext4 46M (扩容成功)522K 43M 2% /lv01
[root@xuegod63 ~]# lvextend -L 80M -r /dev/vg01/lv01 #直接扩容到80M空间,一步到位,不用再扩文件系统了
[root@xuegod63 ~]# df -T /lv01/
文件系统 类型 1K-块 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 ext4 78303 776 73761 2% /lv01
[root@xuegod63 ~]# df -Th /lv01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 ext4 77M 776K 73M 2% /lv01
15.2.5 VG扩容
[root@xuegod63 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 2 0 wz--n- 1020.00m 924.00m
vg02 1 0 0 wz--n- 1008.00m 1008.00m
vg扩容的场景:vg卷组中的空间不了够,需要添加新的硬盘进来
[root@xuegod63 ~]# pvcreate /dev/sdb3 # 创建pv
[root@xuegod63 ~]# vgextend vg01 /dev/sdb3 #扩容成功
Volume group "vg01" successfully extended
[root@xuegod63 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 2 2 0 wz--n- 1.99g <1.90g
vg02 1 0 0 wz--n- 1008.00m 1008.00m
15.2.6 LVM缩小
互动:LVM可以动态增加,可以动态缩小吗?
答:LVM可以动态增加,也可以动态缩小,但是XFS不支持动态缩小,所以我们无法实现基于xfs的动态缩小。btrfs文件系统支持在线缩小。
[root@xuegod63 ~]# lvreduce -L -20m /dev/vg01/lv01
WARNING: Reducing active and open logical volume to 60.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg01/lv01? [y/n]: y
Size of logical volume vg01/lv01 changed from 80.00 MiB (20 extents) to 60.00 MiB (15 extents).
Logical volume vg01/lv01 successfully resized. #缩小成功
但是文件系统没有缩小成功:
[root@xuegod63 ~]# df -h /lv01/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg01-lv01 77M 776K 73M 2% /lv01 #发现文件系统上空间没有变
[root@xuegod63 ~]# lvextend -L 10M -r /dev/vg01/lv01 #这两个命令也是不能执行成功的
[root@xuegod63 ~]# resize2fs /dev/vg01/lv01 #这两个命令也是不能执行成功的
VG的缩减,要保证你的物理卷是否被使用,是因为它无法缩减一个正在使用的PV
[root@xuegod63 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 2 2 0 wz--n- 1.99g <1.92g
vg02 1 0 0 wz--n- 1008.00m 1008.00m
[root@xuegod63 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 1020.00m 944.00m
/dev/sdb2 vg02 lvm2 a-- 1008.00m 1008.00m
/dev/sdb3 vg01 lvm2 a-- 1020.00m 1020.00m
/dev/sdb4 lvm2 --- 1.00g 1.00g
[root@xuegod63 ~]# cp -r /boot/grub /lv01/ #复制一些测试数据
[root@xuegod63 ~]# vgreduce vg01 /dev/sdb1 #将sdb1移出失败,因sdb1正在被使用
Physical volume "/dev/sdb1" still in use
互动:如果sdb1是一个磁盘阵列,而这个磁盘阵列使用年代太久,我们必须移出怎么办?
移动数据:
[root@xuegod63 ~]# pvmove /dev/sdb1 /dev/sdb3 #将sdb1上数据移到新增加sdb3 pv 上
/dev/sdb1: Moved: 23.53%
/dev/sdb1: Moved: 76.47%
/dev/sdb1: Moved: 100.00%
[root@xuegod63 ~]# vgreduce vg01 /dev/sdb1 #移完数据再移出
Removed "/dev/sdb1" from volume group "vg01"
[root@xuegod63 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb2 vg02 lvm2 a-- 1008.00m 1008.00m
/dev/sdb3 vg01 lvm2 a-- 1020.00m 952.00m #vg01中只有sdb3了
15.2.7 LVM删除
创建LVM流程:
pvcreate创建pv -> vgcreate创建卷组 -> lvcreate创建逻辑卷 -> mkfs.xfs lv 格式化-> mount挂载
删除LVM流程:
umount卸载 -> lvremove lv移出卷组中所有逻辑卷-> vgremove vg移出卷组-> pvremove 移出pv
[root@xuegod63 ~]# umount /lv01
[root@xuegod63 ~]# lvremove /dev/vg01/lv01
Do you really want to remove active logical volume vg01/lv01? [y/n]: y
Logical volume "lv01" successfully removed
[root@xuegod63 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv02 vg01 -wi-a----- 16.00m #已经看不到lv01
[root@xuegod63 ~]# vgremove vg01 #直接移出卷组
Do you really want to remove volume group "vg01" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume vg01/lv02? [y/n]: y
#如果卷组中还有lv,移出时,会提示,是否也移出,咱们这里直接移出
Logical volume "lv02" successfully removed
Volume group "vg01" successfully removed
[root@xuegod63 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg02 1 0 0 wz--n- 1008.00m 1008.00m #没有vg01
移出pv sdb1
[root@xuegod63 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb2 vg02 lvm2 a-- 1008.00m 1008.00m
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdb4 lvm2 --- 1.00g 1.00g
[root@xuegod63 ~]# pvremove /dev/sdb1 #已经移出
Labels on physical volume "/dev/sdb1" successfully wiped.
[root@xuegod63 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb2 vg02 lvm2 a-- 1008.00m 1008.00m
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdb4 lvm2 --- 1.00g 1.00g
15.3 实战-使用SSM工具为公司的邮件服务器创建可动态扩容的存储池
安装SSM ssm工具了一下
[root@xuegod63 ~]# yum -y install system-storage-manager
SSM:检查关于可用硬驱和LVM卷的信息。显示关于现有磁盘存储设备、存储池、LVM卷和存储快照的信息。
15.3.1 查看磁盘信息
列出设备信息
root@xuegod63 ~]# ssm list dev
------------------------------------------------------------
Device Free Used Total Pool Mount point
------------------------------------------------------------
/dev/fd0 4.00 KB
/dev/sda 20.00 GB PARTITIONED
/dev/sda1 200.00 MB /boot
/dev/sda2 1.00 GB SWAP
/dev/sda3 10.00 GB /
/dev/sdb 20.00 GB
/dev/sdb1 1.00 GB
/dev/sdb2 1008.00 MB 0.00 KB 1.00 GB vg02
/dev/sdb3 1.00 GB
/dev/sdb4 1.00 GB
存储池信息
[root@xuegod63 ~]# ssm list pool
----------------------------------------------------
Pool Type Devices Free Used Total
----------------------------------------------------
vg02 lvm 1 1008.00 MB 0.00 KB 1008.00 MB
----------------------------------------------------
15.3.2 实战:为公司的邮件服务器创建基于LVM的邮件存储
实战场景:公司要搭建一台邮件服务器,考虑到后期公司发展规模扩张,需要你创建一个名为mail 的LVM存储池,并在其上创建一个名为mail-lv,初始大小为1G的lvm卷,格式化为xfs文件系统,并将其挂载/mail-lv目录下。此存储池中的空间后期要可以动态扩容。
将sdb上所有卷组信息删除:
[root@xuegod63 ~]# vgremove vg02
[root@xuegod63 ~]# pvremove /dev/sdb{1,2,3,4}
创建目录
[root@xuegod72 ~]# mkdir /mail-lv
用的命令如下:
ssm create -s -n --fstype -p 自动把设备变成pv,创建vg , lv ,格式化文件系统, 自动挂载
[root@xuegod63 ~]# ssm create -s 1G -n mail-lv --fstype xfs -p mail /dev/sdb[1-4] /mail-lv
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
Physical volume "/dev/sdb4" successfully created.
Volume group "mail" successfully created
WARNING: ext4 signature detected on /dev/mail/mail-lv at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/mail/mail-lv.
Logical volume "mail-lv" created.
meta-data=/dev/mail/mail-lv isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@xuegod63 ~]# df -h /mail-lv/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/mail-mail--lv 1014M 33M 982M 4% /mail-lv
总结:
15.1 LVM的工作原理
15.2 创建LVM的基本步骤
15.3 实战-使用SSM工具为公司的邮件服务器创建可动态扩容的存储池
第十五章 LVM管理和ssm存储管理器使用 随堂笔记的更多相关文章
- 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...
- 1-18-2 LVM管理和ssm存储管理器使用&磁盘配额 (二)
LVM管理和ssm存储管理器使用&磁盘配额 (二) 内容如下: ü LVM快照 ü ssm存储管理器的使用 ü 磁盘配额 第1章 LVM快照 lvm快照:为了保持系统的一致性,我们先做 ...
- 1-18-1 LVM管理和ssm存储管理器使用&磁盘配额(一)
LVM管理和ssm存储管理器使用&磁盘配额(一) LVM逻辑卷的管理 问题:对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办? 因为如果要把一个分区的内容都拷贝到另一个分区上 ...
- 1-16-2 LVM管理和ssm存储管理器使用&磁盘配额
ssm存储管理器使用&磁盘配额 ssm存储管理器使用 系统存储管理器的使用 系统存储管理器(又称ssm,即system-storage-manager),是RHEL7/CentOS7新增的功能 ...
- 1-16-1 LVM管理和ssm存储管理器使用&磁盘配额
大纲: 1-1- LVM逻辑卷的管理 1-2- SSM管理工具的使用 1-3- 磁盘配额技巧 ====================================== 问题描述: 当我们需要在一个 ...
- 第二十二章 跳出循环-shift参数左移-函数的使用 随堂笔记
第二十二章 跳出循环-shift参数左移-函数的使用 本节所讲内容: 22.1 跳出循环 22.2 Shift参数左移指令 22.3 函数的使用 22.4 实战-自动备份mysql数据库和nginx服 ...
- 15第十五章UDF用户自定义函数(转载)
15第十五章UDF用户自定义函数 待补上 原文链接 本文由豆约翰博客备份专家远程一键发布
- 《Linux命令行与shell脚本编程大全》 第十五章 学习笔记
第十五章:控制脚本 处理信号 重温Linux信号 信号 名称 描述 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL 无条件终止 11 SEGV 段错误 15 TERM 尽可能 ...
- CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章
第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...
随机推荐
- Codeforces 755C:PolandBall and Forest(并查集)
http://codeforces.com/problemset/problem/755/C 题意:该图是类似于树,给出n个点,接下来p[i]表示在树上离 i 距离最远的 id 是p[i],如果距离相 ...
- FluentValidation:一个非常受欢迎的,用于构建强类型验证规则的.NET 库
1. FluentValidation:一个非常受欢迎的,用于构建强类型验证规则的.NET 库 请求参数实体定义: FluentValidation 验证类定义: 过滤器:ActionFilter中O ...
- 洛谷P1003 铺地毯 noip2011提高组day1T1
洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...
- wincc C脚本如何调用第三方动态链接库dll
就Wincc本身脚本功能而言并不强大,但是wincc 脚本提供了第三方接口,如通用的Kernel32.dll,User32.dll,Gdi32.dll,大家如果对这些API接口感兴趣,可网上查找关于w ...
- 深入学习Spring框架(四)- 事务管理
1.什么是事务? 事务(Transaction)是一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位.事务是为了保证数据库的完整性.例如:A给B转账,需 ...
- 微信小程序 textarea 层级过高的解决方式
建立一个新的textarea 组件代替原生textarea ,废话不多说,上代码 <template> <view class="ui-textarea"> ...
- Excel催化剂开源第41波-网抓网络采集类库及工具分享
在VBA开发网抓程序中,会用到xmlhttp/winHttp.winHttprequest.5.1等组件,当时笔者也是这样进入了网抓领域的,这些都是非常过时的东西,在.Net的开发中,有大量的更好用的 ...
- Minikube安装成功Kubernetes,一次过!
介绍 Minikube 是 K8S 官方为了开发者能在个人电脑上运行 K8S 而提供的一套工具.实现上是通过 Go 语言编写,通过调用虚拟化管理程序,创建出一个运行在虚拟机内的单节点集群. 注:从这里 ...
- thinkphp项目阿里云ECS服务器部署
[日记]thinkphp项目阿里云ECS服务器部署 项目本地开发告一段落.准备上传到服务器上测试 技术组成 thinkphp+mysql+阿里ECS 代码管理方式git 一.阿里ECS服务器配置 ...
- python课堂整理5---元组
一.元组 Tuple tu = (111, 22, 33, "alex", (11,22), [(33, 44)], True, ) 元组元素不可被修改,不能被增加或删除 一般 ...