勉強したことのメモ

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で文字列の置換を行いたかった。以下に方法をメモ。   目次1 ...

MySQLで特定カラムの
タグを改行コードに一括置換させる方法

MySQLで特定カラムの<br>タグを改行コードに一括置換したかった ...

MySQLでカラム内容によって条件分岐させたい場合の対応方法

MySQLでカラムの内容によって条件を分岐させたかった。またPHPで処理するので ...

MySQLでROW_NUMBER関数を使用してグループ毎に連番を設定する方法

以前にMySQLでオートインクリメントを使用せずにグループ毎に連番を設定する方法 ...

MySQLで一連の処理を関数のように実行できるストアドプロシージャの設定と利用方法

MySQL関連のサイトを見ていた際にストアドプロシージャが云々というページがあっ ...