勉強したことのメモ

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で文字列を置換する方法

MySQLで文字列の置換を行いたかった。以下に方法をメモ。   目次1 ...

MySQLiでINSERT文

MySQLiでINSERT文 ■ソース $mysqli = new mysqli ...

MySQLで構文エラーが出た際は予約語も疑う

MySQLで構文エラーが発生しており、チェックしたところ、どう見ても構文的には間 ...

MySQLでテーブルとデータの複製(コピー)する方法

MySQLでテーブルとデータを複製したかった。ダンプとかではなく、簡単なSQL文 ...