SQLの窓

2015年08月01日


PHP から MySQL の簡易的なバックアップを取得する( 但し、DBサーバがディスクへの書き込み権限を持っている必要があります )

実際には、ローカルの MySQL にしか使えなさそうですが、ビューとテーブルの CREATE 文を取得して、TABLE からは CSV 形式のデータを取るコードです。
<?php
// **************************************
// MIME と キャラクタセットを設定
// **************************************
header( "Content-Type: text/html; Charset=utf-8" );

// **************************************
// キャッシュを無効にするヘッダ
// **************************************
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

// ***********************************************
// グローバル変数
// ***********************************************
$server = 'データベースサーバー';
$db_name = 'データベース名';
$user = 'ユーザ名';
$password = 'パスワード';

print "処理開始<br>";
// ***********************************************
// データベース接続
// ***********************************************
$connect = @ new mysqli($server, $user, $password, $db_name);
if ($connect->connect_error) {
	die('Connect Error (' . $connect->connect_errno . ') '
	. $connect->connect_error);
}


$query = "show full tables";
// クエリ
$result = $connect->query($query); 
if ( !$result ) {
	die('クエリーに誤りがあります : ' . $connect->error );
}

$table = array();
$view = array();

while ($row = $result->fetch_array(MYSQLI_BOTH)) {
	if ( $row[1] == "BASE TABLE" ) {
		$table[] = $row[0];
	}
	if ( $row[1] == "VIEW" ) {
		$view[] = $row[0];
	}
}

$create_view = "";

for( $i = 0; $i < count( $view ); $i++ ) {
	$query = "show create view {$view[$i]}";
	$result = $connect->query($query);
	while ($row = $result->fetch_array(MYSQLI_BOTH)) {
		$create_view .= $row[1] . ";\n\n";
	}
}

print "view 定義出力<br>";
file_put_contents("./create_view.sql", $create_view );


$create_table = "";

for( $i = 0; $i < count( $table ); $i++ ) {
	$query = "show create table {$table[$i]}";
	$result = $connect->query($query);
	while ($row = $result->fetch_array(MYSQLI_BOTH)) {
		$create_table .= "// [{$i}] {$table[$i]}" . "\n";
		$create_table .= $row[1] . ";\n\n";
	}
}

print "table 定義出力<br>";
file_put_contents("./create_table.sql", $create_table );


print "データ出力開始<br>";
for( $i = 0; $i < count( $table ); $i++ ) {
	$path = realpath("./");
	$path .= DIRECTORY_SEPARATOR ."file_{$i}.csv";
	@unlink($path);
	$path = str_replace("\\", "\\\\", $path );
	$query = "SELECT * INTO OUTFILE '{$path}' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\\n' FROM `{$table[$i]}`";
	$connect->query($query);

}
print "データ出力終了<br>";

?>

レンタルサーバでは、phpmyadmin をインストールしたほうが速いですね。(実際そうしました)

ただ、phpmyadmin は、最新では PHP 5.3+ を要求するので注意です。

インストールと言うほどの処理は無く、アップロードして config フォルダを作って、setup フォルダにアクセスして特別な設定があればそこで入力して設定ファイルを作成し、ファイルを phpmyadmin があるフォルダに移動して config フォルダを削除すれば出来上がりです。


関連する記事



【PHP + データベースの最新記事】
posted by lightbox at 2015-08-01 22:15 | PHP + データベース | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり