mysqldumpが使えないレンタルサーバでMySQLのバックアップ
2024/03/04
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が使えるサーバからこのプログラムを定期的に参照させる。
尚、アクセスログみたく膨大な行数になるものは止めといた方がよさそう。
関連記事
-
-
MySQLで経度緯度から半径○Kmのデータを抽出する方法
経度と緯度をtext型として格納しているMySQLのテーブルがあり、指定した経度 ...
-
-
MySQLで文字列を置換する方法
MySQLで文字列の置換を行いたかった。以下に方法をメモ。 目次1 ...
-
-
MySQLで直近に挿入したオートインクリメントの値と次回挿入する値を取得する方法
phpとmysqliを使っている中で次回挿入するオートインクリメントの値と、前回 ...
-
-
MySQLのトリガーを使用して特定のテーブルの操作を行った際に別テーブルにログを残す方法
MySQLにトリガーという機能があるらしくどのようなものか調べたところ、事前に「 ...
-
-
MySQLにてSELECT時にdate型のカラムから年齢を計算し取得する方法
MySQLにdate型のカラムに誕生年月日が格納されており、そこから年齢を計算し ...