勉強したことのメモ

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

  関連記事

PHPでmysqli関数使用時のプリペアドステートメントの利用方法

PHPでMySQLを扱う際はmysqli関数を、エスケープの際はreal_esc ...

MySQLにてdate型のカラムから曜日を計算し表示する方法

MySQLにてdateもしくはdatetime型のデータを取り出して曜日もあわせ ...

MySQLにてdatetime型のカラムを整形し「年月日のみ形式」または「秒のみ省いた形式」で表示する方法

MySQLにてdatetime型のカラムに登録日時等を格納しており、管理画面側で ...

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

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

MySQLにてSELECT時にdate型のカラムから干支(十二支)を計算し表示する方法

MySQLにdate型のカラムに誕生年月日が格納されており、そこから干支(十二支 ...