vmstat命令含义

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:vmstat命令含义

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

vmstat使用方法
vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]
-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
-d:显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。
[root@localhost ~]# vmstat -n 3 3
procs ———–memory———- —swap– —–io—- –system– —–cpu——
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 43608 73448 411300 6380692 0 0 0 6 0 0 0 0 99 0 0
0 0 43608 73448 411300 6380692 0 0 0 53 1025 1281 0 0 100 0 0
0 0 43608 73448 411300 6380692 0 0 0 40 1033 1261 0 0 100 0 0
procs
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
memory
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si 由内存进入内存交换区数量。
so由内存交换区进入内存数量。
IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。
system
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
cpu
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 列显示了cpu处在空闲状态的时间百分比
Procs
r: The number of processes waiting for run time.
b: The number of processes in uninterruptible sleep.
Memory
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)
Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).
IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).
System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second.
CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.

基于innobackupex的mysql备份脚本

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:基于innobackupex的mysql备份脚本

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

#! /bin/bash
#数据库相关信息
dbuser=root
dbpasswd=password
mycnf=/etc/mysql/my.cnf
#如果bin-log没有指定路径
dir_bin=/opt/mysql/mysqldata/mysqllog
#数据库备份的路径
install_dir=/opt/MySqlBackUp
data_dir=$install_dir/data
temp_dir=$install_dir/temp
log_dir=$install_dir/logs
bin_dir=$install_dir/bin
#接受邮箱
mail=chengfei@srt.com.cn
#备份文件名、日志名、备份日志
sj=`date +\%Y``date +\%m``date +\%d``date +\%H``date +\%M``date +\%S`
datafile=$sj"_data.tar.gz"
log=$sj".log"
binlogfile=$sj"_bin.tar.gz"
#使用mysqldump备份
#是否启动dump功能(0表示不启用,1表示启用)
dump_flag=1
#需要dump出来的数据库名
dumpdb=srtair
#dump文件名
dumpfile=$sj"_"$dumpdb".sql.gz"
#是否备份至远程
#是否启用ftp传输功能
ftp_flag=0
#ftp IP地址
ftp_ip=
#ftp 用户名
ftp_user=
#ftp 密码
ftp_passwd=
#上传ftp 路径
ftp_dir=
#读取my.cnf文件
process_readconfig()
{
echo "-----------开始读my.cnf文件--`date`-------------"
#没有具体路径情况或者有具体路径
bin_log=`cat $mycnf | grep -i '^log-bin' | awk -F = '{print $2}'|sed s/\ //g`
#数据文件路径
datadir=`cat $mycnf | grep -i '^datadir' | awk -F = '{print $2}'|sed s/\ //g`
#需要判断是否有/,然后决定是否是全路径
#basedir路径
basedir=`cat $mycnf | grep -i '^basedir' | awk -F = '{print $2}'|sed s/\ //g`
}
#日志处理
process_binlog()
{
echo "……………………………开始备份日志文件--`date`………………………………">>"$log_dir/$log"
echo "……………………………开始备份日志文件--`date`………………………………"
echo "需要备份二进制日志列表……">>"$log_dir/$log"
ls -tl "$bin_log."[0-9]* >>"$log_dir/$log"
echo "开始备份二进制日志文件……"`date`>>"$log_dir/$log"
tar czvfP "$data_dir/$binlogfile" "$bin_log".[0-9]*
echo "结束备份二进制日志文件……"`date`>>"$log_dir/$log"
#删除一天以前的日志文件
echo "删除过期二进制日志文件……"`date`>>"$log_dir/$log"
echo "删除过期二进制日志列表……">>"$log_dir/$log"
find $dir_bin -type f -mtime +1>>"$log_dir/$log"
find $dir_bin -type f -mtime +1 -exec rm -f {} \;
echo "删除过期二进制日志文件结束……"`date`>>"$log_dir/$log"
echo "…………………………备份日志文件结束--`date`……………………………………">>"$log_dir/$log"
echo "…………………………备份日志文件结束--`date`……………………………………"
}
#数据备份
process_backup()
{
process_readconfig
#备份数据库
echo "……………………………开始备份数据文件--`date`………………………………"
echo "……………………………开始备份数据文件--`date`………………………………">>"$log_dir/$log"
source /root/.bash_profile
$bin_dir/innobackupex --user="$dbuser" --password="$dbpasswd" --defaults-file="$mycnf" --stream=tar "$temp_dir" 2>"$temp_dir/$sj"_tmp.log | gzip>"$data_dir/$datafile"
echo "……………………………备份数据文件结束--`date`………………………………">>"$log_dir/$log"
echo "……………………………备份数据文件结束--`date`………………………………"
cat "$temp_dir/$sj"_tmp.log>>"$log_dir/$log"
#删除7天以前备份数据和信息
echo "清理7天前备份数据与相关信息……"`date`>>"$log_dir/$log"
find $data_dir -type f -mtime +7>>"$log_dir/$log"
find $data_dir -type f -mtime +7 -exec rm -f {} \;
#mysqldump操作
if [ "$dump_flag" == 1 ]; then
echo "……………… mysqldump操作开始--`date`……………"
echo "……………… mysqldump操作开始--`date`………">>"$log_dir/$log"
 exp_sql
echo "……………… mysqldump操作结束--`date`…………">>"$log_dir/$log"
echo "……………… mysqldump操作结束--`date`……………………………"
fi
#登录mysql,切换日志
$basedir/bin/mysql -u$dbuser -p$dbpasswd<<XFF
flush logs;
exit
XFF
#备份日志文件
process_binlog
#ftp(没有写是否上传失败,成功)
if [ "$ftp_flag" == 1 ]; then
echo "……………… ftp操作开始--`date`……………"
echo "……………… ftp操作开始--`date`…………">>"$log_dir/$log"
 exec_ftp
echo "……………… ftp操作结束--`date`…………">>"$log_dir/$log"
echo "……………… ftp操作结束--`date`……………………………"
fi
#发送邮件
process_send
}
process_send()
{
  #查找错误
  grep "Error" "$temp_dir/$sj"_tmp.log > "$temp_dir/$sj".err
  IP=`/sbin/ifconfig ${eth} | grep 'inet addr:'| awk '{print $2}' | awk -F : '{print $2}'`
  IP=`echo $IP|awk '{print $1}'`
  echo `grep "innobackupex: completed OK\!" "$temp_dir/$sj"_tmp.log | awk -F : '{print $4}'|sed s/\ //g`>"$temp_dir/$sj".good
  GOOD_COUNT=`cat "$temp_dir/$sj".good |wc -l`
  ERROR_COUNT=`cat  "$temp_dir/$sj".err |wc -l`
  if [ "$ERROR_COUNT" == 0 -a "$GOOD_COUNT" == 1 ]; then
     echo "`date`-----MySql备份成功-----">>"$log_dir"/result.log
     echo "-----------------------------------">>"$log_dir"/result.log
     echo "……………………………开始发送邮件--`date`………………………………"
     echo "……………………………开始发送邮件--`date`………………………………">>"$log_dir/$log"
     echo "MySql_Backup_Succeed" | mutt -s "$IP"_MySql_Backup_Succeed -a "$log_dir/$log" ${mail}
  else
     echo "`date`-----MySql备份失败,请检查$temp_dir"/"$sj"_tmp.log>>"$log_dir"/result.log
     echo "-----------------------------------">>"$log_dir"/result.log
     echo "……………………………开始发送邮件--`date`………………………………"
     echo "……………………………开始发送邮件--`date`……………………………">>"$log_dir/$log"
     cat "$temp_dir/$sj".err  | mutt -s "$IP"_MySql_Backup_Fail -a "$temp_dir/$sj"_tmp.log ${mail}
  fi
   #删除7天前的日志文件
   find $temp_dir -type f -mtime +7 -exec rm -f {} \;
   echo "……………………………发送邮件结束--`date`………………………………">>"$log_dir/$log"
   echo "……………………………发送邮件结束--`date`………………………………"
}
#导出sql语句
exp_sql()
{
  mysqldump -u "$dbuser" -p"$dbpasswd"   --single-transaction --allow-keywords --add-locks   --add-drop-table  -F -q "$dumpdb" |gzip 1>"$data_dir/$dumpfile"
}
#ftp操作
exec_ftp()
{
  echo "#!/bin/bash">"$temp_dir/$sj"_ftp.sh
  echo "ftp -n $ftp_ip <<XFF">>"$temp_dir/$sj"_ftp.sh
  echo "user $ftp_user $ftp_passwd">>"$temp_dir/$sj"_ftp.sh
  echo "bin">>"$temp_dir/$sj"_ftp.sh
  echo "cd $ftp_dir">>"$temp_dir/$sj"_ftp.sh
  echo "lcd $data_dir">>"$temp_dir/$sj"_ftp.sh
  echo "put $datafile">>"$temp_dir/$sj"_ftp.sh
  echo "put $dumpfile">>"$temp_dir/$sj"_ftp.sh
  echo "put $binlogfile">>"$temp_dir/$sj"_ftp.sh
  echo "lcd $log_dir">>"$temp_dir/$sj"_ftp.sh
  echo "put $log">>"$temp_dir/$sj"_ftp.sh
  echo "close">>"$temp_dir/$sj"_ftp.sh
  echo "bye" >>"$temp_dir/$sj"_ftp.sh
  echo "XFF">>"$temp_dir/$sj"_ftp.sh
  chmod 777 "$temp_dir/$sj"_ftp.sh
  sh  "$temp_dir/$sj"_ftp.sh
}
#执行备份
process_backup

