首页 > 数据库 > mysql教程 > 如何将 Mysqldump 输出拆分为更小的文件以便于服务器上传?

如何将 Mysqldump 输出拆分为更小的文件以便于服务器上传?

Barbara Streisand
发布: 2024-11-17 03:06:03
原创
1064 人浏览过

How to Split Mysqldump Outputs into Smaller Files for Easier Server Upload?

将 Mysqldump 输出拆分为较小的文件以供服务器上传

尝试将表数据从一个 MySQL 数据库移动到另一个时,可能会出现文件大小限制。如果 mysqldump 的输出超出了允许的上传大小,则需要一种方法将输出拆分为更小的文件。

一种解决方案涉及在 mysqldump 中使用 --extended-insert=FALSE 选项。这将创建一个 .sql 文件,可以使用 split(1) 和合适的 --lines 选项来拆分该文件。但是,如果 cat(1) 无法在远程服务器上使用,则此方法变得不可行。

或者,可以使用 bash 脚本将转储文件拆分为每个表的单独文件。该脚本使用 csplit 根据特定模式(例如表结构或表名称)划分文件。

以下是一个示例脚本:

#!/bin/bash

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 输出拆分为更小的文件以便于服务器上传?的详细内容。更多信息请关注PHP中文网其他相关文章!

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