mysql两个文件比较_day25:比较两个文件内容|杀进程|并发备份数据库|并发进程备份mysql库|监控全国CDN网站节点|...

1、有两个文件a.txt 和 b.txt,把 a.txt 中有的但 b.txt 中没有的行找出来,并写入列c.txt,然后计算c 的行数;

注释:比较两个文件两个文件不同,可以用的方法:diff     md5sum    grep  -vf  $1  $2(这个命令匹配$1中没有的,$2中有的)

diff: 比较两个文件内容的不同,没有不同则不输出内容;    diff   $1  $2

当 $1 内容多,则显示 < 内容;                     当$2内容多,则显示 > 内容;

[root@localhost_002 shell100]# diff 1.txt 2.txt #两个文件内容相同;

#比较两个文件,当1.txt文件内容多了,会显示在下面: < yhh

[root@localhost_002 shell100]# diff 1.txt 2.txt #1.txt文件内容多出yhh;

6d5

< yhh

#比较两个文件,当2.txt文件内容多了,会显示在下面: < yuanhaohao

[root@localhost_002 shell100]# diff 1.txt 2.txt #2.txt文件内容多出yhhaohao;

4a5

> yuanhaohao

md5sum :通过文件会返回 一个值;    md5sum  1.txt     当内容相同,则返回的字符串会相等;此处不是适用;

[root@localhost_002 shell100]# md5sum 1.txt

620dcc1ed298c34ff730989cbd4e7b06  1.txt

[root@localhost_002 shell100]# md5sum 2.txt

620dcc1ed298c34ff730989cbd4e7b06  2.txt

grep -f:会检索两个文件相同的内容部分;     grep  -f  b.txt  a.txt    匹配a.txt 中有的, b.txt中没有的;

[root@localhost_002 shell100]# cat a.txt #a.txt 文件内容;

aaa

bbb

ccc

[root@localhost_002 shell100]# cat b.txt #b.txt 文件内容;

bbb

aaa

[root@localhost_002 shell100]# grep -f b.txt a.txt #判断 a.txt 和 b.txt 共同有的内容;

aaa

bbb

[root@localhost_002 shell100]# grep -vf b.txt a.txt|wc -l #a.txt为准,判断a.txt中有,b.txt不存在的内容;

1

注释:grep   -vf   b.txt   a.txt|wc -l   表示取反,打印出a.txt中存在,b.txt不存在的文件内容;

或者用while 循环遍历 a.txt,诼行进行匹配,如果这一行在b.txt中没有,就直接重定向到c.txt;

注释:在使用 if 判断时 grep "^$line$"  才能更精确去匹配整行的内容;

grep  -vf b.txt  a.txt  这样得到的结果是 a.txt 和 b.txt 中都有的行,而要的结果是 a.txt中有, b.txt 中没有的的行,原来的基础上加上 -v 选项即可实现效果;

2、把当前用户下含有所有进程名字中含有"httpd"的进程关闭;

注释:当前用户:  $USER

[root@localhost_002 shell100]# echo $USER

root

[root@localhost_002 shell100]# ps -u $USER

注释:ps  -u  user  指定用户名 可以查看该用户下的有进程;

使用awk的$NF即最后一列的值匹配'httpd'关键字的行,再打印第一列 即目标pid,把这些 pidkill掉就可以了;

ps  -u $USER|awk '$NF ~ /httpd/ {print $1}'|xargs kill

[root@localhost_002 shell100]# ps aux |grep httpd

root 1697 0.6 1.0 261744 10992 ? Ss 20:41 0:00 /usr/local/apapche2.4/bin/httpd -k restart

daemon 1698 0.0 1.0 548572 10180 ? Sl 20:41 0:00 /usr/local/apapche2.4/bin/httpd -k restart

daemon 1699 0.0 1.0 548572 10180 ? Sl 20:41 0:00 /usr/local/apapche2.4/bin/httpd -k restart

daemon 1700 0.0 1.0 548572 10180 ? Sl 20:41 0:00 /usr/local/apapche2.4/bin/httpd -k restart

root 1783 0.0 0.0 112720 972 pts/0 R+ 20:41 0:00 grep --color=auto httpd

[root@localhost_002 shell100]# cat 62.sh

#!/bin/bash

#这个脚本用来批量杀死某个进程的脚本

