把数据库分卷打包成zip文件,可以自定义多少张表一个文件!


<?php
// 配置参数
define('DB_HOST', 'localhost');
define('DB_USER', '08i8.com');
define('DB_PASS', 'root');
define('DB_NAME', 'root');
define('EXPORT_DIR', __DIR__.'/backups/');
define('CHUNK_SIZE', 50); // 每50张表分一个文件

// 创建备份目录
if (!file_exists(EXPORT_DIR)) {
    mkdir(EXPORT_DIR, 0755, true);
}

// 获取数据库连接
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 获取所有表名
$tables = [];
$result = $conn->query("SHOW TABLES");
while ($row = $result->fetch_row()) {
    $tables[] = $row[0];
}

// 分卷导出
$chunks = array_chunk($tables, CHUNK_SIZE);
foreach ($chunks as $index => $chunk) {
    $filename = EXPORT_DIR . DB_NAME . '_part_' . ($index+1) . '_' . date('Ymd_His') . '.sql';
    exportTables($conn, $chunk, $filename);
    compressFile($filename);
}

echo "导出完成!共生成 ".count($chunks)." 个分卷文件";

// 导出指定表到SQL文件
function exportTables($conn, $tables, $filename) {
    $handle = fopen($filename, 'w');
    
    // 写入表结构
    foreach ($tables as $table) {
        $create = $conn->query("SHOW CREATE TABLE `$table`")->fetch_row();
        fwrite($handle, "-- 表结构: $table\n");
        fwrite($handle, $create[1].";\n\n");
        
        // 写入数据
        $result = $conn->query("SELECT * FROM `$table`");
        while ($row = $result->fetch_assoc()) {
            $values = array_map([$conn, 'real_escape_string'], $row);
            fwrite($handle, "INSERT INTO `$table` VALUES ('".implode("','", $values)."');\n");
        }
        fwrite($handle, "\n");
    }
    
    fclose($handle);
}

// 压缩SQL文件
function compressFile($filename) {
    $zip = new ZipArchive();
    $zipname = str_replace('.sql', '.zip', $filename);
    
    if ($zip->open($zipname, ZipArchive::CREATE) === TRUE) {
        $zip->addFile($filename, basename($filename));
        $zip->close();
        unlink($filename); // 删除原始SQL文件
    }
}


评论(0条)

请登录后评论
ziyuan

ziyuan Rank: 16

0

0

0

( 此人很懒并没有留下什么~~ )

首页

栏目

搜索

会员