今天使用mysqldump命令备份数据的时候出现了一个问题。

一开始迁移 Discuz 7 论坛的 mysql 数据库时,采用 mysqldump 命令的时候一切顺利,但导入的时候却遇到了

ERROR 1062 (xxxxx) at line 1262: Duplicate entry 'XXX' for key 'XXX‘ 错误,并停在原地。

对于遇到相同错误的朋友千万别第一时间就尝试用 –force 参数强行导入(除非你原来的数据库已经崩溃)。因为这样做的话,即使导入了,也会有一大片数据丢失!这时候你可以尝试以下2个方法:

一、mysqldump 备份的时候使用 --extended-insert=false 参数。原理如下:

使用MySqldump命令导出数据时的注意

在使用Mysql做基础数据库时,由于需要将库B的数据导入库A,而A,B库又包含大量相同的数据,需要使用mysqldump导出脚本.

通常的命令会是

mysqldump -t 'dbName' > 'scriptName.sql'

mysql -f 'dbName' < 'scriptName.sql'

而使用如下命令导入到A库时不会成功,现象是报出几个Duplicate key error后就完毕了,并未将其余正确的数据插入到A库中.

捣鼓了好一会,发现在使用mysqldump导出的脚本命令中,insert语句采用是multiline insert synax.而不是采用single insert synax.原来是这个问题. 多行的插入语法在第一个主健重复错误后就不执行后续的对应表的插入语句了.

于是再加参数 --extended-insert=false,完整的命令是

mysqldump --extended-insert=false dbname > scriptname.sql

二、手工把表中username里存在重复的值删除

使用数据库工具 Navicat 之类的,执行查询:

Select username,Count(*) From cdb_members Group By username Having Count(*) > 1

结果中就能显示出表中存在重复的字段, 你会看到2个或者多个完全一模一样重复的用户名。删除其中一行的记录,保存后再导出数据库。

这里需要特别注意:备份的时候,把表结构跟数据分开!

以下是 mysqldump 的一些使用参数

备份数据库:

#mysqldump 数据库名 >数据库备份名

#mysqldump -A -u用户名 -p密码 数据库名>数据库备份名

#mysqldump -d -A --add-drop-table -uroot -p >xxx.sql

1.导出结构不导出数据

mysqldump -d 数据库名 -uroot -p > xxx.sql

2.导出数据不导出结构

mysqldump -t 数据库名 -uroot -p > xxx.sql

3.导出数据和表结构

mysqldump 数据库名 -uroot -p > xxx.sql

4.导出特定表的结构

mysqldump -uroot -p -B数据库名 --table 表名 > xxx.sql

#mysqldump [OPTIONS] database [tables]

mysqldump支持下列选项:

--add-locks

在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)。

--add-drop-table

在每个create语句之前增加一个drop table。

--allow-keywords

允许创建是关键词的列名字。这由表名前缀于每个列名做到。

-c, --complete-insert

使用完整的insert语句(用列名字)。

-C, --compress

如果客户和服务器均支持压缩,压缩两者间所有的信息。

--delayed

用INSERT DELAYED命令插入行。

-e, --extended-insert

使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)

-#, --debug[=option_string]

跟踪程序的使用(为了调试)。

--help

显示一条帮助消息并且退出。

--fields-terminated-by=...

--fields-enclosed-by=...

--fields-optionally-enclosed-by=...

--fields-escaped-by=...

--fields-terminated-by=...

这些选择与-T选择一起使用,并且有相应的LOAD DATA INFILE子句相同的含义。

LOAD DATA INFILE语法。

-F, --flush-logs

在开始导出前,洗掉在MySQL服务器中的日志文件。

-f, --force,

即使我们在一个表导出期间得到一个SQL错误,继续。

-h, --host=..

从命名的主机上的MySQL服务器导出数据。缺省主机是localhost。

-l, --lock-tables.

为开始导出锁定所有表。

-t, --no-create-info

不写入表创建信息(CREATE TABLE语句)

-d, --no-data

不写入表的任何行信息。如果你只想得到一个表的结构的导出,这是很有用的!

--opt

同--quick --add-drop-table --add-locks --extended-insert --lock-tables。

应该给你为读入一个MySQL服务器的尽可能最快的导出。

-pyour_pass, --password[=your_pass]

与服务器连接时使用的口令。如果你不指定“=your_pass”部分,mysqldump需要来自终端的口令。

-P port_num, --port=port_num

与一台主机连接时使用的TCP/IP端口号。(这用于连接到localhost以外的主机,因为它使用 Unix套接字。)

-q, --quick

不缓冲查询,直接导出至stdout;使用mysql_use_result()做它。

-S /path/to/socket, --socket=/path/to/socket

与localhost连接时(它是缺省主机)使用的套接字文件。

-T, --tab=path-to-some-directory

对于每个给定的表,创建一个table_name.sql文件,它包含SQL CREATE 命令,和一个table_name.txt文件,它包含数据。 注意:这只有在mysqldump运行在mysqld守护进程运行的同一台机器上的时候才工作。.txt文件的格式根据--fields-xxx和--lines--xxx选项来定。

-u user_name, --user=user_name

与服务器连接时,MySQL使用的用户名。缺省值是你的Unix登录名。

-O var=option, --set-variable var=option设置一个变量的值。可能的变量被列在下面。

