侧边栏壁纸
博主头像
小新笔记坊

笔耕学思悟,细绘生活卷。

  • 累计撰写 67 篇文章
  • 累计创建 23 个标签
  • 累计收到 81 条评论

目 录CONTENT

文章目录

服务器自动备份数据

小新笔记坊
2024-12-02 / 3 评论 / 2 点赞 / 94 阅读 / 0 字 / 正在检测是否收录...

环境信息

处理器架构:X86

操作系统:CentOS Linux release 7.9.2009 (Core)

功能介绍

1.定时备份数据库。

2.定时备份指定文件夹内容。

3.将所有备份内容打包。

4.将所有备份内容按时间日期文件夹存储。

简易备份

1.新建存储数据库账户密码文件夹,例如/usr/local/backup_conf

mkdir /usr/local/backup_conf

2.设置该文件夹只允许root账户读写,拒绝其他账户读写。

chmod 600 /usr/local/backup_conf

3.验证。

ls -ld /usr/local/backup_conf

4.新建存储数据库账户密码配置文件,例如/usr/local/backup_conf/backup.conf。设置该文件夹只允许root账户读写,拒绝其他账户读写。

mkdir backup.conf

5.backup.conf文件中写入账户密码信息。设置该文件只允许root账户读写,拒绝其他账户读写。

MYSQL_PASSWORD='hellow_word'    //数据库密码
MYSQL_USER='root'        //数据库账户
DATABASE_NAME='userdb'        //要备份的数据库名 
MYSQL_HOST=localhost
MYSQL_PORT=3306

6.新建存储执行备份的脚本文件的文件。例如/usr/local/backup_go_sh。设置该文件夹只允许root账户读写执行,拒绝其他账户读写执行。

mkdir /usr/local/backup_go_sh
chmod 700 /usr/local/backup_go_sh

7.新建执行备份的脚本文件。例如/usr/local/backup_go_sh/backup.sh。设置该文件夹只允许root账户读写执行,拒绝其他账户读写执行。

#将backup.sh设置为仅root账户可查看和执行,拒绝所有其他用户查看。
# 将backup.sh设置为仅root账户可查看和执行,拒绝所有其他用户查看。
if [ "$EUID" -ne 0 ]; then
  echo "请使用 root 用户运行此脚本"
  exit 1
fi
#加载配置文件
source /usr/local/backup_conf/backup.conf
# 设置变量
FILES_TO_BACKUP="/home/upload"  # 要备份的项目文件夹目录
BACKUP_MYSQL="/var/lib/mysql/mysql_general.log"   #要备份的数据库文件夹目录
BACKUP_DIR="/usr/local/backup"  # 指定备份项目文件存储在哪个目录
BACKUP_DIR_LOG="/usr/local/backup_log"  # 指定数据库日志备份的文件存储目录
DATE=$(date +%Y%m%d_%H%M)  # 包含日期和时间(年月日_时分)
# 创建基于日期和时间的项目文件备份文件夹
mkdir -p "${BACKUP_DIR}/${DATE}"
chmod 600 "${BACKUP_DIR}/${DATE}"  # 只有root可以读写
# 创建基于日期和时间的日志文件备份文件夹
mkdir -p "${BACKUP_DIR_LOG}/${DATE}"
chmod 600 "${BACKUP_DIR_LOG}/${DATE}"  # 只有root可以读写
# 备份数据库
mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --host=$MYSQL_HOST --port=$MYSQL_PORT $DATABASE_NAME > "${BACKUP_DIR}/${DATE}/db_$DATE.sql"
chmod 600 "${BACKUP_DIR}/${DATE}/db_$DATE.sql"  # 只有root可以读写
gzip "${BACKUP_DIR}/${DATE}/db_$DATE.sql"
chmod 600 "${BACKUP_DIR}/${DATE}/db_$DATE.sql.gz"  # 只有root可以读写
# 备份项目文件夹
tar -czf "${BACKUP_DIR}/${DATE}/files_$DATE.tar.gz" $FILES_TO_BACKUP
chmod 600 "${BACKUP_DIR}/${DATE}/files_$DATE.tar.gz"  # 只有root可以读写
# 备份nginx日志文件夹
tar -czf "${BACKUP_DIR_LOG}/${DATE}/MYSQL_$DATE.tar.gz" $BACKUP_MYSQL
chmod 600 "${BACKUP_DIR_LOG}/${DATE}/MYSQL_$DATE.tar.gz"$BACKUP_MYSQL
# 可选:删除旧的备份文件
# 这里假设你想删除超过180天的整个备份文件夹
find $BACKUP_DIR -type d -mtime +180 -exec rm -rf {} \;
find $BACKUP_DIR_LOG-type d -mtime +180 -exec rm -rf {} \;

