web-dev-qa-db-ja.com

データベースバックアップ用のLinuxシェルスクリプト

データベースのバックアップ用に多くのスクリプトを試しましたが、作成できませんでした。データベースを1時間ごとにバックアップしたい。
「/ 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_が追加されます。
38
trante

何時間も働いた後、次のようなソリューションを作成しました。恩恵を受けることができる他の人のためにペーストをコピーします。

最初にスクリプトファイルを作成し、このファイルに実行許可を与えます。

# 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を使用し、バックアップに時間がかかりすぎる場合は、ロックを防ぐために「 single-transaction 」引数を追加できます。したがって、mysqldump行は次のようになります。

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

次のようなスクリプトを作成します。

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

これにより、毎日毎時1分に実行されます。

次に、ロールと他の機能を追加するだけで、準備完了です。

31
Peter Party Bus

同じ問題が発生しました。しかし、私はスクリプトを書くことに成功しています。これが役立つことを願っています。

#!/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
7
#!/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="[email protected]"
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
2
kartavya soni

これが誰かを助ける場合の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:あなたのubuntuにPVとZIPをインストールすることを忘れないでください

Sudo apt install pv
Sudo apt install Zip

以下は、6時間ごとに実行するようにubuntuでcrontab -eを使用してcrontabを設定する方法です。

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

クールなことは、どこからでも簡単に解凍できるZipファイルを作成することです

1
Baljeet Bhinder

DBAとして、問題が発生した場合にMySQLデータベースのバックアップをスケジュールして、現在のバックアップからデータベースを回復できるようにする必要があります。

ここでは、mysqldumpを使用して、mysqlデータベースのバックアップを取ります。これは、スクリプトに配置できるものと同じです。

[orahow @ oradbdb DB_Backup] $ cat .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 Backup

0
Rosel
#!/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
0
Shal

このオープンソースツール、matiri、 https://github.com/AAFC-MBB/matiri を検討してください。これは、Sqlite3のメタデータを含む同時mysqlバックアップスクリプトです。特徴:

  • マルチサーバー:複数のMySQLサーバーは、同じ物理サーバーまたは別の物理サーバーに共存していてもサポートされます。
  • 並列:バックアップするサーバー上の各データベースは、並列に個別に実行されます(同時実行可能設定:デフォルト:3)
  • 圧縮済み:各データベースバックアップが圧縮されています
  • チェックサム:保存された各圧縮バックアップファイルのSHA256およびすべてのファイルのアーカイブ
  • アーカイブ済み:すべてのデータベースバックアップが1つのファイルにまとめてtarされます
  • 記録済み:Sqlite3データベースに保存されたバックアップ情報

完全な開示:元のmatiri作成者。

0
ggg