文章目录

  • 备份MySQL数据库
  • 代码上线发布脚本

备份MySQL数据库

场景:
一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份

需求:
1)每天备份一次,需要备份所有的库
2)把备份数据存放到/data/backup/下
3)备份文件名称格式示例:dbname-2019-11-23.sql
4)需要对1天以前的所有sql文件压缩,格式为gzip
5)本地数据保留1周
6)需要把备份的数据同步到远程备份中心,假如本机可以直接通过rsync命令同步,同步目标地址为192.168.234.125,数据存放目录:/data/mysqlbak/
7)远程备份数据要求保留1个月

脚本:

#!/bin/bash
mysqldump="/usr/local/mysql/bin/mysqldump"
bakdir="/data/backup"
bakuser="backup"
passwd="backup123"
d1=`date +%F`
d2=`date +%d`#将后面所有的输出都写入到日志
exec &> tmp/bak.logecho "mysql bakup begin at `date`"#循环遍历数据库并导出
for db in db1 db2 db3 db4 db5
do$mysqldump -u$bakuser -p$passwd $db > $bakdir/$db-$d1.sql
done#压缩一天前的备份文件find $bakdir -type f -name "*.sql" -mtime +1 |xargs gzip#删除一周前的被封文件find $bakdir -type f -mtime +7 |xargs rm#把当天的备份文件同步到远程机器
for db in db1 db2 db3 db4 db5
dorsync -a $bakdir/$db-$d1.sql rsuser@192.168.234.125::/data/mysqlbak/$db-$d2.sql
doneecho "mysql bakup end at `date`"

补充:
1.远程机器存放的备份文件以库名-日期的具体日命名,就实现了自动保留30天(比如15号备份的文件db1-15.sql下个月1号的备份文件将会覆盖该文件)
2.当数据库较大时,使用mysqldump备份速度会非常慢,这时该使用xtarbackup工具备份或mysql主从复制

代码上线发布脚本

生产环境中一个业务通常跑在多台服务器上,也就是所谓的负载均衡,那么这些机器上运行的代码必须要保持一致,如何实现一致呢?有两种方案
1.通过共享的方式
如果机器量不多,可以使用NFS实现,当然如果要求稳定性最好是使用专业的存储设备(NAS、SAN等),这种方式架构如下:

这种架构的优点是方便维护,比如有代码更新时,只需要更新一台机器上的代码,则其他机器上都会跟着更新。缺点是,机器量大了的话,共享存储会成为瓶颈,甚至由于对文件的争抢造成性能问题。还有一点,共享存储这里是一个很大的单点隐患,不出故障一切都OK,一旦出了故障,则整个业务都挂掉,影响非常大。

2.分布式
既然通过共享的方式有不少缺点,那么就选择另外一种方式,即把代码存到每一台WEB服务器本地磁盘上,如下图所示:

这样做的好处是,没有存储性能问题,没有资源争抢冲突,也没有单点故障的隐患。缺点是,每次代码更新需要对所有web机器进行更新,比较繁琐。虽然步骤繁琐,但大多数企业都会选择该方式。

通过shell脚本+expect批量发布代码到多台web服务器:

前提:
1)提供一个存放所有web服务器的IP列表文件ip.list
2)假设所有web服务器上有一个普通用户user,密码为user123,该用户为同步代码用户
3)每次代码上线会提供一个文件列表file.list(即要更改的文件的列表)

脚本:

#/bin/bash#提醒用户,是否更新了要上线的代码列表文件
read -p "你是否已经更新了文件列表./file.list?确认请输入y或者Y,否则按其他任意键退出脚本。" c
#如果直接按回车,也会退出脚本
if [ -z "$c" ]
thenexit 1
fi
if [ $c == "y" -o $c == "Y" ]
thenecho "脚本将在2秒后,继续执行。"#每秒输出一个.共输出两个.for i in 1 2doecho -n "."sleep 1doneecho
elseexit 1
fi
#判断有无./rsync.exp文件
[ -f ./rsync.exp ] && rm -f ./rsync.exp
#定义rsync.exp
cat >./rsync.exp <<EOF
#!/usr/bin/expect
set passwd "user123"
set host [lindex \$argv 0]
set file [lindex \$argv 1]
spawn rsync -avR --files-from=\$file / user@\$host:/
expect {"yes/no" {send "yes\r"}"password:" {send \$passwd\r}
}
expect eof
EOF
chmod a+x ./rsync.exp#定义检测文件是否存在的函数
if_file_exist()
{if [ ! -f $1 ]thenecho "文件$1不存在,请检查。"exit 1
}
#ip.list为所有WEB机器的ip列表
#file.list为要同步的文件列表
if_file_exist ./ip.list
if_file_exist ./file.list
for ip in `cat ./ip.list`
do./rsync.exp $ip ./file.list
done
#善后处理
rm -f ./rsync.exp

