首页 > 数据库 > mysql教程 > 如何将大型 MySQL 转储拆分为较小的文件?

如何将大型 MySQL 转储拆分为较小的文件?

DDD
发布: 2024-11-24 22:39:11
原创
269 人浏览过

How to Split a Large MySQL Dump into Smaller Files?

将大型 mysqldump 输出拆分为较小的文件

有必要将表从一个数据库传输到另一个数据库,但 mysqldump 的转储输出是对于某些上传限制来说通常太大。本文探讨了一种巧妙的解决方案,将庞大的 mysqldump 输出拆分为可管理的较小文件。

shell 脚本建议的一种潜在方法是将转储拆分为每个表的单独文件。这可以使用 csplit 命令并指定表结构标记作为分割点来实现。

考虑使用此技术的 bash 脚本:

#!/bin/bash

####
# Split MySQL dump SQL file into one file per table
# based on https://gist.github.com/jasny/1608062
####

#adjust this to your case:
START="/-- Table structure for table/"
# or 
#START="/DROP TABLE IF EXISTS/"


if [ $# -lt 1 ] || [[  == "--help" ]] || [[  == "-h" ]] ; then
        echo "USAGE: extract all tables:"
        echo "  DUMP_FILE"
        echo "extract one table:"
        echo "  DUMP_FILE [TABLE]"
        exit
fi

if [ $# -ge 2 ] ; then
        #extract one table 
        csplit -s -ftable  "/-- Table structure for table/" "%-- Table structure for table \`\`%" "/-- Table structure for table/" "%40103 SET TIME_ZONE=@OLD_TIME_ZONE%1"
else
        #extract all tables
        csplit -s -ftable  "$START" {*}
fi

[ $? -eq 0 ] || exit

mv table00 head

FILE=`ls -1 table* | tail -n 1`
if [ $# -ge 2 ] ; then
        # cut off all other tables
        mv $FILE foot
else
        # cut off the end of each file
        csplit -b '%d' -s -f$FILE $FILE "/40103 SET TIME_ZONE=@OLD_TIME_ZONE/" {*}
        mv ${FILE}1 foot
fi

for FILE in `ls -1 table*`; do
        NAME=`head -n1 $FILE | cut -d$'x60' -f2`
        cat head $FILE foot > "$NAME.sql"
done

rm head foot table*
登录后复制

此脚本使用 csplit 来分割转储文件分成单独的表文件,每个文件以相应的表命名。这允许稍后轻松地重新组装成单个文件。要使用此脚本,只需提供转储文件的路径作为第一个参数,并可选择指定要提取的特定表作为第二个参数。

以上是如何将大型 MySQL 转储拆分为较小的文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板