将大型 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中文网其他相关文章!