mysqldump 不导出所有行或 mysql 不导入

xen*_*ndi 8 mysql mysqldump backup

我有一个包含近 400 万行的表。我将它导出mysqldump并通过它传输scp到另一台服务器并使用mysql命令导入它,但现在它缺少几十万行。我已经多次重复这个过程,每次都丢失了不同数量的行。

我尝试过,mysqldump --compatible=ansi因为在一次导出中,由于某种原因,语法中有错误。该转储最终拥有最多的导入行,但仍然缺少数十万行。

编辑:我尝试了 -f 选项,但在返回命令提示符之前它仍然打印出一个 mysql 错误:

ERROR 1064 (42000) at line 41458: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '286,'54.227.215.70','http://example.com/'),(81547367,'CbLc4lXH',1501560286,'54.7' at line 1
Run Code Online (Sandbox Code Playgroud)

我不确定它是否因为错误而退出,但我知道我在导入后丢失了大约一百万条记录。该文件大小为 40GB,我无法再访问以前的 mysql 服务器来进行另一次导出。我有我需要的所有数据。我只是无法将其导入。

Rol*_*DBA 5

有时,这可能是由于某些字符序列和导入时 MySQL 客户端的字符集的组合造成的。

通过执行以下操作,您可以在没有其他工具的情况下捕获此类错误

mysql -u dbuser -p -f -D thedb < importfile.sql 2>errors_encountered.txt
Run Code Online (Sandbox Code Playgroud)

这会将您的问题点记录到 errors_encountered.txt

用 mysqldump 开始可以做什么???

简化导出内容

您可以使用--hex-blob选项将字符转换为十六进制表示。这可以缓解 MySQL 客户端程序方面的任何字符集误解或误解。

一次倾倒一排

即使在MySQL 客户端使用--force时,这仍然可能导致数百或数千行未被插入。为什么 ?

默认情况下,mysqldump 已启用--opt。这设置了以下内容

  --opt               Same as --add-drop-table, --add-locks, --create-options,
                      --quick, --extended-insert, --lock-tables, --set-charset,
                      and --disable-keys. Enabled by default, disable with
                      --skip-opt.
Run Code Online (Sandbox Code Playgroud)

请注意,选项之一是--extended-insert。这会导致 mysqldump 一次以数百或数千行的块设置插入。

如果行块中只有一行存在导入问题并且您使用的是--force,则不会插入整个行块。

你如何获得一个块的所有好的部分。对于使用--extended-insert创建的 mysqldump ,没有简单的方法。发生这种情况时你能做什么?我有好消息和坏消息。

好消息:您必须使用--skip-extended-insert. 这会强制 mysqldumpINSERT为每一行创建一个。这样,在导入期间使用--force时,INSERT由于任何时候情况导致的无效不会影响周围的行。

坏消息 #1:这使得生成的 mysqldump 文件更大。

坏消息 #2:导入生成的 mysqldump 文件需要很长时间。

这是我推荐的Aug 09, 2013从 MySQL 5.5 附件表备份/导出数据一直失败!

建议

要消除由此产生的大小问题,您可以执行以下操作

在执行 mysqldump 时 gzip mysqldump

nohup mysqldump ... | gzip > importfile.sql.gz &
Run Code Online (Sandbox Code Playgroud)

解压缩 mysqldump 并将其通过管道传输到 mysql 以进行导入

gzip -d < importfile.sql.gz | mysql -u dbuser -p -f -D thedb
Run Code Online (Sandbox Code Playgroud)

试一试 !!!