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"# 获取需要排除的表名
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 'echo_admin_action_log_%' OR TABLE_NAME = 'echo_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; doIGNORE_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 进行备份