スクリプトの説明
すべてのデータを 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 サイトの他の関連記事を参照してください。