-v, --verbose

冗长模式。打印出程序所做的更多的信息。

-V, --version

打印版本信息并且退出。

-w, --where='where-condition'

只导出被选择了的记录;注意引号是强制的!

"--where=user='jimf'" "-wuserid>1" "-wuserid<1"

导入数据:由于mysqldump导出的是完整的SQL语句,所以用mysql客户程序很容易就能把数据导入了:

#mysql 数据库名 < 文件名

#source /tmp/xxx.sql

本文标题: 使用MySQL MySqldump命令导出数据时的注意事项

本文地址: http://www.cppcns.com/shujuku/mysql/111381.html

mysql命令导出数据不完整_使用MySQL MySqldump命令导出数据时的注意事项相关推荐

  1. mysql dump一张表_如何用mysqldump单独导出一张表

    匿名用户 1级 2018-11-22 回答 在命令行下mysql的数据导出有个很好用命令mysqldump,它的参数有一大把,可以这样查看: mysqldump 最常用的: mysqldump -ur ...

  2. mysql 数据日志分析_基于mysql数据库的日志分析系统

    现如今,日志已经成为了我们分析系统及相关服务的一个重要工具.而日志也具有其相对较为固定的格式以便于进行统计查询.其大致格式如下: 日期时间            主机            进程[pi ...

  3. mysql拉数据到本地_从mysql中dump数据到本地

    方法一:使用mysqldump命令,如: mysqldump -h10.90.6.237 -uf_insplat2car_r -P3306 -pxxxxxxxxx nbmp tb_tag_log -- ...

  4. mysql命令行不支持中文_解决MySQL命令行不支持中文的问题

    MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以UTF-8为例来说明 需要注意的是,要修改的地方非常多,相应的修改方法也很多.下面是一种最简单最彻底的方法: ...

  5. docker中mysql数据定时备份_[Docker]MySql 定时备份

    前言 今天调整了机器的参数,要做一个备份,想到还没有做自动备份,要是数据丢了,就啥都没了.所以研究了下,使用mysqldump来定时备份mysql的数据. 分析 我这块数据库是在容器中运行的,在宿主机 ...

  6. mysql禁止数据被删除_为什么MySQL不建议delete删除数据

    我负责的有几个系统随着业务量的增长,存储在MySQL中的数据日益剧增,我当时就想现在的业务方不讲武德,搞偷袭,趁我没反应过来把很多表,很快,很快啊都打到了亿级别,我大意了,没有闪,这就导致跟其Join ...

  7. 涂抹mysql 完整_涂抹mysql笔记-管理mysql服务

    $ /mysql/scripts/mysql_install_db --datadir=/mysql/data --basedir=/mysql support-files/mysql.server脚 ...

  8. mysql 查数据 default无效_导入mysql数据的时候提示Field * doesn't have a default value解决方法...

    项目使用django+mysql 在linux中使用的是mysql5.7,导入数据提示:Field * doesn't have a default value 想要解决问题就需要知道在mysql5. ...

  9. arcmap shp导出cad无反应_如何使用ArcMap将Excel数据转换为shp数据

    1. 概述 对ArcMap而言,除了shapefile等数据源,还可以将包含地理位置的表格数据以 XY 坐标的形式添加到地图中,比如Excel格式的数据,如果包含有坐标数据在里面,就可以通过导入XY数 ...

最新文章

  1. Nature :全球表层土壤中微生物组的结构和功能
  2. ABP源码分析三十四:ABP.Web.Mvc
  3. Java范例集锦(一)
  4. boost::function_types::function_arity用法的测试程序
  5. SAP Spartacus的StorefrontConfig对象
  6. memache的使用场景
  7. hadoop streaming编程小demo(python版)
  8. 星海中学2021高考成绩查询,广东中考时间2021
  9. php5.5.* mysqlnd驱动安装
  10. 操作socket报Too many open files errno :24错误解决方法
  11. NoHttp使用简析——Android网络请求框架(二)
  12. python如何上传文件_Python 上传文件
  13. 在校大学生如何规划自己的程序员之路
  14. 中国省-市-县(区)三级城市数据(json和数组)
  15. 计算机电子管与晶体管区别,电子管、晶体管与集成电路 扫盲
  16. 使用GPS和velodyne 64拼接地图
  17. JavaScript和TypeScript学习心得
  18. 企业微信渠道二维码如何制作?
  19. 初中学历程序员面试被HR吐槽,初中学历还有要月薪3万5,到底是学历重要还是能力重要?...
  20. gms认证流程_谷歌GMS测试认证具体流程

热门文章

  1. Spring学习总结(28)——Spring获取request对象的几种方法及线程安全性总结
  2. Spring MVC学习总结(20)——SpringMVC传参总结
  3. 网站性能测试指标:QPS、TPS、吞吐量、响应时间概述
  4. PHP学习总结(3)——PHP入门篇之PHP的echo语句
  5. Java基础学习总结(49)——Excel导入导出工具类
  6. Pipeline As Code With Jenkins2.0
  7. Future和FutureTask实现异步计算
  8. Dell 12G服务器 手动安装RedHat 6.X
  9. 让大家信任自己,做个行为和语言上都没黑盒子的技术人员(转)
  10. BZOJ 3529 数表(莫比乌斯+树状数组)