PS:此脚本简单易懂,根据实际情况修改个别参数测试后即可使用,如有错误请指出!文章来源:https://www.toymoban.com/news/detail-437628.html
1.MySQL数据库备份脚本
#!/bin/bash
#---------------------------------------------------------------------------------#
#Config
user=root
pw=isiteam
ip=192.168.1.105
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
date_year=`date -d "-1 year" +%Y`
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 c in `cat $new_db`
do
#创建用于填写备份表的文件
if [ ! -d "$delete_table_path/${c}_table" ]
then
touch $delete_table_path/${c}_table
fi
#创建不备份填写表的文件
if [ ! -d "$delete_table_path/${c}_list_structure" ]
then
touch $delete_table_path/${c}_list_structure
fi
done
#在每日文件夹内创建数据文件
for q in `cat $new_db`
do
if [ ! -d "$data/$date4/$q" ]
then
mkdir -p $data/$date4/$q
fi
done
#---------------------------------------------------------------------------------#
echo "到此库表文件已通过脚本自动化在 ${delete_table_path} 目录中创建完成,自行将不需要备份的表名填写到对应的文件中(表名_list_structure),然后编辑脚本注释掉此块代码正常运行即可!"
exit
#---------------------------------------------------------------------------------#
#查询表并输出到相应文件中;
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 "/$date_year/d" $delete_table_path/${e}_table
sed -i "/Tables_in_*/d" $delete_table_path/${e}_table
done
#---------------------------------------------------------------------------------#
#备份表
#需要备份表的总数+1
number1=`expr $(cat $delete_table_path/new_db |wc -l ) + 1`
for ((s=1;s<$number1;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
#---------------------------------------------------------------------------------#
#备份数据
#需要备份表的总数+1
number2=`expr $(cat $delete_table_path/new_db |wc -l ) + 1`
for ((d=1;d<$number2;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<$number2;d++)) $number2为备份数据库的总数+1;
3.脚本执行效果
PS:环境:文章来源地址https://www.toymoban.com/news/detail-437628.html
- 数据库: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 mblog_info_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 --- mblog_info--- 表结构
20230509 02:00 --- 导出 --- monitor_caiji --- video_brief --- 数据
20230509 02:00 --- 导出 --- monitor_caiji --- video_list --- 数据
到了这里,关于MySQL数据库备份脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!