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
}