注意:在每台web服务器上创建的代码同步用户需要有代码所在目录的写入权限

shell脚本:备份数据库、代码上线相关推荐

  1. [Shell 脚本] 备份数据库文件至OSS服务(纯shell脚本无sdk)

    背景: 凡事使用服务器搭建的网站就需要定时备份网站数据,常见的方法是打包网站目录,然后备份到FTP服务器上等.也有通过OSS SDK把备份的网站文件上传到OSS服务器上,但是通过SDK来实现,需要一定 ...

  2. shell脚本备份国产达梦数据库

    shell脚本备份国产达梦数据库代码如下: 1.配置文件: username=SYSDBA password=SSSTTTSSS ipStr=localhost portNumber=5327 bac ...

  3. shell备份mysql思路_写一个shell脚本备份mysql数据库的步骤

    写一个shell脚本备份mysql数据库的步骤 发布时间:2020-05-25 15:47:41 来源:51CTO 阅读:221 作者:三月 下文我给大家简单讲讲关于写一个shell脚本备份mysql ...

  4. shell——脚本实现数据库备份

    一.如何使用脚本对数据库进行备份 命令找出数据库: 安装数据库并进行安全初始化: 编写数据库备份脚本: 测试脚本:

  5. Linux备份MySQL xshell_linux shell脚本备份mysql数据库

    #!/bin/sh # 备份数据库 # Mysql 用户名密码 MYSQL_USER=root MYSQL_PASS=root BACKUP_DIR=/data/backup/mysql DATA_D ...

  6. linux shell脚本备份mysql数据库

    #!/bin/sh# 备份数据库# Mysql 用户名密码 MYSQL_USER=root MYSQL_PASS=root BACKUP_DIR=/data/backup/mysql DATA_DIR ...

  7. 109 个实用 Shell 脚本实例,代码清晰拿来就能用!(附pdf)

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...

  8. shell脚本备份MySQL

    逻辑备份和物理备份 逻辑备份 逻辑备份用于备份数据库的结构(CREAET DATABASE.CREATE TABLE)和数据(INSERT),这种备份类型适合数据量小.跨SQL服务器.需要修改数据等场 ...

  9. shell脚本操作数据库插入数据

    shell脚本实现添加用户 主方法:定义变量,调用函数. shell中的特殊变量 $#:脚本输入参数的个数 $? 上个命令的退出状态,或函数的返回值 $$ 当前Shell进程ID.对于 Shell 脚 ...

  10. linux mysql 写shell_Linux—编写shell脚本操作数据库执行sql

    修改数据库数据 在升级应用时,我们常常会遇到升级数据库的问题,这就涉及到sql脚本的编写. 一般我们会通过写sql脚本,然后将xxx.sql脚本放到数据库中进行source xxx.sql执行.本篇文 ...

最新文章

  1. 下面哪个字段是http请求中必须具备的_HTTP协议及其工作原理介绍
  2. cdn大全 jquery/jqueryUI/Dojo/MooTools/Prototype
  3. linux内核设计与实现---下半部和推后执行的工作
  4. 图解 CSS (1): 先做一个样式表测试工具
  5. RuoYi-Cloud 部署篇_01(windows环境 mysql +nginx版本)
  6. java程序n体问题_2n皇后问题 (Java代码)详解
  7. react-native 改变webview中字体颜色方式
  8. java动态代理模式初解
  9. 面试官:这货一听就是一个水货...
  10. 基础都掌握了却还是敲不出代码?编程新手如何快速提升coding能力?
  11. window下的git工具msysgit的使用
  12. java table 增加行_使用POI给word中的表格增加行
  13. Oracle 11g 修改表的所属表空间
  14. 链路不通或服务器没响应,连不通服务器服务怎么办(理论篇)
  15. c语言单片机定时器的应用程序,51单片机定时器中断程序(C语言)
  16. 计算机组装训练知识总结,计算机组装维护实训总结
  17. web渗透_一句话木马(webshell)_dvwa环境
  18. Taro 封装遮罩层
  19. 在真正的管理学中,人就是全部
  20. 测试小兵成长记:当家方知油盐贵

热门文章

  1. 单元测试、集成测试、系统测试、验收测试
  2. CIELab和LCH的色彩空间图
  3. scara机器人dh参数表_scara机器人技术参数
  4. Oracle 运维篇+进程追踪调试(AIX系统)
  5. IDEA 出现编译错误 Multi-catches are not supported a this language level 解决方法
  6. 详解position:sticky
  7. 删除链表的节点(JS)
  8. NFT开拓IP授权新模式
  9. tomcat 服务器无响应,关于tomcat:数据库连接池连接耗尽导致tomcat请求无响应呈现出假死状态...
  10. 【jqxGrid】jqwidgets.createInstance()方法报错的一种解决方法