source ~/.bash_profile
IFS=$'\n'
Back_dir=/data/db_backup
for line in `cat /data/shell/conn_info.txt`
do
User=`echo $line | awk '{print $2}'`
Pass=`echo $line | awk '{print $3}'`
Host=`echo $line | awk '{print $1}'`
#Port=`echo $line | awk '{print $5}'`
Database=`echo $line | awk '{print $4}'`
for i in $Database
do
mkdir -p $Back_dir/$Database
/usr/bin/mysqldump -h $Host -u$User -p$Pass -E -R --triggers --master-data=2 --single-transaction --max_allowed_packet=128M $Database | gzip -9 >$Back_dir/$Database/${Database}_full_`date +%F`.sql.gz
done
done
find $Back_dir/ -mtime +6 -type f -name "*.gz" >> $Back_dir/delete_list.log
RN=`cat $Back_dir/delete_list.log |wc -l `
if [ $RN -gt 0 ]; then
find $Back_dir/ -name "*.gz" -type f -mtime +6 -exec rm -f {} \;
else
exit
fi
rm -f $Back_dir/delete_list.log
然后机器的登录信息 写成如下:
cat /scripts/conn_info.txt:
IP 用户 密码 数据库名
xx.xxx.xxx.xx root Parav1ew! escdb
rm-x.mysql.rds.aliyuncs.com esba cY5mD6jJd0m esapp_prod
最后备注下 mysqldump后面的参数说明:
-E: 备份指定库的事件调度器
-R:备份存储过程和存储函数
--master-data=2:
mysqldump导出数据时,当这个参数的值为1的时候,mysqldump出来的文件就会包括CHANGE MASTER TO这个语句,CHANGE MASTER TO后面紧接着就是file和position的记录,在slave上导入数据时就会执行这个语句,salve就会根据指定这个文件位置从master端复制binlog。默认情况下这个值是1
当这个值是2的时候,chang master to也是会写到dump文件里面去的,但是这个语句是被注释的状态。
gzip -9:
压缩等级,1~9级,-1最快但压缩比最低,-9最慢但压缩比最高,默认为-6
gzip 压缩和解压:
gzip -c 保留原文件
gzip -c escdb_full_2022-09-08.sql > escdb_full_2022-09-08.sql.gz
gzip -dc escdb_full_2022-09-08.sql.gz >escdb_full_2022-09-08.sql