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

スクリプト化されたMySQLデータベースのバックアップ

概要

この記事では、MySQLデータベースの自動化された毎日(またはより頻繁な)日付スタンプおよび圧縮バックアップを実装できるようにするMySQLデータベースバックアップスクリプトの概要を説明します。このスクリプトを使用する利点は、すべてのデータベースをバックアップし、それらをディレクトリ(/ data / db-backups)に保存し、そのアクティビティを(/ logs / db-backup)のファイルに記録して、万が一の場合に監査および確認できることです。問題の。

理想的には、スクリプトはCRONを使用して自動化する必要があります。これにより、少なくとも毎日、各データベースの完全バックアップが実行されます。これにより、データベースにエラーが発生した場合にある程度の回復可能性を確保したり、データベースを別のシステムに簡単に移行したりすることができます。すべての自動化されたプロセスと同様に、一度インストールすると、バックアップを作成するために永久に継続する必要があるため、ディスクがいっぱいにならないように古いバックアップを削除する必要があります。

スクリプト

このスクリプトは、CentOS LinuxディストリビューションでテストされたシンプルでクリーンなBASHシェルスクリプトですが、ほとんどまたはまったく変更を加えることなく、Linuxの他のバリアントで実行できます。

  1. 次のテキストを切り取ってエディタに貼り付け、必要に応じて変更を加えて機能を強化または削減します。
#!/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
バックアップのテスト
  1. バックアップスクリプトが機能していることを確認するには、最初に次のようにバックアップコマンドを実行します。
    /usr/local/bin/mysql-backups.sh
  2. 次に、 / 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

警告:間違えるとデータベースが上書きされるため、実行内容に十分注意してください。

ここからどこへ?

サーバーをバックアップする場合は、ファイルを別のサーバーに自動的にコピーして自動的に回復することを検討してください。これにより、社内のテストと監査の目的で、選択したデータベースの実稼働コピーを作成できます。


Linux
  1. MSSQLデータベースのバックアップを構成する

  2. MySQLデータベースにリモートで接続する

  3. MySQLデータベースをインポートする

  1. MySQLデータベースのキャッシュを改善する

  2. MySQLWorkbenchを使用してMySQLでデータベースを作成する方法

  3. MySQL データベース全体の複製

  1. MySQLデプロイメントFAQ

  2. MySQLデータベースを最適化する

  3. MySQLデータベースをコピーする方法