本文由 资源共享网 – ziyuan 发布,转载请注明出处,如有问题请联系我们![免费]php分卷打包压缩程序(用于大数据库转移)
收藏把数据库分卷打包成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文件 } }