勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

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

   2024/03/04  PHP 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

  関連記事

MySQLのクエリキャッシュの設定方法

MySQLでのクエリキャッシュ設定及び設定項目について以下にメモ。   ...

MySQLで直近に挿入したオートインクリメントの値と次回挿入する値を取得する方法

phpとmysqliを使っている中で次回挿入するオートインクリメントの値と、前回 ...

Codeigniter4でMySQLに接続しCRUD操作する方法

Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...

MySQLで「doesn't have a default value」エラーの対処

MySQLでINSERT時に「Field 'カラム名' doesn't have ...

MySQLでデータベース単位とテーブル単位のデータサイズ(容量)の調べ方

VPSの各種ファイルを整理している際に「MySQLも不要なデータを削除すればいい ...