勉強したことのメモ

webプログラマが勉強したことのメモ。

mysqldumpが使えないレンタルサーバでMySQLのバックアップ

   

mysqldumpが使えないレンタルサーバで開発を行うことがあり、尚且つ他社に使ってもらうものなのでMySQLのバックアップは定期的に取っておきたかった。

無理やりだけどPHPでmysqldumpっぽい結果を出すような関数を作ったのでメモ。

//----------------------------------------
//	[引数]
//	$table(string) テーブル名
//	[返り値]
//	string or false
//----------------------------------------
function getDump( $table = '' ){
	if( !$table ){
		return false;
	}

	//DB接続
	$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
	$mysqli->set_charset('utf8');


	//カラム情報の取得
	$sql = '
		SHOW COLUMNS 
		FROM `'.$table.'`
	';
	$row = $mysqli->query($sql);
	if( !$row ){
		return fasle;
	}
	while ($rs = $row->fetch_array(MYSQLI_ASSOC)) {
		$data['Field'][] = $rs['Field'];
	}


	//データの取得
	$sql = '
		SELECT * 
		FROM `'.$table.'`
	';
	$row = $mysqli->query($sql);
	if( !$row ){
		return fasle;
	}
	while ($rs = $row->fetch_array(MYSQLI_ASSOC)) {
		$data['data'][] = $rs;
	}

	$return = 'INSERT INTO `'.$table.'` (`'.implode('`,`', $data['Field']).'`) VALUES ';
	foreach( $data['data'] as $key => $val ){
		$return .= "('".implode("','", $val)."'),";
	}

	$return = rtrim($return, ',') . ";\n";
	return $return;
}

DB接続の部分を適宜編集した上で、引数にテーブル名を渡せばOK。file_put_contentsとかでファイル化して、どこかのディレクトリに保存しておいたり、メールで送る形が良いかと。

あとはcronが使えるサーバからこのプログラムを定期的に参照させる。

尚、アクセスログみたく膨大な行数になるものは止めといた方がよさそう。

 - PHP, MySQL

  関連記事

PHPの文字化け対策

PHPファイルもDBも全部UTF-8で出来たらいいけど、 そうもいかない場合が多 ...

MySQLで加算しつつNULL値は0にする

いくつかのコードに対して投票を行い、 その合計値をスコアとして出したい。 ただ、 ...

PHPで指定日から曜日を割り出す

曜日ってどうやって割り出すの? となったのでメモ。 ■リファレンス http:/ ...

PHPの連想配列と正当性のチェック

ソースの解析中、こんな書き方があったのか、 と思ったのでメモ。 $List = ...

PHP7.4でAPCuとOPcacheをインストールする方法

先日本ブログのサーバをCentOS6系から7系に移行し、その際にMySQLのバー ...

クロスドメインな状況でiframeがIEのみ挙動がおかしくなる場合

iframeで別のドメインのサイトを表示させた場合に、firefoxやchrom ...

Codeigniterで異なるデータベースを使用する

Codeigniterで2つのコンテンツがあって、それぞれ別のデータベースを使用 ...

画像登録用のfunction

<?php /****** 画像アップロード用function 画像送付側 ...

PHPで簡単にCSVファイルの生成

簡単にデータ並べるだけのCSVファイル生成。 file_put_contensで ...

権限が無い場合のエラー

SQLでINSERTする際、見たことに無いエラーに遭遇した。 INSERT co ...