linux下mysql定时备份shell脚本。mysqldump命令

#作者:李硕,日期:2023-4-15。      参考博客:https://blog.csdn.net/lishuoboy/article/details/130168865
#注意:需提前安装mysql客户端。       参考博客:https://blog.csdn.net/lishuoboy/article/details/114677600
#linux 添加定时任务编辑命令 crontab -e。使用方式通vim命令。具体crontab表达式用法自己百度
#0 * * * * /data/mysql-bak/mysql-bak.sh > /data/mysql-bak/bak.log
#注意:添加执行权限 chmod  +x /data/mysql-bak/mysql-bak.sh。否则定时任务不运行

#命令回显
#set -v on

bakTime=$(date +%Y%m%d-%H%M%S)
echo ========== $bakTime ==========

echo 1.定义参数
path=/data/mysql-bak/db-data
cd $path  &&  mkdir $bakTime
saveDays=360

host=127.0.0.1
port=3306
user=root
# 密码可以写入my.cnf文件,就无需mysql命令行传入。
password=你的密码
# 查询所有数据库的sql。as schema_name 是因为 schema_name可能大写、可能小写
select_schema_name_sql="SELECT schema_name as schema_name FROM information_schema.SCHEMATA WHERE schema_name not in ('mysql','information_schema','performance_schema','sys')"


echo 2.查询所有库。写入文件
mysql -h${host} -P${port} -u${user} -p${password} -e "${select_schema_name_sql}" > $bakTime/schema_name.txt

echo 3.遍历导出所有库。每个schema_name导出一个.sql文件
IFS=$'\n'
for line in $(cat $bakTime/schema_name.txt)
do
	if [[ $line != 'schema_name' ]]; then
	  echo $line
	  # --column-statistics=0 是屏蔽版本差异报错:Unknown table 'COLUMN_STATISTICS' in information_schema (1109)
		mysqldump -h${host} -P${port} -u${user} -p${password} -B $line --column-statistics=0 > $bakTime/$(date +%Y%m%d-%H%M%S)-$line.sql
	fi
done

echo 4.压缩并删除源文件
#tar -czvf $bakTime.tgz *.sql *.txt --remove-files
tar -czvf $bakTime.tgz $bakTime ../*.log --remove-files

echo 5.滚动删除历史文件
find $path -type f -name "*.tgz" -mtime +$saveDays -exec rm -rf {
    
    } \;


相关博客:

MySQL数据库备份(导出导入)的命令详解mysqldump

rpm安装mysql安装

猜你喜欢

转载自blog.csdn.net/lishuoboy/article/details/130168865