数据备份脚本:docker, mysqldump, sqlcmd

a, docker-oracle数据备份

# oracle导入导出: exp, imp
# exp test/123456@orcl   file=test.dmp
# imp t1/123456@orcl     file=test.dmp fromuser=test touser=t1

dir=/home/oracle/app/oracle/backup/
filecount=$(cd $dir; ls |wc -l)

del_old_bak(){
  cd $dir
  oldbak=$(ls |head -n 1)
  rm -f $oldbak
}

bak(){
   bakfile=$(date +%Y_%m_%d)
   ssh oracle@oracle2 "source ~/.bash_profile; exp system/123456@orcl file=/home/oracle/app/oracle/backup/$bakfile owner=test"
}

[ $filecount -gt 7 ] && del_old_bak && echo "del old bak......"
bak

b, mysql数据备份

  • 需求:docker安装的mysql, 需要数据备份(此月数据>20天,删除上月数据)

实现方式:mysqldump备份sql

[root@docker bin]# cat mysql_dump_docker.sh 
#desc: 备份docker-mysql数据卷
#author: wang
#time: 2019年 11月 05日
#定义变量: 备份存放路径
dump_dir=/dump_jdbc/mysql

#取出月份:本月,前月,当前日期
month=$( date +%Y_%m)  #2019_11
month_former=$( date -d "1 month ago" +%Y_%m)
day=$( date +%d_%H:%M:%S)        #05_17:34:19
 
## 备分sql 
mysqldump -uroot -p123456 -hdocker --databases scm hive hue oozie > $dump_dir/$month/$day.dump.sql

#判断:(此月数据>3天,删除上月数据)
cd   $dump_dir
day_count=$( ls  $month/  |wc -l  )
del_count=$(( day_count - 3 )) ##保留3个
if [ $del_count -gt 0 ]; then
   cd $month
   del_files=$(ls |head -$del_count)
   rm.bak -rf $del_files
   [ -d  ../$month_former ]  &&  rm.bak -rf  ../$month_former
fi

c, 备份sqlserver数据(保留1周)

  • backup database 数据库名 to disk=“1.bak”
  • restore database 数据库名 from disk=“1.bak” with REPLACE

linux安装sqlserver客户端工具sqlcmd: https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-tools?view=sql-server-ver15#RHEL

  • 循环读写文件( 1–7 ) : linux 备份sqlserver文件
#1, 安装sqlcmd
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo
sudo yum remove -y mssql-tools unixODBC-utf16-devel
sudo yum install -y  mssql-tools unixODBC-utf16-devel
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

#2, 测试连接
sqlcmd -b -S sqlserver主机名  -U 用户名 -P 密码  -Q "select * from 库名.表名" #q: 表示与用户交互的模式,阻塞直到手动退出

#3, 定时备份脚本
[root@docker bin]#  cat sqlserver_bak.sh 
#!/bin/bash
#desc: ( 1--7 ) 循环读写: linux 备份sqlserver文件
#author: wang
#date: 2019年 11月 07日

flag=1
echo " -----flag=$flag------" >>  /var/log/sqlserver_bak.log
#定义变量
filename=$(date +%Y)
dirname="D:\data_backup"
bak_file_totname=${dirname}"\\"${filename}.$flag
echo sqlcmd  -S win7 -U root -P 123456  -Q "backup database test_db  to disk=\"${bak_file_totname}-loop.bak\"" 
 sqlcmd  -S win7 -U root -P 123456  -Q "backup database test_db  to disk=\"${bak_file_totname}-loop.bak\"" 

#判断flag是否>7
flag=$((flag+1))
[ $flag -gt  7 ] &&  flag=1 && echo -e  " \n\n==========" >> /var/log/sqlserver_bak.log

#替换旧的变量值
sed -i 6d $0
sed -i 6i"flag=$flag"  $0

#-------------------------------------------测试脚本-------------------------------------
[root@docker txt]# sh sqlserver_bak.sh 
....
sqlcmd -S win7 -U root -P 123456 -Q backup database test_db to disk="D:\data_backup\2019.6-test_db.bak"
已为数据库 'test_db',文件 'test_db' (位于文件 1 上)处理了 536 页。
已为数据库 'test_db',文件 'test_db_log' (位于文件 1 上)处理了 2 页。
BACKUP DATABASE 成功处理了 538 页,花费 0.179 秒(23.440 MB/秒)[root@docker txt]# sh b.sh 
sqlcmd -S win7 -U root -P 123456 -Q backup database test_db to disk="D:\data_backup\2019.7-test_db.bak"
已为数据库 'test_db',文件 'test_db' (位于文件 1 上)处理了 536 页。
已为数据库 'test_db',文件 'test_db_log' (位于文件 1 上)处理了 2 页。
BACKUP DATABASE 成功处理了 538 页,花费 0.387 秒(10.841 MB/秒)[root@docker txt]# sh b.sh 
sqlcmd -S win7 -U root -P 123456 -Q backup database test_db to disk="D:\data_backup\2019.1-test_db.bak"
已为数据库 'test_db',文件 'test_db' (位于文件 1 上)处理了 536 页。
已为数据库 'test_db',文件 'test_db_log' (位于文件 1 上)处理了 2 页。
BACKUP DATABASE 成功处理了 538 页,花费 0.084 秒(49.950 MB/秒)

d, hadoop元数据备份

# hadoop元数据备份 
hadoop_meta_bak(){
		#nn节点备份数据
		cp /mp/dfs/nn/current/VERSION   $dump_dir/$month/nn-current-VERSION.txt
		
		#dn节点备份数据
		for dn in hadoop0{2,3,4,5}
		do
		     echo " ....... $dn backup ............."
			  	scp $dn:/tmp/dfs/dn/current/VERSION   $dump_dir/$month/$dn-dn-current-VERSION.txt
			  	scp $dn:/tmp/dfs/dn/current/BP-*/current/VERSION    $dump_dir/$month/$dn-dn-current_BP_current_VERSION.txt
		done
		
		#文件归档
		tar  -cvf  $dump_dir/$month/$day.dump.sql   $dump_dir/$month/*.txt  ; rm -f *.txt
}
发布了276 篇原创文章 · 获赞 37 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/eyeofeagle/article/details/102919672