定时脚本备份数据库并过滤特定表

 1.为了在脚本中不直接展示密码,可以使用 my.cnf 配置文件来存储数据库连接信息。在脚本中直接引入配置文件,这样可以提高安全性: my.cnf文件:

[client]
user=test_user
password=123456
host=localhost

 2.备份脚本 mysql_backup.sh

#!/bin/bash

# 数据库信息
DATABASE=test_database
CONFIG_FILE=/www/...自定义路径/my.cnf
BACKUP_DIR=/www/...自定义路径/mysql_backup

# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR

# 获取当前日期和时间
DATE=$(date +%Y-%m-%d_%H%M)
echo "Current date and time: $DATE"

# 获取需要排除的表名以admin_action_log_开头的表和message_message表
echo "Fetching table names to ignore..."
mysql --defaults-file=$CONFIG_FILE -e "USE $DATABASE; SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '$DATABASE' AND (TABLE_NAME LIKE 'admin_action_log_%' OR TABLE_NAME = 'message_message');" | tail -n +2 > $BACKUP_DIR/tables_to_ignore.txt

# 生成 --ignore-table 选项
IGNORE_TABLES=""
echo "Generating --ignore-table options..."
while IFS= read -r table; do
    IGNORE_TABLES+=" --ignore-table=$DATABASE.$table"
    echo "Ignoring table: $DATABASE.$table"
done < $BACKUP_DIR/tables_to_ignore.txt

# 运行 mysqldump 命令
echo "Running mysqldump..."
mysqldump --defaults-file=$CONFIG_FILE $DATABASE $IGNORE_TABLES > $BACKUP_DIR/test_database_mysql_backup_$DATE.sql

# 清理临时文件
echo "Cleaning up temporary files..."
rm $BACKUP_DIR/tables_to_ignore.txt

# 删除旧的备份文件,只保留最近3份
echo "Deleting old backups..."
cd $BACKUP_DIR
ls -t test_database_mysql_backup_*.sql | tail -n +4 | xargs rm -f

3.crontab定时任务去执行 0 0 * * * /www/...自定义路径/mysql_backup.sh   进行备份

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值