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でランダムにデータを取得しつつページング機能も実装する方法
MySQLからデータを持ってくる際にランダムな表示を行ってほしいと言われた。ただ ...
-
-
MySQLにて直近のクエリで発行されたAUTO_INCREMENTの値を取得する方法
やりたかったことは「MySQLで新規登録(INSERT)なら、登録時のAUTO_ ...
-
-
MySQLでスレッドの実行状況を表示しスレッドの経過時間チェックや特定スレッドを強制終了する方法
データベースサーバが重たく、原因を調査する機会があった。サーバ自体のメモリやCP ...
-
-
MySQLでwhere句を使ってカラム指定でデータをコピーする方法
MySQLで大量のデータを保存しているテーブルがあり、そのデータを絞った上で尚且 ...
-
-
InnoDBのオートインクリメントで抜け番が発生する原因について
MySQLのInnoDBでIDというカラムにオートインクリメント設定していたが、 ...