GNU/Linux >> Linux の 問題 >  >> Linux

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

私は同じ問題を抱えています.しかし、なんとかスクリプトを書くことができました.これが役に立てば幸いです.

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

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

#!/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 分に実行されます。

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


何時間も作業した後、以下のようなソリューションを作成しました。利益を得ることができる他の人々のためにコピペします。

最初にスクリプト ファイルを作成し、このファイルに実行権限を付与してください。

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

Linux
  1. 最も古いファイルを移動するためのシェルスクリプト?

  2. 初心者のためのシェルスクリプト実行ガイドライン

  3. UNIX/Linuxでシェルスクリプトを実行する4つの方法

  1. 2 Linux 用メモリ回帰 Perl スクリプト

  2. Linux シェル スクリプトまたは変数の日付と時刻の書式設定

  3. Linux シェル スクリプトでのバックティック (`) 記号

  1. 初心者向けのLinux日付コマンドチュートリアル(8例)

  2. Linuxサーバー上のMySQLデータベースを自動的にバックアップします

  3. シェル スクリプトで Linux を使用してテンプレートを作成しますか?