勉強したことのメモ

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で大文字小文字

半角英数字のみのフォームで入力した値を検索した際、 データに差異が発生。 [Aa ...

MySQLでIPを整数値としてカラムに格納する

MySQLでIPを整数値としてカラムに格納しているケースがあった。今までIPが必 ...

phpMyAdminやAdminer上だけ文字化け

レンタルサーバーのプログラムでWebページ上では文字化けしていないのに、phpM ...

adminerでMySQLに接続しようとするとエラーになる場合の対応方法

新しく構築したサーバにadminerを入れて接続しようとすると、「mysqlnd ...

MySQLでテーブルの詳細情報を取得

MySQLでテーブルの詳細情報を取得 desc テーブル名; ■サンプル mys ...