mysqldump 有一个使用多值插入打开或关闭的选项。您可以根据自己的喜好执行以下任一操作:
每个值单独插入语句:
mysqldump -t -h192.168.212.128 -P3306 --default-character-set=utf8 --skip-extended-insert -uroot -proot database_name table_name > test.sql
多值插入语句:
mysqldump -t -h192.168.212.128 -P3306 --default-character-set=utf8 --extended-insert -uroot -proot database_name table_name > test.sql
所以你可以做的是首先使用以下内容转储架构:
mysqldump -t -h192.168.212.128 -P3306 --default-character-set=utf8 --no-data -uroot -proot database_name > dbschema.sql
然后将数据单独转储为单独的插入语句:
mysqldump -t -h192.168.212.128 -P3306 --default-character-set=utf8 --skip-extended-insert --no-create-info -uroot -proot database_name table_name > test.sql
然后,您可以将 INSERT 文件拆分为尽可能多的部分。例如,如果您使用的是 UNIX,请使用 split 命令。
如果您担心导入需要多长时间,您可能还需要添加 --disable-keys 选项以加快插入速度。
但我的建议是不要太担心这一点。 mysqldump 不应超过 MySQL 在单个语句中导入的能力,它应该比单个插入运行得更快。至于文件大小,SQL 的一个优点是它可以很好地压缩。那个数 GB 的 SQL 转储将变成一个非常紧凑的 gzip 或 bzip 或 zip 文件。
编辑:如果您真的想在多值插入转储中调整每个插入的值的数量,您可以添加 --max_allowed_packet 选项。例如。 --max_allowed_packet=24M 。数据包大小决定了单个数据包(例如插入)的大小,因此如果将其设置得足够低,它应该会减少每次插入的值的数量。不过,在你开始搞砸之前,我会按原样尝试。