› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
killerv
V2EX  ›  MySQL

mysqldump 导出数据库不完整?

  •  
  •   killerv · Apr 8, 2015 · 9510 views
    This topic created in 4198 days ago, the information mentioned may be changed or developed.

    今天导出一个数据库(挺大的)的时候使用mysqldump导出,几秒钟就完了,总感觉不对劲,下载到本地导入后发现少了很多表,楼主现在在用navicat dump sql file。。。

    请问有什么好方法快速而又完整的导出数据库?

    23 replies  •  2015-04-09 20:01:27 +08:00
    march1993
        1
    march1993  
       Apr 8, 2015
    你 mysqldump 命令怎么打的
    killerv
        2
    killerv  
    OP
       Apr 8, 2015
    @march1993 mysqldump -u username -p dbname > sqlfile
    xiaowu365
        3
    xiaowu365  
       Apr 8, 2015
    这不科学
    Mac
        4
    Mac  
       Apr 8, 2015
    mysql 的用户权限?你用的是root帐号?
    cst4you
        5
    cst4you  
       Apr 8, 2015
    大的还是直接拷data目录吧...
    caixiexin
        6
    caixiexin  
       Apr 8, 2015
    你是在sqlfile文件里发现少了表,还是把sqlfile文件恢复到数据库里少了表呢。
    前者的话,检查mysqldump时的日志看看,有没有报错?

    如果是后者的话,可能是你两个mysql数据库版本不一样,有些create table语句的语法不支持,从另一个库恢复的时候,create table语句失败了,这个问题手动改下导出的sqlfile文件的建表语句能解决。

    这是我dump时候的语句,一般把该加的参数都加上。
    mysqldump -h localhost -uusername -ppwssword -P端口号 --master-data=2 --single-transaction --opt --routines --events --triggers database_name
    imydou
        7
    imydou  
       Apr 8, 2015 via iPhone
    @cst4you data目录怎么还原数据?
    bjzhush
        8
    bjzhush  
       Apr 8, 2015
    有些特殊字符或者二进制的内容在数据库里面,即使导出了也不能正确导入
    lincanbin
        9
    lincanbin  
       Apr 8, 2015
    @imydou 复制粘贴data,适用于myisam。
    你mysqldump前有没有关闭所有可能正在使用mysql的服务?
    cst4you
        10
    cst4you  
       Apr 8, 2015
    @lincanbin 对...不适用于 innodb
    kn007
        11
    kn007  
       Apr 8, 2015
    @lincanbin
    @cst4you
    不对吧, innodb一样支持复制黏贴data目录,相同my.cnf(或者innodb段一致)就行了。。
    我自己一直通过这种方式。
    kn007
        12
    kn007  
       Apr 8, 2015
    另外我完整备份数据库的语句:
    mysqldump -h localhost -uroot -proot --lock-all-tables --all-databases > ALLDB.sql
    killerv
        13
    killerv  
    OP
       Apr 8, 2015
    @xiaowu365 我也感觉不科学,以前没问题的。
    @Mac 不是root账号
    @cst4you 感觉不太靠谱啊,很容易出问题吧=。=

    @caixiexin 我也没注意,sql文件比较大,后来使用navicat导出的,速度很慢,不过很完整。非常感谢你的回复。^^
    @bjzhush 应该是没有二进制内容的
    @lincanbin 没有关闭,php还在使用mysql,难道是这个原因?
    killerv
        14
    killerv  
    OP
       Apr 8, 2015
    @kn007 你这么做很严谨,我写的时候太随意了,估计有可能是这个问题,备份的时候不锁定表的话,无法保证数据库完整性,但是不至于出错吧?
    julyclyde
        15
    julyclyde  
       Apr 8, 2015
    @kn007 那只是你以为可以。实际上不可以
    kn007
        16
    kn007  
       Apr 8, 2015
    @julyclyde 你是说innodb么?我换过几次VPS全部都是data直接过去,我不知道你怎么知道是我以为,而不是我去尝试后,得出来的结论。
    我就是确认可以,才专门付费给dropbox去同步整个data目录到dropbox,每次我也是通过dropbox恢复下来的。
    如果不行你首先要确认下你ibdata1等这些有没有复制到。
    还有就是my.cnf的innodb_data_file_path要一致。我确实试了可以再说的。
    我的mysql版本是5.6,从5.5到5.6我都是这样过来的。

    如果是说这条语句:
    mysqldump -h localhost -uroot -proot --lock-all-tables --all-databases > ALLDB.sql
    我自己也是试了可以的。
    kn007
        17
    kn007  
       Apr 8, 2015
    @julyclyde 忘记说了,别忘了log file(ib_logfile),你可以自己去试一次。
    kn007
        18
    kn007  
       Apr 8, 2015
    @killerv 不锁定表,可能会不一致,或者被锁表可能不会被备份(这个我确实不知道,我每次都是锁表的)
    cloudzhou
        19
    cloudzhou  
       Apr 8, 2015
    这样严谨的做法当然要 lock table 的,在 lock 之后以及进行 flush cache,之后就是文件直接 sync 都是可以的
    caola
        20
    caola  
       Apr 8, 2015
    我一般使用:
    mysqldump --host=localhost --user=root --password=root --add-locks --add-drop-table --lock-tables --database my_data > my_data.sql
    julyclyde
        21
    julyclyde  
       Apr 8, 2015
    @kn007 关闭服务之后自然是可以。不过……关闭服务的备份还有意义吗?只有可活体拷贝的数据才是可运维的
    kn007
        22
    kn007  
       Apr 9, 2015
    @julyclyde 我备份还锁表呢。
    关闭服务对于我的项目没有问题,前面有mc存储了数据,无法提交的问题,我早就发好公告。而且也选择了尽量少人的时间去做。
    当然可能这些对于你和楼主无法接受吧。看大家跑的东东吧。
    julyclyde
        23
    julyclyde  
       Apr 9, 2015
    @kn007 innodb可以不锁,用特殊工具可以拷贝出来。myisam锁全局之后可以直接拷贝文件。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2599 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 104ms · UTC 02:47 · PVG 10:47 · LAX 19:47 · JFK 22:47
    ♥ Do have faith in what you're doing.