資料庫備份指令碼

declandragon發表於2022-02-13

背景

生產環境使用的寶塔皮膚,一般會使用自帶的資料庫備份功能,那個功能不能跳過一些不需要備份的表,資料量大起來之後,備份耗時增加影響業務。

#!/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:

相關文章