0
点赞
收藏
分享

微信扫一扫

POE:性价比最高的 AI 整合网站

code_balance 2023-05-09 阅读 217

PS:此脚本简单易懂,根据实际情况修改个别参数测试后即可使用,如有错误请指出!

1.MySQL数据库备份脚本

#!/bin/bash

user=
pw=
ip=
dateY=`date "+%Y"`
date2=`date "+%Y%m%d"`
date3=`date "+%Y%m%d %H:%M"`
date4=`date "+%d"`
date_ago=`date -d "-3 day"  +%d`
data=./data
delete_db=./db_and_tables/old_db
new_db=./db_and_tables/new_db
delete_table_path=./db_and_tables

#---------------------------------------------------------------------------------#
#查询数据库输出到文件删除不需要的数据库并生成文件夹;
	/usr/local/mysql/bin/mysql -u$user -p$pw -h$ip -e "show databases" > $new_db 

	for i in `cat $delete_db`
	do
		sed -i "/$i/d" $new_db
	done
	if [  ! -d "$data/$date4"   ]
	then
		mkdir -p $data/$date4
	fi
	for q in `cat $new_db`
	do
		if [ ! -d "$data/$date4/$q" ]
		then
			mkdir -p $data/$date4/$q
		fi
	done
#---------------------------------------------------------------------------------#
#查询表并输出到相应文件中;
	for w in `cat $new_db`
	do
			/usr/local/mysql/bin/mysql -u$user -p$pw -h$ip -e "use $w ; show tables" > $delete_table_path/${w}_table
			#删除3天前的备份
			rm -rf $data/$date_ago
	done
	for e in `cat $new_db`
	do
		for t in `cat $delete_table_path/${e}_list_structure`
		do
			sed -i  "/\<$t\>/d" $delete_table_path/${e}_table
		done
		#根据过滤条件过滤掉不需要的表;
		sed -i "/2022/d" $delete_table_path/${e}_table
		sed -i "/$dateY/d" $delete_table_path/${e}_table
		sed -i "/Tables_in_*/d" $delete_table_path/${e}_table
	done
#---------------------------------------------------------------------------------#
#备份表
	for ((s=1;s<2;s++))
	do
		db_structure=`cat  ${new_db} | awk "NR==$s"`
		for a in  `cat $delete_table_path/${db_structure}_list_structure`
		do
			echo "$date3 ---  导出 --- $db_structure ---  $a --- 表结构" >> ./out.out
			/usr/local/mysql/bin/mysqldump -u$user -p$pw -h$ip  -d  $db_structure $a > $data/$date4/$db_structure/${a}_${date2}.sql
		done
		
	done
#---------------------------------------------------------------------------------#
#备份数据
	
	for ((d=1;d<2;d++))
	do
		db_data=`cat  ${new_db} | awk "NR==$d"`
		for b in  `cat $delete_table_path/${db_data}_table`
		do
			echo "$date3 ---  导出 --- $db_data ---  $b --- 数据" >> ./out.out
			/usr/local/mysql/bin/mysqldump -u$user -p$pw -h$ip    $db_data $b > $data/$date4/$db_data/${b}_${date2}.sql
		done
		
	done

2.脚本结构解释

[root@bj-1-77 12]# ls
data  db_and_tables  out.out  script.sh
[root@bj-1-77 12]# ls db_and_tables/
monitor_caiji_list_structure   old_db
  • data:是个文件夹,用于存储备份下来的数据;
  • db_and_tables:是个文件夹,用于存储脚本中需要的配置参数;
    • old_db :存储不需要备份的数据库;脚本会通过此配置从而生成需要备份数据库的新文件new_db
    • monitor_caiji_list_structure:在执行脚本前将不需要备份表的表名写入此文件中,执行脚本后会生成新文件monitor_caiji_table,文件名命名规则:({数据库名称}_list_structure);
  • out.out:脚本执行后输出的日志记录;
  • 脚本中for ((d=1;d<2;d++)) 2为备份数据库的总数+1;

3.脚本执行效果

PS:环境:

  • 数据库:monitor_caiji
  • 备份的表:video_brief、video_list
  • 不备份的表:mblog_info
[root@bj-1-77 12]# ls
data  db_and_tables  out.out  script.sh
#备份下的数据
[root@bj-1-77 12]# ls data/09/monitor_caiji/
video_brief_20230509.sql  video_list_20230509.sql   
[root@bj-1-77 12]# ls db_and_tables/
monitor_caiji_list_structure  monitor_caiji_table  new_db  old_db
[root@bj-1-77 12]# cd db_and_tables/
#不备份的数据库
[root@bj-1-77 db_and_tables]# cat old_db 
Database
information_schema
mysql
performance_schema
sys
#需要备份的数据库
[root@bj-1-77 db_and_tables]# cat new_db 
monitor_caiji
#不备份的数据表
[root@bj-1-77 db_and_tables]# cat monitor_caiji_list_structure 
mblog_info
#需要备份的数据表
[root@bj-1-77 db_and_tables]# cat monitor_caiji_table 
video_brief
video_list
#日志
[root@bj-1-77 12]# tail -f out.out 
20230509 02:00 ---  导出 --- monitor_caiji ---  video_brief --- 数据
20230509 02:00 ---  导出 --- monitor_caiji ---  video_list --- 数据
举报

相关推荐

0 条评论