2

特定のページに表示されているテーブルのバックアップSQLファイルを保存できるボタンをコンテンツ管理システムに設定したいと思います。可能であれば、SQLファイルを自分のコンピューターにダウンロードしたいだけです。また、同じことを実行できるかどうかを知りたいと思いましたが、テーブルデータのExcelファイルとしてエクスポートしました。

データベース全体のバックアップを作成する方が簡単な場合は、それが可能かどうか、スクリプトを作成するために何を探しているのかを知る必要があります。

うまくいけば、これが理にかなっていると思いますが、実際に可能かどうかわからないため、何を探す必要があるのか​​を知るのに苦労しています。私はphpでコーディングしています。

前もって感謝します。

4

1 に答える 1

3

これがあなたを可能にする小さなページです:

  • 必要なテーブルを確認してください
  • それらをダウンロードする
  • またはディスクに書き込む(サーバー側)

しかし

セキュリティを気にするなら、そうすべきではありません。

この種の操作を行いたい場合は、代わりにphpMyAdminを使用することをお勧めします。

また、ダウンロードせずに自動バックアップを実行したい場合はcronmysqldumpコマンドを使用することをお勧めします。Cronは、毎晩バックアップを実行するように多くのサーバーで構成されています。

これを見てください:

http://www.comentum.com/mysqldump-cron.html

http://www.noupe.com/how-tos/10-ways-to-automatically-manually-backup-mysql-database.html

上手。これがPHPページです:

<?

$db_base="set_your_base";
$db=mysql_connect("xxxx","xxxx","xxxx")
or die ("unable to connect");
$select_base=mysql_selectdb($db_base,$db);


function get_para_value($name, $default_value) {
    global $HTTP_GET_VARS, $HTTP_POST_VARS, $_GET, $_POST;
    if( isset($_GET[$name])) {
        return $_GET[$name];
    }
    if( isset($_POST[$name])) {
        return $_POST[$name];
    }
    return $default_value;
}


$action=get_para_value('action', 'ask');

if ($action=='ask') {
    ?>
    <html>
    <body>
    <SCRIPT LANGUAGE="JavaScript">
    var checkflag = "false";
    function check(form) {
        var objCheckBoxes = form.elements;
        if (checkflag == "false") {
            for (i = 0; i < objCheckBoxes.length; i++) {
                objCheckBoxes[i].checked = true;
            }
            checkflag = "true";
            return "Uncheck all";
        } else {
            for (i = 0; i < objCheckBoxes.length; i++) {
                objCheckBoxes[i].checked = false;
            }
            checkflag = "false";
            return "Check all";
        }
    }
    </script>

    <center>

    <form name=dump_form action=dump_dys.php method="post" enctype="multipart/form-data" accept-charset="utf-8">
    <br>
    Choose the tables you want:
    <br>
    <br>
    <input type=button value="Check all" onClick="this.value=check(this.form)">
    <br>
    <br>
    <table>
    <?php
    $sql_tables = "SHOW TABLES";
    $req_tables = mysql_query($sql_tables);
    while (list($table) = mysql_fetch_row($req_tables)) {
        echo "<tr><td><input type=checkbox name=".$table."> ".$table."</td></tr>";
    }
    ?>
    </table>
    <input type=hidden name=action value=dump>
    <br>
    <input type=button value="Download" onClick="this.form.action.value='dump';this.form.submit();">
    &nbsp; <input type=button value="Write on server" onClick="this.form.action.value='dump_to_disk';this.form.submit();">
    </form>
    </center>
    </body>
    </html>
    <?php
} else if ($action=='dump') {
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment;filename=\"$db_base.sql\"");
    header("Content-Transfer-Encoding: binary");
    echo "--\n";
    echo "-- Dump of database $db_base\n";
    echo "--\n";
    $sql_tables = "SHOW TABLES";
    $req_tables = mysql_query($sql_tables);
    while (list($table) = mysql_fetch_row($req_tables)) {
        if (get_para_value($table,'no')=='no') continue;
        echo "\n--\n-- Table $table\n\n";
        echo "DROP TABLE IF EXISTS $table;\n";
        $sql_create_table = "SHOW CREATE TABLE $table";
        $req_create_table = mysql_query($sql_create_table);
        $create_table = mysql_fetch_array($req_create_table);
        echo $create_table[1].";\n";
        echo "\n--\n-- Filling de $table\n\n";
        $sql_fill_table = "SELECT * FROM $table";
        $req_fill_table = mysql_query($sql_fill_table);
        while ($row = mysql_fetch_assoc($req_fill_table)) {
        $line_insert = "INSERT INTO $table (";
        $l_value = ") VALUES (";
        foreach ($row as $field => $value) {
            $line_insert .= "`$field`, ";
            $l_value .= "'".mysql_real_escape_string($value)."', ";
        }
        $line_insert = substr($line_insert, 0, -2);
        $l_value = substr($l_value, 0, -2);
        echo $line_insert.$l_value.");\n";
       }
    }

    echo "--\n";
    echo "-- Dump of base $db_base finished )\n";
    echo "--\n";
} else if ($action=='dump_to_disk') {
    $file = fopen($db_base.".sql", 'w') or die('bug!');
    fwrite($file, "--\n");
    fwrite($file,  "-- Dump of the base $db_base\n");
    fwrite($file,  "--\n");
    $sql_tables = "SHOW TABLES";
    $req_tables = mysql_query($sql_tables);
    while (list($table) = mysql_fetch_row($req_tables)) {
        if (get_para_value($table,'no')=='no') continue;
        fwrite($file,  "\n--\n-- Table $table\n\n");
        fwrite($file,  "DROP TABLE IF EXISTS $table;\n");
        $sql_create_table = "SHOW CREATE TABLE $table";
        $req_create_table = mysql_query($sql_create_table);
        $create_table = mysql_fetch_array($req_create_table);
        fwrite($file,  $create_table[1].";\n");
        fwrite($file,  "\n--\n-- Remplissage de $table\n\n");
        $sql_fill_table = "SELECT * FROM $table";
        $req_fill_table = mysql_query($sql_fill_table);
        while ($row = mysql_fetch_assoc($req_fill_table)) {
        $line_insert = "INSERT INTO $table (";
        $l_value = ") VALUES (";
        foreach ($row as $field => $value) {
            $line_insert .= "`$field`, ";
            $l_value .= "'".mysql_real_escape_string($value)."', ";
        }
        $line_insert = substr($line_insert, 0, -2);
        $l_value = substr($l_value, 0, -2);
        fwrite($file,  $line_insert.$l_value.");\n");
       }
    }
    fwrite($file, "--\n");
    fwrite($file, "-- Dump of base $db_base finished (not even a crash!)\n");
    fwrite($file, "--\n");
    fclose($file);
    echo "dump done";
}
?>
于 2012-07-17T14:21:58.433 に答える