sql >> データベース >  >> RDS >> Mysql

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

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

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

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


    1. SQLiteDatabase android IllegalStateException

    2. Mysqlまたは/および優先順位?

    3. 内部クエリを使用したORDERBY、ORA-00907に右括弧がありません

    4. AWSRDSインスタンスのデータベースタイムゾーンを設定する方法