ホームページ  >  記事  >  データベース  >  mysqlバックアップスクリプトの詳しい説明

mysqlバックアップスクリプトの詳しい説明

零下一度
零下一度オリジナル
2017-05-03 13:56:141234ブラウズ

スクリプトの説明

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

(データが少ない場合は、1 日に 1 回完全なデータをバックアップするだけで十分ではありません。増分バックアップを行うために必要です)

作者の意見 私はシェルスクリプトに詳しくないので、多くの場所が非常に愚かに書かれています:)

binログを有効にする

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

[mysqld]

log-bin

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

大量のバックアップを増やしたい場合は、このログをオンにする必要があります。

頻繁にデータベース操作を行う mysql の場合は、これを有効にします。ログは非常に大きくなり、データベース内に複数の

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

そのため、バックアップを行わない場合は、ログを有効にする必要はありません。

増分バックアップの前に、フラッシュ ログとフラッシュ ログを同時に実行できます。最新のデータをバックアップするための

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

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

ダウンロード データ量が比較的大きいと仮定します。バックアップ スクリプトは次のとおりです: (インターネット上の mysql バックアップ スクリプトを参照しました。ありがとうございます)。 :))

#!/bin/sh
# mysql data backup script
# by scud http://www.jscud.com
# 2005-10-30
#
# use mysqldump --help,get more detail.
#
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 "Dump Done" >> $LogFile
tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile]Backup Success!" >> $LogFile
rm -f $DumpFile
#delete previous daily backup files:采用增量备份的文件,如果完整备份后,则删除增量备份的文件.
cd $BakDir/daily
rm -f *
cd $BakDir
echo "Backup Done!"
echo "please Check $BakDir Directory!"
echo "copy it to your local disk or ftp to somewhere !!!"
ls -al $BakDir

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

注: 上記のスクリプトは、バックアップされたファイルを転送しません。ファイルを他のリモート コンピューターにアップロードすることも、数日間削除することもありません。 以前のバックアップ ファイル: ユーザーは、関連するスクリプトを追加するか、手動で操作する必要があります。

増分バックアップ

増分バックアップのデータ量は比較的小さいですが、必要があります。ユーザーは時間とコストを比較して、最も有益な方法を選択できます。

増分バックアップは次のとおりです:

#!/bin/sh
#
# mysql binlog backup script
#
/usr/bin/mysqladmin flush-logs
DATADIR=/var/lib/mysql
BAKDIR=/backup/mysql/daily
###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名
HOSTNAME=`uname -n`
cd $DATADIR
FILELIST=`cat $HOSTNAME-bin.index`
##计算行数,也就是文件数
COUNTER=0
for file in $FILELIST
do
COUNTER=`expr $COUNTER + 1 `
done
NextNum=0
for file in $FILELIST
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 "skip exist $base"
else
echo "copying $base"
cp $base $BAKDIR
fi
fi
done
echo "backup mysql binlog ok"

増分バックアップ スクリプトはフラッシュします。 -logs before backing. MySQL は自動的にメモリ内のログをファイルに保存し、新しいログ ファイルを生成するため、最初のいくつかだけをバックアップする必要があります。つまり、最後のログ ファイルはバックアップしません。

前回のバックアップから今回のバックアップまでに複数のログ ファイルが生成される可能性があるため、ファイルがバックアップされている場合は、バックアップする必要はありません。

注: 同様に、ユーザーもバックアップする必要があります。リモートで送信しますが、削除する必要はありません。完全なバックアップ後にプログラムが自動的に生成します。

設定にアクセスします

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

[mysqladmin]
password =password
user= root
[mysqldump]
user=root
password=password

注: このファイルを root のみが読み取りできるように設定します (chmod 600 .my.cnf)。 )

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

自動的に実行されます。

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

1 つは、/etc/cron.daily や /etc/cron.weekly などのディレクトリにスクリプトを配置する方法です。

1 つは、crontab -e を使用して root ユーザーに設定することです。たとえば、スケジュールされたタスクでは、完全バックアップは毎週日曜日の午前 3 時に実行され、毎日のバックアップは毎週月曜日から土曜日の午前 3 時に実行されます。午前3時

以上がmysqlバックアップスクリプトの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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