8.设置定时任务,编辑当前用户的crontab文件写入以下内容并保存。

crontab -e
0 2 * * * /usr/local/backup_go_sh/backup.sh

注:每天凌晨2:00运行脚本。

更安全的备份

1.新建存储数据库账户密码文件。使用mysql_config_editor生成保存密码的文件,并将密码内容加密。

mysql_config_editor set --login-path=dbadmin --user=root  --host=localhost --port=3306 --password

注:执行指令后手动输入数据库密码。mysql_config_editor会在当前用户的根目录生成隐藏文件.mylogin.cnf,该文件加密存储密码及相关信息。

2.验证.mylogin.cnf文件是否成功生成。

ls -lrt ~/.mylogin.cnf
hexdump ~/.mylogin.cnf
mysql_config_editor print --login-path=dbadmin

3.设置.mylogin.cnf文件只允许root账户读写,拒绝其他账户读写。

chmod 600 /root/.mylogin.cnf

4.新建存储执行备份的脚本文件的文件。例如/usr/local/backup_go_sh。设置该文件夹只允许root账户读写执行,拒绝其他账户读写执行。

mkdir /usr/local/backup_go_sh
chmod 700 /usr/local/backup_go_sh

5.新建执行备份的脚本文件。例如/usr/local/backup_go_sh/backup.sh。设置该文件夹只允许root账户读写执行,拒绝其他账户读写执行。

#将backup.sh设置为仅root账户可查看和执行,拒绝所有其他用户查看。
if [ "$EUID" -ne 0 ]; then
  echo "请使用 root 用户运行此脚本"
  exit 1
fi
# 设置变量
FILES_TO_BACKUP="/home/upload"  # 要备份的项目文件夹目录
BACKUP_MYSQL="/var/lib/mysql/mysql_general.log"   #要备份的数据库文件夹目录
BACKUP_DIR="/usr/local/backup"  # 指定备份项目文件存储在哪个目录
BACKUP_DIR_LOG="/usr/local/backup_log"  # 指定数据库日志备份的文件存储目录
DATE=$(date +%Y%m%d_%H%M)  # 包含日期和时间(年月日_时分)
# 创建基于日期和时间的项目文件备份文件夹
mkdir -p "${BACKUP_DIR}/${DATE}"
chmod 600 "${BACKUP_DIR}/${DATE}"  # 只有root可以读写
# 创建基于日期和时间的日志文件备份文件夹
mkdir -p "${BACKUP_DIR_LOG}/${DATE}"
chmod 600 "${BACKUP_DIR_LOG}/${DATE}"  # 只有root可以读写
# 备份数据库
mysqldump --login-path=dbadmin 要备份的数据库名> "${BACKUP_DIR}/${DATE}/db_$DATE.sql"
chmod 600 "${BACKUP_DIR}/${DATE}/db_$DATE.sql"  # 只有root可以读写
gzip "${BACKUP_DIR}/${DATE}/db_$DATE.sql"
chmod 600 "${BACKUP_DIR}/${DATE}/db_$DATE.sql.gz"  # 只有root可以读写
# 备份项目文件夹
tar -czf "${BACKUP_DIR}/${DATE}/files_$DATE.tar.gz" $FILES_TO_BACKUP
chmod 600 "${BACKUP_DIR}/${DATE}/files_$DATE.tar.gz"  # 只有root可以读写
# 备份nginx日志文件夹
tar -czf "${BACKUP_DIR_LOG}/${DATE}/MYSQL_$DATE.tar.gz" $BACKUP_MYSQL
chmod 600 "${BACKUP_DIR_LOG}/${DATE}/MYSQL_$DATE.tar.gz"$BACKUP_MYSQL
# 可选:删除旧的备份文件
# 这里假设你想删除超过180天的整个备份文件夹
find $BACKUP_DIR -type d -mtime +180 -exec rm -rf {} \;
find $BACKUP_DIR_LOG-type d -mtime +180 -exec rm -rf {} \;

8.设置定时任务,编辑当前用户的crontab文件写入以下内容并保存。

crontab -e
0 2 * * * /usr/local/backup_go_sh/backup.sh

注:每天凌晨2:00运行脚本。

2
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
  • 3
    1. 支付宝打赏

      qrcode alipay
    2. 微信打赏

      qrcode weixin

评论区