练习91
用shell脚本实现,部署mysql主从,假设两台机器上已经安装了mysql,并且目前无新库。

#!/bin/bash
master_ip=192.168.100.12
slave_ip=192.168.100.13
mysqlc="mysql -uroot -paminglinux"

check_ok()
{
if [ $? -ne 0 ]
then
echo "$1 出错了。"
exit 1
fi
}

fexist()
{
d=date +%F%T
if [ -f $1 ]
then
mv $1 $1
$d
fi
}

设置主mysql配置

if ! grep '^server-id' /etc/my.cnf
then
sed -i '/^[mysqld]$/a\server-id = 1001' /etc/my.cnf
fi

if ! grep '^log-bin.=.' /etc/my.cnf
then
sed -i '/^[mysqld]$/a\log-bin = aminglinux' /etc/my.cnf
fi

sed -i '/^log-bin.*/a\binlog-ignore-db = mysql ' /etc/my.cnf

/etc/init.d/mysqld restart
check_ok "主上重启mysql"

登录mysql,授权用户、锁表以及show master status。

$mysqlc <<EOF
grant replication slave on . to 'repl'@$slave_ip identified by 'yourpassword';
flush tables with read lock;
EOF
$mysqlc -e "show master status" > /tmp/master.log
file=tail -1 /tmp/master.log|awk '{print $1}'
pos=tail -1 /tmp/master.log|awk '{print $2}'

创建在从上配置和操作的脚本

f_exist /tmp/slave.sh

cat > /tmp/slave.sh << EOF
#!/bin/bash
if ! grep '^server-id' /etc/my.cnf
then
sed -i '/^[mysqld]$/a\server-id = 1002' /etc/my.cnf
fi

/etc/init.d/mysqld restart
check_ok "从上重启mysql"

$mysqlc <<EOF
stop slave;
change master to master_host="$master_ip", master_user="repl", master_password="yourpassword", master_log_file="$file", master_log_pos=$pos;
start slave;
EOF
EOF

创建传输slave.sh的expect脚本

f_exist /tmp/rs_slave.expect

cat > /tmp/rs_slave.expect <<EOF
#!/usr/bin/expect
set passwd "aminglinux"
spawn rsync -a /tmp/slave.sh root@$slave_ip:/tmp/slave.sh
expect {
"yes/no" { send "yes\r"}
"password:" { send "\$passwd\r" }
}
expect eof
EOF

执行expect脚本

chmod +x /tmp/rs_slave.expect
/tmp/rs_slave.expect
check_ok "传输slave.sh"

创建远程执行命令的expect脚本

f_exist /tmp/exe.expect

cat > /tmp/exe.expect <<EOF
#!/usr/bin/expect
set passwd "aminglinux"
spawn ssh root@$slave_ip
expect {
"yes/no" { send "yes\r"}
"password:" { send "\$passwd\r" }
}
expect "]"
send "/bin/bash /tmp/slave.sh\r"
expect "]
"
send "exit\r"
EOF

执行expect脚本

chmod +x /tmp/exe.expect
/tmp/exe.expect
check_ok "远程执行slave.sh"

主上解锁表

$mysqlc -e "unlock tables"

#!/bin/bash

while true
do
read -p "请输入你要执行的操作:(stop/start/rm) " opt
if [ -z "$opt" ]
then
echo "请输入要执行的操作。"
continue
else
break
fi
done

docker ps -a |awk '{print $1}' > /tmp/id.txt
case $opt in
stop)
for id in cat /tmp/id.txt
do
docker stop $id
done
;;
start)
for id in cat /tmp/id.txt
do
docker start $id
done
rm)
for id in cat /tmp/id.txt
do
read -p "将要删除容器$id,是否继续?(y|n)" c
case $c in
y|Y)
docker rm -f $id
;;
n|N)
echo "容器$id不会被删除。"
;;
)
echo "你只能输入'y'或者'n'。"
;;
esac
done
)
echo "你只能输入start/stop/rm。"
;;
esac

练习94
假如公司的一个业务,域名为www.aminglinux.com,现在有5台机器在跑。为了快速查看这5台机器的负载,需要你写一个Shell脚本,运行脚本后,就能一下子把5台机器的负载全部打印出来。

#!/bin/bash

for ip in cat /tmp/ip.list
do
echo $ip
ssh $ip "uptime"
done

练习95
我们使用的云主机,购买一块云盘后,默认并不是挂载状态的,用shell写一个脚本,只要把盘符和挂载点以参数的形式提供给脚本,该脚本就可以自动格式化、挂载。

要求:

  1. 不用分区,直接格式化
  2. 格式化为ext4文件系统类型

#!/bin/bash

