数据库备份的Linux shell脚本数据库备份的Linux shell脚本(Linux shell

2019-05-13 02:08发布

我尝试了数据库备份许多脚本,但我无法做到这一点。 我想每一个小时的备份我的数据库。
我添加文件“/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") 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将被添加。

Answer 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"


Answer 2:

创建类似下面的脚本:

#!/bin/sh -e

location=~/`date +%Y%m%d_%H%M%S`.db

mysqldump -u root --password=<your password> database_name > $location

gzip $location

然后,你可以编辑crontab ,该脚本将作为运行的用户:

$> crontab -e

并追加进入

01 * * * * ~/script_path.sh

这将使得它每隔一小时,每天的第一分钟运行。

然后,你只需要在你的卷和其他功能添加,你是好去。



Answer 3:

我得到了同样的问题。 但是我设法写一个脚本。 希望这将有助于。

#!/bin/bash
# Database credentials
user="username"
password="password"
host="localhost"
db_name="dbname"
# Other options
backup_path="/DB/DB_Backup"
date=$(date +"%d-%b-%Y")
# Set default file permissions
umask 177
# Dump database into SQL file
mysqldump --user=$user --password=$password --host=$host $db_name >$backup_path/$db_name-$date.sql

# Delete files older than 30 days
find $backup_path/* -mtime +30 -exec rm {} \;


#DB backup log
echo -e "$(date +'%d-%b-%y  %r '):ALERT:Database has been Backuped"    >>/var/log/DB_Backup.log


Answer 4:

#!/bin/sh
#Procedures = For DB Backup
#Scheduled at : Every Day 22:00

v_path=/etc/database_jobs/db_backup
logfile_path=/etc/database_jobs
v_file_name=DB_Production
v_cnt=0

MAILTO="abc@as.in"
touch "$logfile_path/kaka_db_log.log"

#DB Backup
mysqldump -uusername -ppassword -h111.111.111.111 ddbname > $v_path/$v_file_name`date +%Y-%m-%d`.sql 
if [ "$?" -eq 0 ]
  then
   v_cnt=`expr $v_cnt + 1`
  mail -s "DB Backup has been done successfully" $MAILTO < $logfile_path/db_log.log
 else
   mail -s "Alert : kaka DB Backup has been failed" $MAILTO < $logfile_path/db_log.log
   exit
fi


Answer 5:

这是我对Ubuntu的MySQL备份脚本情况下,它可以帮助别人。

#Mysql back up script

start_time="$(date -u +%s)"

now(){
date +%d-%B-%Y_%H-%M-%S
}

ip(){
/sbin/ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'
}

filename="`now`".zip
backupfolder=/path/to/any/folder
fullpathbackupfile=$backupfolder/$filename
db_user=xxx
db_password=xxx
db_name=xxx

printf "\n\n"
printf "******************************\n"
printf "Started Automatic Mysql Backup\n"
printf "******************************\n"
printf "TIME: `now`\n"
printf "IP_ADDRESS: `ip` \n"
printf "DB_SERVER_NAME: DB-SERVER-1\n"

printf "%sBACKUP_FILE_PATH $fullpathbackupfile\n"

printf "Starting Mysql Dump \n"

mysqldump -u $db_user -p$db_password $db_name| pv | zip > $fullpathbackupfile

end_time="$(date -u +%s)"

elapsed=$(($end_time-$start_time))

printf "%sMysql Dump Completed In $elapsed seconds\n"

printf "******************************\n"

PS:Rememember安装光伏并在你的Ubuntu拉链

sudo apt install pv
sudo apt install zip

下面是我如何使用设置的crontab crontab -e在Ubuntu中运行,每6小时

0 */6 * * * sh /path/to/shfile/backup-mysql.sh >> /path/to/logs/backup-mysql.log 2>&1

最酷的是它会创建一个zip文件,哪一个更容易解压缩从任何地方



Answer 6:

#!/bin/bash

# Add your backup dir location, password, mysql location and mysqldump        location
DATE=$(date +%d-%m-%Y)
BACKUP_DIR="/var/www/back"
MYSQL_USER="root"
MYSQL_PASSWORD=""
MYSQL='/usr/bin/mysql'
MYSQLDUMP='/usr/bin/mysqldump'
DB='demo'

#to empty the backup directory and delete all previous backups
rm -r $BACKUP_DIR/*  

mysqldump -u root -p'' demo | gzip -9 > $BACKUP_DIR/demo$date_format.sql.$DATE.gz

#changing permissions of directory 
chmod -R 777 $BACKUP_DIR


Answer 7:

你可能会认为这是开源工具,matiri, https://github.com/AAFC-MBB/matiri这与SQLITE3元数据并发mysql的备份脚本。 特征:

  • 多服务器:多个MySQL服务器支持它们是否位于同一地点的相同或不同的物理服务器上。
  • 平行:在服务器上的每个数据库要备份被分别进行并行(并发可设置:默认:3)
  • 压缩:每个数据库备份压缩
  • 校验和:存储在每个压缩备份文件和所有文件的存档的SHA256
  • 存档:所有的数据库备份经tar一起到单个文件
  • 记录:存储在数据库SQLITE3备份信息

全面披露:原matiri作者。



Answer 8:

作为一名DBA,你必须安排MySQL数据库的备份中的任何问题的情况下,这样就可以从当前的备份恢复数据库。

在这里,我们使用mysqldump采取MySQL数据库,你可以把到脚本相同的备份。

[orahow @ oradbdb在db_backup] $猫.backup_script.sh

#!/bin/bash
# Database credentials
user="root"
password="1Loginxx"
db_name="orahowdb"
v_cnt=0
logfile_path=/DB_Backup
touch "$logfile_path/orahowdb_backup.log"
# Other options
backup_path="/DB_Backup"
date=$(date +"%d-%b-%Y-%H-%M-%p")
# Set default file permissions

继续阅读.... MySQL的备份



文章来源: Linux shell script for database backup