免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2505 | 回复: 8
打印 上一主题 下一主题

请教yejr一个mysqldump得问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-19 14:47 |只看该作者 |倒序浏览
我用mysql 是4.1.0版本得
我dump了一个大概2.2G得库
mysqldump --master-data -uroot -pxxxx c2cboss >c2cboss.sql
由于c2cboss库得某些数据含有'或者,  导致我将c2cboss.sql倒回到slave db得时候报错
ERROR 1064 (42000) at line 318: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server
version for the right syntax to use near '濞淺'',328979731,'鍔茶垶鍥㈠崱',12012,'0010000000',9,910,0,3000,0,'139BD513-444C' at line

1.请教我如何将这份数据导入到库中,由于这台server非常重要,我除了晚上4点可以作mysqldump外白天是不能对他锁表得
2.mysqldump 只有在5.0以后才支持直接在mysqldump 加入--fields-escaped-by,之前必须--tab,那样我得一个表一个表得写脚本恢复
3.c2cboss库都是gbk字符得,我mysqldump时候没有加入--default-character-set=gbk,不知道会不会不是,或者'引起得错误,而是乱码导致得

谢谢!

论坛徽章:
0
2 [报告]
发表于 2006-05-19 15:03 |只看该作者
我感觉你说的第 3 点可能是主因。
因为如果是“'”单引号的问题,那么当初你把数据存进数据库的时候就应该报SQL语法错误了。

论坛徽章:
0
3 [报告]
发表于 2006-05-19 15:49 |只看该作者
不是得哦
你看
mysql> show tables;
+-----------------------+
| Tables_in_c2cboss     |
+-----------------------+
| BossAttenUserLevel    |
| BossBigSale           |
| BossBigSaleNote       |
| BossBigSaleRules      |
| BossCity              |
| BossCommodNotify      |
| BossCommodity         |
+-----------------------+
很明显前面得表数据都被倒进去了,而且前面也有表得字符是gbk乱码得,但是依然可以导入,只有BossCommodity这个表得数据为0

不知道你有没有遇到过这种情况,怎么不救?

论坛徽章:
0
4 [报告]
发表于 2006-05-19 15:59 |只看该作者
说实话,我还没碰到过导出来不能导进去的情况,不过我这里也没那么大的数据量。
另外,你导出的时候,有没有用那个 -e 参数?防止因为 insert 语句过长造成错误?

论坛徽章:
0
5 [报告]
发表于 2006-05-19 16:38 |只看该作者
首先非常感谢你
我已经测试过了
1.我选出几条含有'得列作为一个表t1
2.dump这个表,然后dorp t1,再倒回数据,报错
3.我再次选出几条含有'得列作为一个表t1
4.mysqldump --default-character-set=gbk .....
5.dorp t1,然后导入数据,一切ok
6.观察dump出来得sql文本,发现含有'得地方已经加入\转义了

结论
大家在dump数据得时候,不论是latin1还是gbk都加上--default-character-set=gbk,这样好处很多,除了解决刚才我得问题外,dump出得sql文件也不会有乱码,最关键一点,你可以把gbk字符得表dump出来,只需改变create table 后面得字符集gbk为latin1,就可以实现gbk表导入latin1得db中


非常感谢yejr
希望能多跟你交流

论坛徽章:
0
6 [报告]
发表于 2006-05-19 17:40 |只看该作者
原帖由 talen-t 于 2006-5-19 16:38 发表
首先非常感谢你
我已经测试过了
1.我选出几条含有'得列作为一个表t1
2.dump这个表,然后dorp t1,再倒回数据,报错
3.我再次选出几条含有'得列作为一个表t1
4.mysqldump --default-character-set=gbk .....
5. ...


呵呵,我还没帮上你什么忙呢,不好意思。
这种大数据量的情况下为什么不直接打包数据文件呢,这比用mysqldump可方便多了,而且速度快。
最近忙于翻译文档,家里也不能上网,因此老是没时间更新faq,要不然很多问题就不会重复问了。
用mysqldump的时候,我的经验就是:
1. 一定指定字符集,除非使用的是latin1
2. 一定使用 --extended-insert=false 选项
3. 视实情而定是否需要加 --compatible 选项

论坛徽章:
0
7 [报告]
发表于 2006-05-22 09:30 |只看该作者
这种大数据量的情况下为什么不直接打包数据文件呢,这比用mysqldump可方便多了,而且速度快。

我这可是24小时不能停机,停mysql得,我这一停,前台所有程序都要挂掉重来了

不过仔细查了查,发现了最终原因其实是因为mysqldump和mysql得默认字符不一致引起得,mysqldump默认字符是utf-8,而mysql默认是你编译mysql时指定得字符(默认时latin1),这些可以在mysql --help和mysqldump --help中看到,所以解决得办法就是在你用mysql倒数据得时候加入--default-character-set=utf-8就可以了!呵呵!最近发现好多mysql字符集引起得问题,比如mater是latin1,slave用gbk编译,slave启动mysql时在my.cnf中指定字符为latin1,结果在同步字符串匹配得时候报错,因为slave不加指定得话得mysqld还是gbk,他会以默认得字符去作为client连接,也就是slave用gbk去匹配mater得latin1,所以报错!

论坛徽章:
0
8 [报告]
发表于 2006-05-22 09:54 |只看该作者
建议你做master/slave同步,比你这样定期dump出来再导入方便多了。

论坛徽章:
0
9 [报告]
发表于 2006-05-22 10:03 |只看该作者
是啊,做主从同步或者利用二进制变更日志去代替mysqldump。
这样就可以避免每天只能凌晨 4 点去工作的限制。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP