shell 备份数据库、代码上线的脚本

Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

备份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.log
echo "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
do
 rsync -a $bakdir/$db-$d1.sql rsuser@192.168.234.125::/data/mysqlbak/$db-$d2.sql
done
echo "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" ]
then
 exit 1
fi
if [ $c == "y" -o $c == "Y" ]
then
 echo "脚本将在2秒后,继续执行。"
 #每秒输出一个.共输出两个.
 for i in 1 2
 do
 echo -n "."
 sleep 1
 done
 echo
else
 exit 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 ]
 then
 echo "文件$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 备份数据库、代码上线的脚本的文章就介绍到这了,更多相关shell 备份数据库代码上线内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Linux shell实现每天定时备份mysql数据库

    每天定时备份mysql数据库任务,删除指定天数前的数据,保留指定天的数据: 需求:   1,每天4点备份mysql数据:   2,为节省空间,删除超过3个月的所有备份数据:   3,删除超过7天的备份数据,保留3个月里的 10号 20号 30号的备份数据: #创建shell文件 vim backup_mysql.sh mysqldump -uroot -p123456 --all-databases > /data/dbdata/mysqlbak/`date +%Y%m%d`.sql find

  • MySQL数据库的shell脚本自动备份

    MySQL数据库的shell脚本自动备份 经常备份数据库是一个好习惯,虽然数据库损坏或数据丢失的概率很低,但一旦发生这种事情,后悔是没用的.一般网站或应用的后台都有备份数据库的功能按钮,但需要去手工执行.我们需要一种安全的,每天自动备份的方法.下面的这个shell脚本就是能让你通过过设定Crontab来每天备份MySQL数据库的方法. #!/bin/bash # 数据库认证 user="" password="" host="" db_name=

  • CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中

    一.安装Email发送程序 复制代码 代码如下: yum install sendmail mutt 二.安装FTP客户端程序 本脚本需要用到FTP客户端程序将文件上传到FTP空间上面,因此必须安装FTP客户端,否则将出现ftp命令无法找到的错误. 安装步骤请参考:<CentOS提示ftp:command not found> 三.在/root目录下新建脚本文件:AutoBackupToFtp.sh,内容如下: 复制代码 代码如下: #!/bin/bash #你要修改的地方从这里开始 MYSQ

  • 两个备份数据库的shell脚本

    备份数据库的shell脚本一 复制代码 代码如下: #!/bin/bash#指定运行的脚本shell#运行脚本要给用户执行权限bakdir=/backupmonth=`date +%m`day=`date +%d`year=`date +%Y`hour=`date +%k`min=`date +%M`dirname=$year-$month-$day-$hour-$minmkdir $bakdir/$dirnamemkdir $bakdir/$dirname/confmkdir $bakdir/

  • shell 备份数据库、代码上线的脚本

    Shell 脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念. 备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11

  • php 备份数据库代码(生成word,excel,json,xml,sql)

    单表备份代码: 复制代码 代码如下: <?php    class Db    {        var $conn; function Db($host="localhost",$user="root",$pass="root",$db="test")        {          if(!$this->conn=mysql_connect($host,$user,$pass))          die(

  • VPS自动备份数据库到FTP的脚本代码

    1)确保自己在home目录(若不是,运行:cd /home) 2)新建backup文件夹(命令:mkdir backup) 3)新建脚本backup.sh vi backup.sh 复制以下代码(复制完后:wq!要保存): 复制代码 代码如下: #!/bin/bash #你要修改的地方从这里开始 MYSQL_USER=root #mysql用户名 MYSQL_PASS=123456 #mysql密码 FTP_USER=vmvps #ftp用户名 FTP_PASS=123456 #ftp密码 FT

  • Mysql备份多个数据库代码实例

    这篇文章主要介绍了Mysql备份多个数据库代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 备份数据脚本 #!/bin/bash # date是linux的一个命令 date [参数] [+格式] time=` date +%Y_%m_%d_%H_%M_%S ` # 备份输出路径 backupdir=/home/backup/ # 备份文件路径 filedir=/home/my_app/files/ # 用sql语句取出所有以'test'

  • mysql常用备份命令和shell备份脚本分享

    备份多个数据库可以使用如下命令: mysqldump -uroot -p123456 --databases test1 test2 test3 > /home/test/dump.sql; 恢复备份: source dump.sql --在mysql命令行中输入该命令即可恢复 备份整个数据库: mysqldump -uroot -123456 -A > all.sql 备份整个数据库结构: mysqldump -uroot -p123456 -P3306 -A -d > all_002

  • 给Linux定时备份数据库的实现脚本

    目录 场景:服务器数据库需要实现每天定时备份 1.首先确定备份脚本放置位置 2.编写shell脚本 3.给bash增加权限 4.测试看看脚本是否是正确可执行的 5.打开定时任务 6.编辑内容 7.查看定时任务 crontab -l 8.踩坑 服务器数据实现还原 1. 首先对定时任务备份的数据进行解压 2.接着将数据导入到database中 场景:服务器数据库需要实现每天定时备份 1.首先确定备份脚本放置位置 个人放置在   /usr/local/backup文件下,取名文件     bkData

  • ASP.NET下备份与还原数据库代码

    核心技术: 复制代码 代码如下: using System.Data.SqlClient; using System.IO; string SqlStr1 = "Server=(local);DataBase=master;Uid=sa;Pwd="; string SqlStr2 = "Exec sp_helpdb"; string SqlStr1 = "Server=(local);database='" + this.DropDownList

  • PHP备份数据库生成SQL文件并下载的函数代码

    复制代码 代码如下: <!?php /****** 备份数据库结构 ******/ /* 函数名称:table2sql() 函数功能:把表的结构转换成为SQL 函数参数:$table: 要进行提取的表名 返 回 值:返回提取后的结果,SQL集合 函数作者:heiyeluren */ function table2sql($table) { global $db; $tabledump = "DROP TABLE IF EXISTS $table;n"; $createtable

  • linux php mysql数据库备份实现代码

    但是出现了问题: 第一.运行php的是apche的用户,比如是nobody,那么它一般是没有权限访问/usr/local/mysql/data目录的 第二.就算能够访问,那么你如何能够把/usr/local/mysql/data目录下的文件拷贝出来呢?因为mysql在运行的时候是不运行访问的,那么nobody用户有权限停止mysql的服务,不可能! 越想越不对劲,没有办法,看能不能从php操作数据库入手,于是就去看了下phpMyadmin和Discuz!的代码,呵呵,于是偷抄了Discuz!的代

随机推荐