数据库备份脚本

背景

生产环境使用的宝塔面板,一般会使用自带的数据库备份功能,那个功能不能跳过一些不需要备份的表,数据量大起来之后,备份耗时增加影响业务。

脚本

#!/usr/bin/bash
#用户名
USER=test
#密码
PASSWORD='test'
#数据库名
DATABASE=test
#mysqldump
# --ignore-table : 备份中需要排除的表的表名,可以单个可以多个
DUMP="mysqldump --skip-opt --skip-lock-tables -q --single-transaction -u${USER} -p${PASSWORD} --ignore-table=${DATABASE}.table_a --ignore-table=${DATABASE}.table_b --ignore-table=${DATABASE}.table_c --databases ${DATABASE} "

#如果目录不存在则进行创建
BACKUP_DIR="/data/backup-cron/database"

if [ ! -d "${BACKUP_DIR}" ]; then
    mkdir ${BACKUP_DIR} -p
fi

#执行备份
${DUMP} | gzip >${BACKUP_DIR}/${DATABASE}_$(date +%Y%m%d_%H%M%S).sql.gz

上面这个脚本可以正常备份数据库,但是运行后会有下面两个提示。

mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces

第一个提示可以通过在配置文件中增加 mysqldump 命令对应的用户名和密码去除。

第二个提示可以通过给当前用户授予 PROCESS 权限去除掉。

  • 使用 root 用户登录数据库
  • 执行如下命令,就可以了

    GRANT PROCESS ON . TO ‘test‘@’localhost’;
    FLUSH PRIVILEGES;

一般是选择备份 7 天的数据,可以配合一个磁盘清理脚本

#数据库备份文件定时清理(保留7天的备份)
find /data/backup-cron/database -mtime +7 -name "*.*" -exec rm -rf {} \;
本作品采用《CC 协议》,转载必须注明作者和本文链接
感谢阅读,有收获的话不妨点个赞:smiling_imp:
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!