if [ $# -ne 2 ]
then
echo "Useage $0 盘符 挂载点, 如: $0 /dev/xvdb /data"
exit 1
fi

if [ ! -b $1 ]
then
echo "你提供的盘符不正确,请检查后再操作"
exit 1
fi

echo "格式化$1"
mkfs -t ext4 $1

if [ ! -d $2 ] ;then
mkdir -p $2
fi

n=awk '$NF == "$2"' /etc/fstab|wc -l
if [ $n -eq 0 ]
then
echo "$1 $2 ext4 defaults 0 0" >> /etc/fstab
mount -a
else
echo "配置文件/etc/fstab中已经存在挂载点$2,请检查一下."
exit 1
fi

转载于:https://blog.51cto.com/12898947/2347183

shell训练营Day30相关推荐

  1. SHELL训练营--day5__shell脚本(1)

    shell脚本意义 shell是一种脚本语言,具备计算机语言的基本特点:逻辑判断.循环.自定义函数等. shell脚本 主要使用 linux系统的命令,来实现特定目的. 可用于自动化运维,提长运维效率 ...

  2. shell训练营Day18

    练习31 提示用户输入网卡的名字,然后我们用脚本输出网卡的ip,需要考虑下面问题: 输入的字符不符合网卡名字规范,怎么应对. 名字符合规范,但是根本就没有这个网卡又怎么应对. #!/bin/bash ...

  3. shell训练营Day31

    练习96 需求背景: 领导要求小明备份数据库服务器里面的100个库(数据量在几十到几百G),需要以最快的时间完成(5小时内),并且不能影响服务器性能. #!/bin/bash ##假设100个库的库名 ...

  4. shell训练营Day27

    练习76 linux系统中,目录/root/下有一个文件ip-pwd.ini,内容如下: 10.111.11.1,root,xyxyxy 10.111.11.2,root,xzxzxz 10.111. ...

  5. shell训练营Day13

    练习六: 写一个脚本,判断本机的80端口(假如服务为httpd)是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务, 并发邮件通知你自己.脚本写好后,可以每一分钟执行一次 ...

  6. 代码随想录训练营day30

    题目一:重新安排行程 力扣题目链接 题目描述: 给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点.请你对该行程进行重新规划排序 ...

  7. shell实战训练营Day14

    输入数字执行命令 输入1执行 date命令 输入2执行 ls命令 可以使用case判断 #!/bin/bash echo "cmd manu 1 date 2 ls 3 pwd" ...

  8. shell实战训练营Day1

    1.shell基础介绍 shell是一个命令解释器.人机交互 有特定的语法 for if while 等 centos7中默认shell为bash,但也有ksh,zsh等shell 2.命令历史 hi ...

  9. shell实战训练营Day2

    6.管道符号与作业控制 管道符 | 把左边命令输出结果交给右边执行. cat /etc/passwd | grep -i root 列出passwd中包含 root的行. 作业控制 Ctrl+ z 暂 ...

  10. 渗透操作系统——【靶场实战训练营】快来看看有没有你需要的

    基于3个操作系统的靶场(提供镜像),讲解从只有一个IP到最终基于3个操作系统的靶场(提供镜像),讲解从只有一个IP到最终拿下机器root权限的全流程.不只讲解怎么做,并且讲解为什么这样做,教给你别的地 ...

最新文章

  1. C#连接Sqlite 出现:混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。的解决方案...
  2. 第五季1:AP模式USB-WIFI网卡移植与测试
  3. checkbox的全选与反选
  4. 宅家36天咸鱼翻身入职腾讯,值得收藏!
  5. mysql 参照完整性规则_MySQL存储引擎你们知道多少?
  6. Could not find resource——mybatis 找不到映射器xml文件
  7. VALSE学习(五):看图说话-Visual Question Answering as Reading Comprehension
  8. WordPress插件大合集会员收费下载/美化/卡密批量生成/积分功能 ErphpDown 包含9.42~~9.83版本
  9. Matlab中loglog函数使用
  10. Java字节码角度分析:Synchronized ——提升硬实力11
  11. 无阻塞实时检测键盘输入
  12. 华中科技大学有计算机科学与技术学院导师,华中科技大学计算机科学与技术学院导师简介-袁平鹏...
  13. Linux 中把Python3设为默认Python版本的几种方法
  14. 激活黑群晖Synology Active Backup for Business,黑群晖系统备份软件激活,亲测有效
  15. can和could的用法_can和could的用法
  16. 北邮计算机学院研究生信息官网,北京邮电大学
  17. 数据冗余技术—RAID
  18. cocos2d-x 横板游戏触屏人物和背景移动 方法1
  19. 贝叶斯网络入门系列之一:资料篇
  20. 物联网工程是怎样一种存在

热门文章

  1. kmeans算法和kmeans++
  2. 读书节第三日丨产品大咖荐读直播齐上阵,学院超级会员限时开抢!
  3. DEP机制的保护原理
  4. 2天玩转单反相机(第二讲)
  5. LeetCode.206. Reverse Linked List(反转有序链表)C++ and PYTHON
  6. oracle表update在等待,Oracle中如何更新一张大表记录
  7. vue Mutation 必须是同步函数 为什么_为什么vue组件中data必须用函数表达?
  8. Mongodb 3.2.X 添加admin的root账户
  9. APP版本更新通知流程测试要点
  10. 洛谷——P1507 NASA的食物计划