shell训练营Day30
练习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写一个脚本,只要把盘符和挂载点以参数的形式提供给脚本,该脚本就可以自动格式化、挂载。
要求:
- 不用分区,直接格式化
- 格式化为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相关推荐
- SHELL训练营--day5__shell脚本(1)
shell脚本意义 shell是一种脚本语言,具备计算机语言的基本特点:逻辑判断.循环.自定义函数等. shell脚本 主要使用 linux系统的命令,来实现特定目的. 可用于自动化运维,提长运维效率 ...
- shell训练营Day18
练习31 提示用户输入网卡的名字,然后我们用脚本输出网卡的ip,需要考虑下面问题: 输入的字符不符合网卡名字规范,怎么应对. 名字符合规范,但是根本就没有这个网卡又怎么应对. #!/bin/bash ...
- shell训练营Day31
练习96 需求背景: 领导要求小明备份数据库服务器里面的100个库(数据量在几十到几百G),需要以最快的时间完成(5小时内),并且不能影响服务器性能. #!/bin/bash ##假设100个库的库名 ...
- shell训练营Day27
练习76 linux系统中,目录/root/下有一个文件ip-pwd.ini,内容如下: 10.111.11.1,root,xyxyxy 10.111.11.2,root,xzxzxz 10.111. ...
- shell训练营Day13
练习六: 写一个脚本,判断本机的80端口(假如服务为httpd)是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务, 并发邮件通知你自己.脚本写好后,可以每一分钟执行一次 ...
- 代码随想录训练营day30
题目一:重新安排行程 力扣题目链接 题目描述: 给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点.请你对该行程进行重新规划排序 ...
- shell实战训练营Day14
输入数字执行命令 输入1执行 date命令 输入2执行 ls命令 可以使用case判断 #!/bin/bash echo "cmd manu 1 date 2 ls 3 pwd" ...
- shell实战训练营Day1
1.shell基础介绍 shell是一个命令解释器.人机交互 有特定的语法 for if while 等 centos7中默认shell为bash,但也有ksh,zsh等shell 2.命令历史 hi ...
- shell实战训练营Day2
6.管道符号与作业控制 管道符 | 把左边命令输出结果交给右边执行. cat /etc/passwd | grep -i root 列出passwd中包含 root的行. 作业控制 Ctrl+ z 暂 ...
- 渗透操作系统——【靶场实战训练营】快来看看有没有你需要的
基于3个操作系统的靶场(提供镜像),讲解从只有一个IP到最终基于3个操作系统的靶场(提供镜像),讲解从只有一个IP到最终拿下机器root权限的全流程.不只讲解怎么做,并且讲解为什么这样做,教给你别的地 ...
最新文章
- C#连接Sqlite 出现:混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。的解决方案...
- 第五季1:AP模式USB-WIFI网卡移植与测试
- checkbox的全选与反选
- 宅家36天咸鱼翻身入职腾讯,值得收藏!
- mysql 参照完整性规则_MySQL存储引擎你们知道多少?
- Could not find resource——mybatis 找不到映射器xml文件
- VALSE学习(五):看图说话-Visual Question Answering as Reading Comprehension
- WordPress插件大合集会员收费下载/美化/卡密批量生成/积分功能 ErphpDown 包含9.42~~9.83版本
- Matlab中loglog函数使用
- Java字节码角度分析:Synchronized ——提升硬实力11
- 无阻塞实时检测键盘输入
- 华中科技大学有计算机科学与技术学院导师,华中科技大学计算机科学与技术学院导师简介-袁平鹏...
- Linux 中把Python3设为默认Python版本的几种方法
- 激活黑群晖Synology Active Backup for Business,黑群晖系统备份软件激活,亲测有效
- can和could的用法_can和could的用法
- 北邮计算机学院研究生信息官网,北京邮电大学
- 数据冗余技术—RAID
- cocos2d-x 横板游戏触屏人物和背景移动 方法1
- 贝叶斯网络入门系列之一:资料篇
- 物联网工程是怎样一种存在
热门文章
- kmeans算法和kmeans++
- 读书节第三日丨产品大咖荐读直播齐上阵,学院超级会员限时开抢!
- DEP机制的保护原理
- 2天玩转单反相机(第二讲)
- LeetCode.206. Reverse Linked List(反转有序链表)C++ and PYTHON
- oracle表update在等待,Oracle中如何更新一张大表记录
- vue Mutation 必须是同步函数 为什么_为什么vue组件中data必须用函数表达?
- Mongodb 3.2.X 添加admin的root账户
- APP版本更新通知流程测试要点
- 洛谷——P1507 NASA的食物计划