#日期: 2019-01-20

#作者: yuanhh

ps -u $USER|awk '$NF ~ /httpd/ {print $1}'|xargs kill

执行脚本:

[root@localhost_002 shell100]# sh -x 62.sh

+ awk '$NF ~ /httpd/ {print $1}'

+ xargs kill

+ ps -u root

[root@localhost_002 shell100]# ps aux |grep httpd

root 1886 0.0 0.0 112720 972 pts/0 R+ 20:41 0:00 grep --color=auto httpd

注释:如上httpd 的进程以及被杀死了;

3、用 shell 脚本,以并发进程的形式将mysql 数据库所有的表备份到当前目录,并把所有的表压缩到一个压缩包里面;

假如数据库为 mysql ,用户名是 yuanhh , 密码为 nihao123!;

那么如何实现并发进程了 :  shell 中加上&可以将命令丢到后台,实现多条命令达到并发的效果;(不过要控制并发数,不然表数量大,服务资源支撑不了);

备份 表的命令:  mysqldump   -uroot  -pnihao123! mysql  tbname  >  taname.sql

解析:首先定义一个并发值变量N;使用mysql -uroot -pnihao123! mysql -e "show tables"|sed '1'd > table.txt 然后把mysql 下的表过滤出来(需要用sed 把第一行删除)并写入到临时文件;

然后wc -l 计算一下table 有多少行;用awk '{print $1}'过滤出行数;

下面那如何一次性去备份所有表,因为并发值设定的 5 ,每次只备份5个表,把表均分成5个表,保存到一个临时文件,然后用for  循环一个一个来备份;

那么如何把表均分成每个五份??? 通过wc 列出的行数$n除以 $N并发值 5 则得到临时文件的行数,然后通过split -l  5 来平均分割(xaa  xab xac  xad xae);

还要考虑到一个问题,如果表的总数小于 5 了,就没必要再分一个组了;可以使用四舍五入的函数来做;

可以写一个四舍五入的函数来定义;

div(){

n=`echo "scale=1;$1/$2"|bc`

n1=`echo "scale=1;$n+0.5"|bc`

echo $n1|cut -d . -f1

}

#######n1=$[$n/$N]

n1=`div $n $N`

备份;写一个函数(使用for循环来cat $1(xaa  xab xac  xad xae)那个文件,然后逐行导出到 $t.txt);因为逐行,所以需要时间;

myd(){  for  t  in  `cat  $1`;do   mysqldump  -uroot -pnihao123\!  mysql   $t  > $t.txt

在用一个for 循环依次把这五个文件循环备份; for  f   in    xaa  xab  xac  xad  xae;do myd  $f   &;done#这个并发的,因为是5个一起执行;

wait:因为运行以上命令需要时间,所以此处使用wait命令(当后台的所有进程执行完成后,wait才会释放);否则则处于等待状态;

[root@localhost_002 shell100]# sleep 10 &

[2] 2250

[root@localhost_002 shell100]# wait

[2]- 完成 sleep 10

脚本如下:

[root@localhost_002 shell100]# cat 63.sh

#!/bin/bash

#这个脚本用来并发备份数据库

#日期: 2019-01-20

#作者: yuanhh

#定义并发值为5

N=5

mysql -uroot -pnihao123! mysql -e "show tables"|sed '1'd > /tmp/table.txt

n=`wc -l /tmp/table.txt|awk '{print $1}'`

div(){

n=`echo "scale=1;$1/$2"|bc`

n1=`echo "scale=1;$n+0.5"|bc`

echo $n1|cut -d . -f1

}

#n1=$[$n/$N]

n1=`div $n $N`

split -l $n1 /tmp/table.txt

#备份函数; $1是一个文件名;

myd(){

for t in `cat $1`

do

mysqldump -uroot -pnihao123\! mysql $t > $t.sql 2>/dev/null

done

}

for f in xaa xab xac xad xae

do

myd $f &

done

#wait 表示等待后台进程运行完后,才会释放;

wait

tar czf mydb.tar.gz *.sql

rm -fr *.sql

执行脚本:

[root@localhost_002 shell100]# sh 63.sh

[root@localhost_002 shell100]# ls -ld mydb.tar.gz

-rw-r--r-- 1 root root 181145 1月 20 22:34 mydb.tar.gz

4、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值