この記事では、MySQLデータベースの自動化された毎日(またはより頻繁な)日付スタンプおよび圧縮バックアップを実装できるようにするMySQLデータベースバックアップスクリプトの概要を説明します。このスクリプトを使用する利点は、すべてのデータベースをバックアップし、それらをディレクトリ(/ data / db-backups)に保存し、そのアクティビティを(/ logs / db-backup)のファイルに記録して、万が一の場合に監査および確認できることです。問題の。
理想的には、スクリプトはCRONを使用して自動化する必要があります。これにより、少なくとも毎日、各データベースの完全バックアップが実行されます。これにより、データベースにエラーが発生した場合にある程度の回復可能性を確保したり、データベースを別のシステムに簡単に移行したりすることができます。すべての自動化されたプロセスと同様に、一度インストールすると、バックアップを作成するために永久に継続する必要があるため、ディスクがいっぱいにならないように古いバックアップを削除する必要があります。
このスクリプトは、CentOS LinuxディストリビューションでテストされたシンプルでクリーンなBASHシェルスクリプトですが、ほとんどまたはまったく変更を加えることなく、Linuxの他のバリアントで実行できます。
- 次のテキストを切り取ってエディタに貼り付け、必要に応じて変更を加えて機能を強化または削減します。
#!/bin/bash # mysql-backup.sh # use mysqldump to Dump DB and compress it on the fly to a mounted partition # BACKUP_DIR="/data/db-backups" mkdir -p $BACKUP_DIR chmod 777 $BACKUP_DIR # # SERIAL="`date +%Y%m%d-%H%M%S`" #===================================== # Log Functions # function LogStart { echo "====== Log Start =========" >> $LF echo "Time: `date`" >> $LF echo " " >> $LF } function LogEnd { echo " " >> $LF echo "Time: `date`" >> $LF echo "====== Log End =========" >> $LF } #===================================== # # function GetDBList { echo "Calling GetDBList()" >> $LF mysqlshow |grep "|"| tr -d ' '|tr -d '|'| egrep -v Databases > $DBLIST } #===================================== # # function DoBackup { echo "Calling DoBackup()" >> $LF DBFILE=$BACKUP_DIR/db-$DB-$SERIAL.sql echo "Host [$H]" >> $LF echo "DB File [$DBFILE]" >> $LF if [ -a $DBFILE ] then mv $DBFILE $DBFILE.`date '+%M%S'` fi echo "Dumping ${DB}" >> $LF mysqldump -B ${DB} --add-drop-database --add-drop-table >> ${DBFILE} echo "Zipping up file!" >> $LF gzip ${DBFILE} echo "Done!" >> $LF } FILE_DATE=`date '+%Y-%m-%d'` LF_DIR=/logs/db-backup LF=$LF_DIR/db-backup-$FILE_DATE.log mkdir -p $LF_DIR chmod 777 $LF_DIR touch $LF chmod 664 $LF DBLIST=/tmp/dblist-$FILE_DATE.list LogStart #===================================== # # MAIN Code Start GetDBList while read line do echo "Backuping up: $line" H="localhost" DB=$line DoBackup done < $DBLIST echo "All backups Completed" >> $LF LogEnd # # EOF
- バックアップスクリプトが機能していることを確認するには、最初に次のようにバックアップコマンドを実行します。
/usr/local/bin/mysql-backups.sh
- 次に、 / data / db-backupのディレクトリリストを実行します スクリプトによって作成されたディレクトリには、圧縮されてバックアップされたデータベースを表すファイルがいくつか表示されます!
[root@yourserver]#ls -l /data/db-backups -rw-r--r-- 1 root root 510 Mar 5 15:21 db-information_schema-20140305-152103.sql.gz -rw-r--r-- 1 root root 526 Mar 5 15:22 db-information_schema-20140305-152229.sql.gz -rw-r--r-- 1 root root 142122 Mar 5 15:21 db-mysql-20140305-152103.sql.gz -rw-r--r-- 1 root root 142283 Mar 5 15:22 db-mysql-20140305-152229.sql.gz .... [root@yourserver]#
スクリプトは、 / usr / local / binというディレクトリに配置する必要があります。 。このディレクトリは、ユーザーが作成したシステムに適用可能なスクリプト用に特別に確保されています。
スクリプトはrootユーザーが実行可能にする必要があります。次のコマンドを使用して、ファイルに実行可能としてフラグを立てます。
"chmod 744 /usr/local/bin/mysql-backup.sh"
スクリプトの実行を自動化するためにCRONアプリケーションを使用するため、コマンド "crontab -e"を使用してcrontabに行を追加します。 、これによりエディタがポップアップし、次のように行を追加します:
30 22 * * * /usr/local/bin/mysql-backups.sh > /dev/null 2>&1
基本的に、これにより、スクリプトを毎日午後10時30分に実行できるようになります。また、プログラムがディスクにログを記録するときに、プログラムからの出力も非表示になります。
バックアップを回復するには、gunzipを使用してファイルを解凍し、mysql
実行する必要があるものの典型的な例を次に示します。
警告:間違えるとデータベースが上書きされるため、実行内容に十分注意してください。
サーバーをバックアップする場合は、ファイルを別のサーバーに自動的にコピーして自動的に回復することを検討してください。これにより、社内のテストと監査の目的で、選択したデータベースの実稼働コピーを作成できます。
cd /data/db-backups
gunzip db-mybigdatabase-20140305-152229.sql.gz
mysql < db-mybigdatabase-20140305-152229.sql
ここからどこへ?