Linux集群和自动化维2.6.1 备份类脚本

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

2.6.1 备份类脚本


俗话说得好,备份是救命的稻草。特别是重要的数据和代码,这些都是公司的重要资产,所以备份是必须的。备份能在我们不慎执行了一些毁灭性的工作之后(比如不小心删除了数据),进行恢复工作。许多有实力的公司在国内好几个地方都设有灾备机房,而且用的都是价格不菲的EMC高端存储。可能会有朋友要问:如果我们没有存储怎么办?这点可以参考一下笔者公司的备份策略,即:在执行本地备份的同时,让Shell脚本自动上传数据到另一台FTP备份服务器中,这种异地备份策略成本比较小,无须存储,而且安全系统高,相当于双备份,本地和异地同时出现数据损坏的概率几乎是不可能的。

此双备份策略的具体步骤如下。

首先,做好准备工作。先安装一台CentOS 6.4 x86_64的备份服务器,并安装vsftpd服务,稍微改动一下配置后启动。另外,关于vsftpd的备份目录,可以选择做RAID1或RAID5的分区或存储。

vsftpd服务的安装如下,CentOS 6.4 x86_64下自带的yum极为方便。

yum -y install vsftpd

service vsftpd start

chkconfig vsftpd on

vsftpd的配置比较简单,详细语法略过,这里只给出配置文件,可以通过组合使用如下命令直接得出vsftpd.conf中有效的文件内容:

grep -v "^#" /etc/vsftpd/vsftpd.conf | grep -v '^$'

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

chroot_local_user=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

chroot_local_user=YES这条语句需要重点强调一下。它的作用是对用户登录权限进行限制,即所有本地用户登录vsftpd服务器时只能在自己的家目录下,这是基于安全的考虑,笔者在编写脚本的过程中也考虑到了这点,如果大家要移植此脚本到自己的工作环境中,不要忘了这条语句,不然的话异地备份极有可能会失效。

另外,我们在备份服务器上应该建立备份用户,例如svn,并为其分配密码,还应该将其家目录更改为备份目录,即/data/backup/svn-bakcup,这样的话更方便备份工作,以下备份脚本依此类推。

1.版本控制软件SVN代码库的备份脚本

版本控制软件SVN的重要性在这里就不再多说了,现在很多公司基本还是利用SVN作为提交代码集中管理的工具,所以做好其备份工作的重要性就不言而喻了。这里的轮询周期为30天一次,Shell会自动删除30天以前的文件。在vsftpd服务器上建立相应的备份用户svn的脚本内容如下(此脚本在CentOS 5.8 x86_64下已测试通过):

#!/bin/sh

SVNDIR=/data/svn

SVNADMIN=/usr/bin/svnadmin

DATE=`date +%Y-%m-%d`

OLDDATE=`date +%Y-%m-%d -d '30 days'`

BACKDIR=/data/backup/svn-backup

 

[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}

LogFile=${BACKDIR}/svnbak.log

[ -f ${LogFile} ] || touch ${LogFile}

mkdir ${BACKDIR}/${DATE}

 

 

for PROJECT in myproject official analysis mypharma

do

  cd $SVNDIR

  $SVNADMIN hotcopy $PROJECT  $BACKDIR/$DATE/$PROJECT --clean-logs

  cd $BACKDIR/$DATE

  tar zcvf ${PROJECT}_svn_${DATE}.tar.gz $PROJECT  > /dev/null

  rm -rf $PROJECT

sleep 2

done

 

HOST=192.168.2.112

FTP_USERNAME=svn

FTP_PASSWORD=svn101

 

cd ${BACKDIR}/${DATE}

 

ftp -i -n -v << !

open ${HOST}

user ${FTP_USERNAME} ${FTP_PASSWORD}

bin

cd ${OLDDATE}

mdelete *

cd ..

rmdir ${OLDDATE}

mkdir ${DATE}

cd ${DATE}

mput *

bye

!

2. MySQL从数据库备份脚本

主MySQL脚本跟其比较类似,主要是用MySQL自带的命令mysqldump 进行备份的。这里要说明的是,本地的轮询周期为20天,vsftpd的轮询周期为60天,备份后就算是用gzip压缩,MySQL的数据库还是很大,大家可以根据实际需求来更改这个时间,注意不要让数据库撑爆你的备份服务器。由于是内部开发环境,密码设置得比较简单,如果要将其移植到自己的公网服务器上,就要在安全方面多注意一下了。另外附带说明的是,--opt只是一个快捷选项,等同于同时添加 --add-drop-tables  --add-locking  --create-option  --disable-keys  --extended-insert  --lock-tables --quick --set-charset 选项。本选项能让mysqldump很快地导出数据,并且导出的数据可以很快被导回。该选项默认是开启的,可以用--skip-opt将其禁用。注意,如果运行mysqldump没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出的是大数据库则可能会出现问题,脚本内容如下(此脚本在CentOS 5.8 x86_64下已测试通过):

