この記事では 2 種類のデータベース ファイリング コードを紹介します。1 つは私たちが PHP で作成した一般的に使用されるデータベース バックアップ クラスで、もう 1 つは Linux の友人のために mysql データベースの自動スケジュール バックアップ用のコードです。
次の PHP コードを backdata.class.php ファイルに保存します
コードは次のとおりです |
コードをコピー |
/*
*
*単純な Mysql バックアップ データ クラス
*
*/
クラスバックアップデータ{
プライベート $mysql_link;//リンク識別
プライベート $dbName //データベース名
private $dataDir; //データが保存されるディレクトリ
Private $tableNames;//テーブル名 パブリック関数 __construct($mysql_link){
$this->mysql_link = $mysql_link;
}
パブリック関数backupTables($dbName,$dataDir,$tableNames){//バックアップを開始します
$this->dbName = $dbName;
$this->dataDir = $dataDir;
$this->tableNames = $tableNames;
$tables=$this->delarray($this->tableNames);
$sqls='';
foreach($tables as $tablename){
if($tablename==''){//テーブルが存在しない場合
続行;
}
//***********************以下はSQLの前半です*********** ***
//テーブルが存在する場合は、まずテーブルを削除します
$sqls .= "DROP TABLE IF EXISTS $tablename;n";
//テーブル構造を読み取る
$rs = mysql_query("SHOW CREATE TABLE $tablename",$this->mysql_link);
$row=mysql_fetch_row($rs);
// SQL を形成するためのテーブル構造を取得します
$sqls.=$row['1'].";nn";
unset($rs);
unset($row);
//**********************以下はSQLの後半です**************
//テーブル内のすべてのデータを検索します
$rs=mysql_query("select * from $tablename",$this->mysql_link);
//テーブル内のフィールドの数
$field=mysql_num_fields($rs);
//次の SQL ステートメントを作成します: "INSERT INTO `groups` VALUES('1499e0ca25988d','Director','','0');"
while($rows=mysql_fetch_row($rs)){
$sqls.="INSERT INTO `$tablename` VALUES(";
for($i=0;$i
$sqls.=$comma."'".$rows[$i]."'";
$comma=',';
}
$sqls.=");nnn";
}
}
$backfilepath=$this->dataDir.date("Ymdhis",time()).'.sql';
//ファイルを書き込む
$filehandle = fopen($backfilepath, "w");
fwrite($filehandle, $sqls);
fclose($filehandle);
}
プライベート関数 delarray($array){ // 受信配列を処理します
foreach($array as $tables){ ’’ s ’to s s s s' out out out out an — ‐ ‐ ‐ ‐ ‐ ‐ eは($ tables == '*'){
$newtables=mysql_list_tables($this->dbName,$this->mysql_link);
$tableList = array();
for ($i = 0; $i
array_push($tableList,mysql_tablename($newtables, $i));
}
$tableList=$tableList;
}その他{
$tableList=$array;
休憩;
}
}
return $tableList;
}
}
?>
|
新しいファイルを作成し、background.class.phpと同じディレクトリに保存します
使用方法:
コードは次のとおりです
| コードをコピー
|
require_once("backdata.class.php");
$link = @mysql_connect("localhost","データベース名","パスワード") または die ('サーバーに接続できませんでした。');
mysql_query("cms を使用",$link);
mysql_query("set names utf8",$link);
$dbbck=new backupData($link);//インスタンス化します。リンク識別子だけで十分です
//データをバックアップするときに、データベース内のすべてのテーブルをバックアップしたい場合は、次のように記述できます:
$dbbck->backupTables("cms","./",array('*'));
//データをバックアップするときに、データベース内の 1 つのテーブルだけをバックアップしたい場合は、次のように記述できます:
$dbbck->backupTables("cms","./",array('user'));
//データをバックアップするときに、データベース内の複数のテーブルをバックアップしたい場合は、次のように記述できます:
$dbbck->backupTables("cms","./",array('user','acl','informatoin'));
//注: $dbbck->backupTables("パラメータ 1", "パラメータ 2", array());,
|
パラメータ 1 は: データベース名、
パラメータ 2 は、バックアップ データが保存される場所 (つまり、ディレクトリ アドレス) です
3 番目は: 保存したいテーブルです
以下は Linux での自動スケジュールバックアップのコードです
インターネット上の多くのチュートリアルと私自身のテストを参照した後、次のスクリプトはテストされ、動作します。
コードは次のとおりです |
コードをコピー |
#!/bin/bash
#Crontab で MySQL データベースを毎日自動的にバックアップするための Shell コマンド
#著者 : カルロス・ウォン
#日付 : 2010-08-24
#設定パラメータ
USER=root #データベースユーザー名" >ユーザー名
PASSWORD=××××× #データベースユーザーパスワード
DATABASE=TIENIUZAI #データベース名
WEBMASTER=tieniuzai@qq.com #バックアップ失敗メッセージのリマインダーの送信に使用される管理者のメールアドレス
BACKUP_DIR=/var/www/Data_Backup/topons/ #バックアップファイルの保存パス
LOGFILE=/var/www/Data_Backup/topons/data_backup.log #ログファイルパス
DATE=`日付 ‘+%Y%m%d-%H%M’` #日付形式 (ファイル名として)
DUMPFILE=$DATE.sql #バックアップファイル名
ARCHIVE=$DATE.sql.tgz #圧縮ファイル名
OPTIONS="-u$USER -p$PASSWORD –opt –extended-insert=false –triggers=false -R –hex-blob –flush-logs –delete-master-logs -B $DATABASE” #mysqldump パラメータについてはヘルプを参照詳細 mysqldump-help
#バックアップファイルの保存ディレクトリが存在するかどうかを確認し、存在しない場合はディレクトリを作成します
if [ ! -d $BACKUP_DIR ] ;
それでは
mkdir -p “$BACKUP_DIR”
ふぃ
# バックアップを開始する前に、バックアップ情報ヘッダーをジャーナル ファイルに書き込みます
エコー ” ” >> $LOGFILE
エコー ” ” >> $LOGFILE
エコー「——————————————————」>> $LOGFILE
echo "バックアップ日:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE
エコー「——————————————————」>> $LOGFILE
#バックアップディレクトリに切り替えます
cd $BACKUP_DIR
#mysqldump コマンドを使用して、指定したデータベースをバックアップし、フォーマットされたタイムスタンプを使用してバックアップ ファイルに名前を付けます
mysqldump $オプション > $DUMPFILE
#データベースのバックアップが成功したかどうかを確認します
if [[ $? == 0 ]] なら
#バックアップファイルの圧縮パッケージを作成します
tar czvf $ARCHIVE $DUMPFILE >>$LOGFILE 2>&1
#バックアップ成功メッセージをジャーナルファイルに入力します
echo 「[$ARCHIVE] バックアップが成功しました! >> $LOGFILE 」
#元のバックアップ ファイルを削除し、データベース バックアップ ファイルの圧縮パッケージだけを保持します
rm -f $ダンプファイル
それ以外
echo 「データベースのバックアップに失敗しました!」
#バックアップ失敗後にウェブサイト管理者にメールリマインダーを送信するには、mailutils または同様のターミナルメールツールのサポートが必要です
#mail -s “データベース:$DATABASE 毎日のバックアップに失敗しました” $WEBMASTER
ふぃ
#バックアッププロセス終了のリマインダーメッセージを出力します
「バックアッププロセスが完了しました」をエコーします
|
使用:
上記のコードを /usr/sbin/DataBackup に保存します (ファイル名は、システムの元のコマンドと同じ名前でない限り任意です。コードは sbin ディレクトリ内のどこにでも配置できます)実行の便宜のため、sbin ディレクトリーの下にあります。ファイル/ディレクトリーは、Windows の PATH 変数で指定されたディレクトリーと同様に、ターミナルで直接呼び出すことができます)
スクリプトに実行権限を追加します: sudo chmod +x /usr/sbin/DataBackup
スクリプトを実行します: sudo DataBackup
バックアップ コマンドを定期的に実行する必要がある場合は、次のコードを crontab ファイル (sudo vim /etc/crontab) に追加するだけです。
01 3 * * * root /usr/sbin/DataBackup #DataBackup スクリプトが毎日 3 時に実行されることを意味します
ちょっとした注意:
Linux のシェル スクリプトで定義される変数の形式は、key=value です。「=」の前後にスペースを入れてはなりません。そうしないと、システムは変数を確認できません。
赤でマークされた行で、最初の一重引用符のような文字「`」は、実際には一重引用符ではありません。その入力キーはキーボードの ESC キーの下にあります。
このスクリプトは、増分バックアップではなくデータベース全体をバックアップするため、一部の小規模サイトのバックアップにのみ適しており、大容量データベースのバックアップには適していません。
2 つの方法と比較すると、スケジュールされたバックアップが最適な方法です。これにより、時間を節約でき、アクセスする人が最も少ないときにマシンを自動的に登録できます。もちろん、手動での操作も必要です。 Windows でスケジュールされたタスクを使用する。
http://www.bkjia.com/PHPjc/632935.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632935.html技術記事この記事では、2 種類のデータベース ファイリング コードを紹介しています。1 つは、PHP で作成された一般的に使用されるデータベース バックアップ クラスで、もう 1 つは、Linux フレンド向けの mysql データベースの自動スケジュール バックアップ用のコードです。