mysql_backup.sh程序安装说明
1、安装mysqlbackup程序
上传mysqlbackup到服务器/tmp目录
cd /tmp
unzip mysqlbackup.zip
cp /tmp/mysqlbackup/* /opt/mysql/product/5.1/bin
mkdir -p /opt/MySqlBackUp/bin
mkdir -p /opt/MySqlBackUp/data
mkdir -p /opt/MySqlBackUp/logs
mkdir -p /opt/MySqlBackUp/temp
ln -s /opt/mysql/product/5.1/bin/innobackupex /opt/MySqlBackUp/bin/innobackupex
对innobackupex进行授权
cd /opt/mysql/product/5.1/bin/
chmod +x innobackupex*
chmod +x xtrabackup*
chmod +x tar4ibd
cp /tmp/mysqlbackup/mysql_backup.sh /opt/MySqlBackUp/bin/
chmod 775 /opt/MySqlBackUp/bin/mysql_backup.sh
2、修改mysql_backup.sh中的相关数据
dbuser
dbpasswd
mail
dumpdb
3、配置mysql环境变量到root中
export MYSQL_BASE=/opt/mysql
export BASEDIR=$MYSQL_BASE/product/5.1
export DATADIR=$MYSQL_BASE/mysqldata
export LD_LIBRARY_PATH=$BASEDIR/lib:/lib:/usr/lib:/usr/local/lib
export TMPDIR=/tmp
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$BASEDIR/bin:$MYSQL_BASE:$BASEDIR:$LD_LIBRARY_PATH
添加到/root/.bash_profile文件中
4、测试备份
cd /opt/MySqlBackUp/bin
./mysql_backup.sh
5、查看备份是否成功
cat /opt/MySqlBackUp/logs/result.log
如果提示备份成功,则表示程序安装成功,可能不熟到crontab中
6、部署crontab
0 1 * * * (cd /opt/MySqlBackUp/bin;sh ./mysql_backup.sh)
说明:参数配置,均是基于按照mysql安装路径配置

删除data guard归档日志

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:删除data guard归档日志

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

Oracle Data Guard 是通过归档文件来进行数据同步的。 主库的归档文件,我们可以在RMAN 备份的时候进行删除,但是备库的归档文件无法自动删除,需要写脚本来定时删除。

#!/bin/bash
export ORACLE_HOME=/opt/oracle/product/10.2.0/db_1
export ORACLE_SID=zjch
export ARCHIVE_DIR=/opt/oracle/oradata/zjch/archive
export LOG_FILE=/home/oracle/logs/del_archive.log
echo "开始删除归档日志:`date`……">>$LOG_FILE
if [ `whoami` != 'oracle' ]
then
echo "Error: You must be oracle to execute.">>$LOG_FILE
exit 99
fi
del_seq=`ls -tr $ARCHIVE_DIR/|grep -v stdarch | head -1|cut -f2 -d_`
$ORACLE_HOME/bin/sqlplus -silent "/ as sysdba" <<XFF>tmp.log
set pagesize 0 feedback off verify off heading off echo off
select max(sequence#) from v\$ARCHIVED_LOG where APPLIED='YES';
exit;
XFF
max_sn=`cat tmp.log`
rm tmp.log
max_sn=$(( $max_sn - 20 ))
#我这里是保留最近的20个归档文件,这个具体情况自己决定
while [[ ${del_seq} -lt ${max_sn} ]]
do
  echo "${ARCHIVE_DIR}/1_${del_seq}_681145105.dbf">>$LOG_FILE
  rm ${ARCHIVE_DIR}/1_${del_seq}_681145105.dbf
  #这里是我定义归档文件的格式,具体根据自己的归档文件格式来匹配,关键是匹配日志的sequence no。
  del_seq=$(( $del_seq + 1 ))
done
echo "删除归档日志结束:`date`……">>$LOG_FILE
#清楚controlfile中信息
$ORACLE_HOME/bin/rman target / <<XIFENFEI>>$LOG_FILE
crosscheck archivelog all;
delete expired archivelog all;
YES
exit;
XIFENFEI
echo "………………………………………………………………………………………………………………………">>$LOG_FILE

重点是在读取现在存在的归档日志文件中sequence最小值时,
使用了ls -tr $ARCHIVE_DIR/|grep -v stdarch | head -1|cut -f2 -d_

shell常见使用技巧

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:shell常见使用技巧

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、正则表达式判断(bash shell)

if [[ $PARTITION_NAME =~ '^P_((20[0-9]{4})|MAX)$' ]] ; then
echo 'yes'
else
echo 'no'
fi

重点:=~[[]]

2、shell编程读取文件中的行,并循环处理

cat PARTITION_NAME.cnf | while read P_LINE
do
PARTITION_NAME=`echo $P_LINE|awk  '{print $1}'`
echo $PARTITION_NAME
:
do

重点:while read

3.kill每个关键字进程

ps -ef|grep xifenfei|grep -v grep|awk '{print $2}'|xargs kill -9

重点:awk和xargs使用

4.删除几天前文件

find ./ -type f -name "*.txt" -mtime +1|xargs rm -rf
find ./ -type f -name "*.log" -mtime +1 -exec rm -fr {} \;

重点:find/mtime/xargs(exec )

linux查看内存使用情况

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:linux查看内存使用情况

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

使用free命令查看内存使用情况
[oracle@report ~]$ free -m
total   used  free shared buffers  cached
Mem: 7958   7926   3          0          19     6942
物理已用内存 = 实际已用内存 – 缓冲 – 缓存
物理已用内存为:7926-19-6942
物理空闲内存 = 总物理内存 – 实际已用内存 + 缓冲 + 缓存
物理空闲内存:7958-7926+19+6942
应用程序可用空闲内存 = 总物理内存 – 实际已用内存
应用程序可用空闲内存:7958-7926
应用程序已用内存 = 实际已用内存 – 缓冲 – 缓存
应用程序已用内存:7926-19-6942

shell /bin/bash^M: bad interpreter报错的解决

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:shell /bin/bash^M: bad interpreter报错的解决

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

可能是你的脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.
可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的
vi filename
然后用命令
:set ff?
可以看到dos或unix的字样. 如果的确是dos格式的, 那么你可以用 set fileformat=unix 把它强制为unix格式的, 然后存盘退出.

shell 备份文件

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:shell 备份文件

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

#!/bin/bash
#文件名
file=$(date +%y%m%d%H%M)
#日志名
logfile=/home/chengfei/backup/log/file.log
echo "------"$(date +%Y-%m-%d%t%A%t%T)" Beginning backup--------" >>${logfile}
#tar打包
tar cvfz  /home/chengfei/backup/files/$(date +%y%m%d%H%M).tar.gz /home/chengfei/www/wp-content/uploads/2011/ >>${logfile}
echo "------"$(date +%Y-%m-%d%t%A%t%T)" Ending backup------" >>${logfile}
#发送邮件
tail -50 ${logfile}  | mutt -s "Blog附件备份" -a /home/chengfei/backup/files/$(date +%y%m%d%H%M).tar.gz 8chf@163.com
#删除七天以前备份
find /home/chengfei/backup/files/ -type f -mtime +7 -exec rm {} \;

crontab -e
00 04 * * * /home/chengfei/backup/script/backup_file.sh

防火墙和selinux的启动和关闭

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:防火墙和selinux的启动和关闭

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、防火墙简单管理
查看状态:service iptables status
1) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
2、selinux简单管理
1)关闭selinux
#vi /etc/selinux/config
SELINUX=enforcing
改为
SELINUX=disabled
#setenforce 0
2)开启selinux
#vi /etc/selinux/config
SELINUX=disabled
改为
SELINUX=enforcing
#setenforce 1

CentOS 5建立本地源

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:CentOS 5建立本地源

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、mkdir /media/CentOS
2、mount /dev/cdrom /media/CentOS
3、查看CentOS-Media.repo中内容
[c5-media]
name=CentOS-$releasever – Media
baseurl=file:///media/ CentOS
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-beta
3、我们只需编辑下bashurl ,将自己的光盘路径写入
4、可以使用 yum –disablerepo=\* –enablerepo=c5-media [command]
如:yum –disablerepo =* –enablerepo=c5-media install gcc 安装