当前位置: 首页 > 面试题库 >

用于数据库备份的Linux Shell脚本

夏侯朝斑
2023-03-14
问题内容

我尝试了许多脚本来进行数据库备份,但是我做不到。我想每小时备份一次数据库。
我将文件添加到“ /etc/cron.hourly/”文件夹,将其chmod更改为755,但未运行。至少我写了我的伪代码。

如果您可以为此操作编写脚本并告诉我该怎么办,我将非常高兴。将这个脚本文件添加到/etc/cron.hourly/文件夹之后。

  • 获取当前日期并创建一个变量, date=date(d_m_y_H_M_S)
  • 为文件名创建一个变量, filename="$date".gz
  • 像这样获取我的数据库的转储 mysqldump --user=my_user --password=my_pass --default-character-set=utf8 my_database | gzip > "/var/www/vhosts/system/example.com/httpdocs/backups/$("filename")
  • 删除文件夹/var/www/vhosts/system/example.com/httpdocs/backups/中所有早于8天的文件
  • 该文件"/var/www/vhosts/system/example.com/httpdocs/backup_log.txt"将被写入:Backup is created at $("date")
  • 文件所有者(chown)从根目录更改为“ my_user”。因为我要从“ my_user” FTP帐户打开备份和日志文件。
  • 我不希望每个cron之后都发送电子邮件。>/dev/null 2>&1将被添加。

问题答案:

经过数小时的工作,我创建了如下所示的解决方案。我将粘贴复制给其他可以受益的人。

首先创建一个脚本文件并授予该文件可执行权限。

# cd /etc/cron.daily/
# touch /etc/cron.daily/dbbackup-daily.sh
# chmod 755 /etc/cron.daily/dbbackup-daily.sh
# vi /etc/cron.daily/dbbackup-daily.sh

然后使用Shift + Ins将以下行复制到文件中

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder="/var/www/vhosts/example.com/httpdocs/backups"
fullpathbackupfile="$backupfolder/$filename"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt
echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump --user=mydbuser --password=mypass --default-character-set=utf8 mydatabase | gzip > "$fullpathbackupfile"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
chown myuser "$fullpathbackupfile"
chown myuser "$logfile"
echo "file permission changed" >> "$logfile"
find "$backupfolder" -name db_backup_* -mtime +8 -exec rm {} \;
echo "old files deleted" >> "$logfile"
echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

编辑:
如果您使用InnoDB并且备份花费太多时间,则可以添加“
单笔交易 ”参数以防止锁定。因此,mysqldump行将如下所示:

mysqldump --user=mydbuser --password=mypass --default-character-set=utf8
          --single-transaction mydatabase | gzip > "$fullpathbackupfile"


 类似资料:
  • 我尝试了很多数据库备份脚本,但都做不到。我想每小时备份一次数据库 我将文件添加到“/etc/cron.hourly/”文件夹,将其chmod更改为755,但没有运行。至少我写了我的伪代码。 如果你能为这次行动写一个脚本,告诉我应该做些什么,我会很高兴的?将此脚本文件添加到文件夹。 获取当前日期并创建一个变量, 为文件名创建一个变量, 像下面这样获取我的数据库转储文件

  • 本文向大家介绍shell 备份数据库、代码上线的脚本,包括了shell 备份数据库、代码上线的脚本的使用技巧和注意事项,需要的朋友参考一下 Shell 脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。 备份MySQL数据库

  • 主要内容:备份一个数据库,备份多个数据库,备份所有数据库数据库的主要作用就是对数据进行保存和维护,所以备份数据是数据库管理中最常用的操作。为了防止数据库意外崩溃或硬件损伤而导致的数据丢失,数据库系统提供了备份和恢复策略。 保证数据安全的最重要的一个措施就是定期的对数据库进行备份。这样即使发生了意外,也会把损失降到最低。 数据库备份是指通过导出数据或者复制表文件的方式来制作数据库的副本。当数据库出现故障或遭到破坏时,将备份的数据库加载到系统,从而使数据库

  • 和RDBMS一样,OrientDB也支持备份和恢复操作。 在执行备份操作时,它将使用ZIP算法将当前数据库的所有文件转换为压缩的zip格式。 通过启用自动备份服务器插件,可以自动利用此功能(备份)。 但是,根据必须知道何时使用备份以及何时使用导出的过程,对数据库进行备份或导出数据库是相同的。 在进行备份时,它会创建一个数据库的一致副本,所有进一步的写入操作都会被锁定并等待完成备份过程。 在这个操作

  • 问题内容: 我在MySql中有一个很大的数据库,我需要每天左右对其进行备份。 我需要能够从任何计算机上进行备份,因此我考虑制作一个php脚本来做到这一点,并将此php脚本置于联机状态(具有密码保护和授权等功能,因此只有我可以访问它)。 但是,我不知道如何正确完成? 我应该使用哪些命令,并且可以更改备份的设置(例如)? 我将不胜感激… 另外,如果这是一个错误的方法(不安全,或者使用错误的sql文件提

  • 我是Oracle数据库的新手。我已经安装了DBeaver(以前也从未使用过)来连接数据库。 我已经创建了一个连接(我相信它被称为数据库),现在我能够看到数据库表和所有内容。如何在DBeaver中备份Oracle数据库,以便在对live Database进行任何更改之前在本地使用它进行测试? 我找不到任何选择采取连接/数据库的备份。