首页  >  文章  >  数据库  >  如何将大型 mysqldump 输出拆分为较小的文件以便于传输和导入?

如何将大型 mysqldump 输出拆分为较小的文件以便于传输和导入?

DDD
DDD原创
2024-11-11 19:55:03512浏览

How can I split a large mysqldump output into smaller files for easier transfer and import?

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

在数据库之间传输大型 MySQL 表时,压缩的 mysqldump 输出可能会超过最大文件数允许导入到目的地的大小。为了克服这一挑战,用户可以采用以下方法:

使用 csplit 拆分转储文件

bash 脚本可用于将 mysqldump 文件拆分为单独的文件每张桌子。此脚本利用 csplit 实用程序根据特定模式创建文件:

START="/-- Table structure for table/"

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*

在 mysqldump 中使用 --extended-insert=FALSE

此选项生成 SQL可以拆分为可导入文件的文件。 Split 可以与 --lines 选项一起使用来控制每个文件的行数。可以使用试错或压缩工具(例如 bzip2)来确定每个文件大小的适当行数。

以上是如何将大型 mysqldump 输出拆分为较小的文件以便于传输和导入?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn