本文由 资源共享网 – 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文件
}
}