#!/bin/bash

USERNAME=mysqlbackup

PASSWORD=mysqlbackup

DATE=`date +%Y-%m-%d`

OLDDATE=`date +%Y-%m-%d -d '-20 days'`

FTPOLDDATE=`date +%Y-%m-%d -d '-60 days'`

MYSQL=/usr/local/mysql/bin/mysql

MYSQLDUMP=/usr/local/mysql/bin/mysqldump

MYSQLADMIN=/usr/local/mysql/bin/mysqladmin

SOCKET=/tmp/mysql.sock

BACKDIR=/data/backup/db

 

[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}

[ -d ${BACKDIR}/${DATE} ] || mkdir ${BACKDIR}/${DATE}

[ ! -d ${BACKDIR}/${OLDDATE} ] || rm -rf ${BACKDIR}/${OLDDATE}

 

for DBNAME in mysql test report

do

   ${MYSQLDUMP} --opt -u${USERNAME} -p${PASSWORD} -S${SOCKET} ${DBNAME} | gzip > ${BACKDIR}/${DATE}/${DBNAME}-backup-${DATE}.sql.gz

   echo "${DBNAME} has been backup successful"

   /bin/sleep 5

done

 

HOST=192.168.4.45

FTP_USERNAME=dbmysql

FTP_PASSWORD=dbmysql

cd ${BACKDIR}/${DATE}

ftp -i -n -v << !

open ${HOST}

user ${FTP_USERNAME} ${FTP_PASSWORD}

bin

cd ${FTPOLDDATE}

mdelete *

cd ..

rmdir ${FTPOLDDATE}

mkdir ${DATE}

cd ${DATE}

mput *

bye

!

3. MySQL数据备份至S3文件系统

这里先来介绍下亚马逊的分布式文件系统S3,S3为开发人员提供了一个高可扩展(Scalability)、高持久性(Durability)和高可用(Availability)的分布式数据存储服务。它是一个完全针对互联网的数据存储服务,借助一个简单的Web服务接口就可以通过互联网在任何时候访问S3上的数据。当然存放在S3上的数据要可以进行访问控制以保障数据的安全性。这里所说的访问S3包括读、写、删除等多种操作。在脚本的最后,采用AWS S3命令中的cp将MySQL上传至s3://example-shar这个bucket上面(S3详细资料介绍http://aws.amazon.com/cn/s3/),脚本内容如下所示(此脚本在Amazon Linux AMI x86_64下已测试通过):

#!/bin/bash

#

# Filename:

# backupdatabase.sh

# Description:

# backup cms database and remove backup data before 7 days

# crontab

# 55 23 * * * /bin/sh /yundisk/cms/crontab/backupdatabase.sh >> /yundisk/cms/crontab/backupdatabase.log 2>&1

 

DATE=`date +%Y-%m-%d`

OLDDATE=`date +%Y-%m-%d -d '-7 days'`

 

#MYSQL=/usr/local/mysql/bin/mysql

#MYSQLDUMP=/usr/local/mysql/bin/mysqldump

#MYSQLADMIN=/usr/local/mysql/bin/mysqladmin

 

BACKDIR=/yundisk/cms/database

[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}

[ -d ${BACKDIR}/${DATE} ] || mkdir ${BACKDIR}/${DATE}

[ ! -d ${BACKDIR}/${OLDDATE} ] || rm -rf ${BACKDIR}/${OLDDATE}

 

mysqldump --default-character-set=utf8 --no-autocommit --quick --hex-blob --single-transaction -uroot  cms_production  | gzip > ${BACKDIR}/${DATE}/cms-backup-${DATE}.sql.gz

echo "Database cms_production and bbs has been backup successful"

/bin/sleep 5

 

aws s3 cp ${BACKDIR}/${DATE}/* s3://example-share/cms/databackup/

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
94 3
|
1月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
45 3
|
1月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
66 1
|
2月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
75 4
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
65 4
|
22天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
22天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
53 1
|
1月前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
下一篇
DataWorks