mysql数据备份的一个坑
来源:互联网 发布:电视频道直播软件 编辑:程序博客网 时间:2024/06/05 20:06
最近在升级程序时,要先对数据库进行备份。首先使用的是navicat的备份功能,但是数据备份完,我又新建了一个空的数据库,结果数据还原进去后,发现user表一条记录也没有,所以navicat肯定是不能用了。
然后想到mysql自带一个mysqldump命令,可以用它来备份数据库,命令如下:
mysqldump -uroot -p xxx > /x/x/bak.sql
其中xxx为要备份的数据库的名字,后面为备份文件的路径。备份完后,看了看bak.sql,里面是有我的数据的。然后我用新的空库进行还原,命令如下
mysqldump -uroot -p xxx < /x/x/bak.sql
还原过程中虽然没报错,但是数据库里没东西。
网上查了下,可以用mysql连接数据库,然后使用source命令进行还原。
mysql -uroot -puse xxxsource /x/x/bak.sql
然后看了下数据库,还原成功了。这时候我觉得数据库备份应该没问题了,但这时坑其实已经开始了。
我先把原库删除,然后部署了程序,最后又使用备份文件还原了数据库。这时我进入程序中才发现,
我的数据大部分都没有了
WTF!!!
打开我的备份文件,突然发现,有一个表所有记录,居然是用一条insert语句插入的。
到这里,虽然我不敢百分百肯定,但我知道肯定坑就是在这了。为了提高数据的存储效率,所以mysql默认使用单条insert语句来执行整张表的数据的,但是对于数据量比较多的表,insert语句就会变得非常长,而mysql它自己又无法生成那么长insert语句,所以我的部分数据就没被备份。
查了下,可以使用--skip-extended-insert
或--extended-insert=false
参数来生成多条的insert语句,例如:
mysqldump -uroot -p --skip-extended-insert xxx > /x/x/bak.sql
经过测试,此方法生成的备份文件虽然稍大些,但是在还原速度和数据安全上都是没问题的(最开始生成的备份文件,还原需要20分钟,而此方法生成的备份文件,还原需要20秒钟)。
以上所有测试都是基于mysql5.5 windows 版本进行测试的,最新版的mysql未进行测试。我还从网上看到有人鼓励使用单条insert语句来进行数据库的备份,还进行了测试,说还原时速度快。但我感觉他像在放屁。
谨记。
- mysql数据备份的一个坑
- 一个简单MYSQL的数据备份类
- 备份mysql中一个表的数据
- mysql的数据备份
- mysql的数据备份操作
- 看到一个MYSQL自动备份的帖子
- 一个简单的mysql备份脚本用于线上备份
- MySQL数据备份利器mysqldump的使用
- MySql数据备份和还原的常用命令
- 另类备份MYSQL数据的方法
- mysql的数据备份和导入
- MySQL备份恢复数据的一般步骤
- 11,MySQL数据的备份和还原
- MySQL的备份与还原、导出数据
- MYSQL数据的导入,导出,备份
- mysql 备份数据迁移,出错的处理
- mysql的数据备份和恢复
- MySQL Community Server 5.7 的数据备份
- Mysql引擎Innodb和MyIASM
- WebUploader单击选择文件按钮无效
- Unity_项目优化策略_036
- hdu1023 Train Problem II [高精度卡特兰数]
- 【DL--08】深度学习 用于处理图像的CNN
- mysql数据备份的一个坑
- mybatis解决sql注入问题
- DOM、SAX、Pull解析XML
- Bootstrap源码之旅-variables
- 求一棵树中两节点之间距离(路径长度)的最大值
- nmcli双网卡绑定
- AsyncTask详解
- ajaxFileUpload上传图片
- 20170728_双端队列deque的常用函数