ホームページ  >  記事  >  データベース  >  MySQL の日次バックアップおよび増分バックアップ スクリプト

MySQL の日次バックアップおよび増分バックアップ スクリプト

高洛峰
高洛峰オリジナル
2016-12-02 14:24:561155ブラウズ

適したオブジェクト

この記事は、Linux の mysql 4.1.14 バージョンでテストされており、適切な修正を加えた後、mysql 4.0、5.0 およびその他のバージョンにも適している可能性があります。

この記事は、レプリケーション機能を持たない mysql に適しています。レプリケーションが有効になっている場合、このバックアップ戦略を採用したり、関連するパラメーターを変更したりする必要はありません。

バックアップ戦略は人によって異なる可能性があるため、実際の状況に応じて変更し、1 つの例から推測してください。不必要な損失が発生する可能性があるため、コピーしてください。

このスクリプトの動作を理解していただければ幸いです!


スクリプトの説明

すべてのデータを 7 日ごとにバックアップし、binlog を毎日バックアップします。これは増分バックアップです。

(データは少ないので、1 日 1 回完全なデータをバックアップするだけです。増分バックアップを行う必要はないかもしれません)

作者はシェル スクリプトにあまり慣れていないため、多くの場所が非常に愚かに書かれています:)


有効にするbin ログ

mysql のバージョン 4.1 では、デフォルトではエラー ログのみが存在し、他のログはありません。設定を変更することで bin ログを開くことができます。その 1 つは、

[mysqld] を追加することです。
log-bin

このログの主な機能は増分バックアップまたはレプリケーションです (他の用途がある場合もあります)。

増分バックアップが必要な場合は、このログを開く必要があります。

頻繁にデータベース操作を行う mysql の場合、このログはデータベースのログに複数の

フラッシュが存在する可能性があります。または、mysqladmin、mysqldump を使用してフラッシュログを呼び出し、パラメータ delete-master-logs を使用すると、これらのログ ファイルは消え、新しいログ ファイルが表示されます。

そのため、バックアップしたことがない場合は有効にします。ログは必要ない場合があります。

完全バックアップと同時にフラッシュ ログを呼び出し、増分バックアップの前にフラッシュ ログを呼び出すことができます。最新のデータをバックアップするためのバックアップです。


完全なバックアップ スクリプト

データベースに大量のデータがある場合、通常は数日かかるか、データ量が多い場合はアプリケーションの動作への影響を避けるためにデータを週に 1 回バックアップします。比較的小さい場合は、1 日に 1 回データをバックアップしても問題ありません

#!/bin/sh

# by scud http://www. 2005-10-30
#
# use mysqldump --help、詳細を取得します。
#

BakDir=/backup/mysql

LogFile=/backup/mysql/mysqlbak.log


DATE=` date +%Y% m%d`

echo " " >> $LogFile

echo " " >> $LogFile

echo " ------ ----------" >> $LogFile
echo $(date +"%y-%m-%d %H :%M:% S") >> $LogFile
echo "--------------------------" >> $LogFile

cd $ BakDir


DumpFile=$DATE.sql

GZDumpFile=$DATE.sql.tgz


mysqldump --quick --all-databases --flush-logs

--delete-master-logs --lock -all-tables

> $DumpFile

echo "ダンプ完了" >> $LogFile

tar czvf $GZDumpFile $DumpFile >>&1

echo "[$GZDumpFile]バックアップ成功! " >> $LogFile

rm -f $DumpFile

#delete 以前の毎日のバックアップ ファイル: ファイルが完全にバックアップされると、増分バックアップ ファイルは削除されます。

cd $BakDir/daily


rm -f *

cd $BakDir

echo "バックアップが完了しました!"

echo "$BakDir ディレクトリを確認してください!"

echo "ローカル ディスクにコピーするか、ftp でどこかにコピーしてください !!!"

ls -al $BakDir

上記のスクリプトは、mysql をローカルの /backup/mysql ディレクトリにバックアップし、増分バックアップ ファイルは /backup/mysql/daily ディレクトリに配置されます。


注: 上記のスクリプトは、バックアップされたファイルを保存しません。他のリモート コンピューターに送信する場合、数日前のバックアップ ファイルは削除されません。ユーザーは、関連するスクリプトを追加するか、手動操作を実行する必要があります。

増分バックアップ


増分バックアップのデータ量は比較的少ないですが、削除する必要があります。完全バックアップに基づいてください。ユーザーは時間とコストを比較検討して、自分にとって最も有益な方法を選択できます。

増分バックアップは bin ログを使用します。スクリプトは次のとおりです:

#!/bin/sh


#

# mysql binlog バックアップ スクリプト

#

/usr/bin/mysqladmin flash-logs

DATADIR=/var/lib/mysql

BAKDIR=/backup/mysql/daily


###特別な設定を行った場合ここを変更するか、この変数を適用する行を変更してください: デフォルトではマシン名が使用され、mysql もデフォルトではマシン名を使用します

HOSTNAME=`uname -n`


cd $DATADIR

FILELIST=`cat $HOSTNAME-bin.index`

# #行数、つまりファイルの数を計算します

COUNTER=0

$FILELISTのファイルに対して
do
COUNTER=`expr $COUNTER + 1 `
done

$FILELIST のファイルの NextNum=0

do

base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $COUNTER ]
then
echo "skip lastest"
else
dest=$BAKDIR/$base
if(test -e $dest )
then
echo "$base の存在をスキップ"
else
echo "$base をコピーしています"
cp $base $BAKDIR
fi
fi
done

echo "backup mysql binlog ok"
増分バックアップ スクリプトは、バックアップ前にログをフラッシュし、メモリ内のログを自動的にファイルに保存し、新しいログ ファイルを生成するため、最初のログ ファイルのみをバックアップする必要があります。つまり、最後のバックアップはバックアップされていません
前回のバックアップから今回のバックアップまでに複数のログ ファイルが生成される可能性があるため、バックアップされている場合はそのファイルを検出する必要があります。

注: 同様に、ユーザー自身がリモートで送信する必要がありますが、完全なバックアップ後にプログラムが自動的に生成されます

。スクリプトを実行できるようにするには、対応するユーザー名とパスワード、mysqladmin と mysqldump を設定する必要があります。もちろん、これらはすべてスクリプト内に記述することができます。システムの root ユーザーを使用してこのスクリプトを実行すると仮定すると、変更するのは不便なので、/root (つまり、root ユーザーのホーム ディレクトリ) に .my.cnf ファイルを作成する必要があります。次の内容

[mysqladmin]

password =password
user= root
[mysqldump]
user=root
password=password
注: このファイルは root のみが読み取れるように設定してください (chmod 600 .my.cnf. )

このファイルは、プログラムがデータのバックアップに mysql の root ユーザーを使用することを説明しており、パスワードは対応する設定です。このように、スクリプトにユーザー名とパスワードを記述する必要はありません。自動的に実行する

バックアッププログラムを自動的に実行するには、crontabに追加する必要があります

1つは、/etc/cron.dailyや/etc/などのディレクトリにスクリプトを置く方法です。 1 つは、crontab -e を使用して、root ユーザーのスケジュールされたタスクに追加することです。たとえば、完全バックアップは毎週日曜日の午前 3 時に実行され、毎日のバックアップは毎週月曜日から土曜日まで実行されます。午前3時

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。