最近碰到的几个问题
Posted bisal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最近碰到的几个问题相关的知识,希望对你有一定的参考价值。
最近的开发过程中碰到了几个问题,都是知道不知道的类型,记录一下,避免下次再犯。
问题1 在程序中和mysql做交互的时候,提示这个错误,
Column count doesn't match value count at row 1
从字面的意思,应该很直白了,一般出现在INSERT语句,指定的字段数据和数据库表的字段类型不同。
场景1 不指定具体插入的字段名称,但是实际在VALUES中的个数和表字段个数不同,
INSERT INTO table_name
VALUES (value1, value2, value3,...)
这就是为什么我们在规范中要求INSERT必须指定要插入的具体字段名称。
改为字段和VALUES字段一一对应,这个不香么?
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
场景2 INSERT语句指定了具体的字段名称,但是个数和VALUES不同,这就是考眼力了,
INSERT INTO table_name(col_name1, col_name2, col_name3) VALUES('value1','value2');
我的错误就是这场景,因为调整VALUES中某个值的时候多删了一个字段。
场景3 书写错误
其实和2很相近,例如多写了个","。
问题2 从MySQL集群环境用mysqldump导出导入数据的时候,提示这个错误,
@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty
他的意思是,当前GTID_EXECUTED参数已经有值,而从集群导出来的dump文件中包含了SET @@GLOBAL.GTID_PURGED的操作。
解决方案1 reset master
这个操作可以将当前库的GTID_EXECUTED值置空。
解决方案2 设置-set-gtid-purged=off
在dump导出时,添加--set-gtid-purged=off参数,避免将gtid信息导出,例如,
mysqldump -uroot -p --set-gtid-purged=off test > test.sql
问题3 MySQL导出的时候,一般用什么参数?
这个咨询了老杨,这是常用的参数,
mysqldump --single-transaction --master-data=2 --all-databases -E -R --triggers --set-gtid-purged=off
--single-transaction,为了不进行全局的锁表,但同时能保证数据一致性,加这个参数。
--master-data=2,master-data会将二进制日志的位置和文件名写入到输出中,2则会将change log行注释。
-E,指的是导出event,我理解就是Oracle中的job定时任务。
-R,导出存储过程和自定义函数。
--triggers,导出触发器,默认会导出,可使用--skip-triggers不导出。
如果是单机,一般用--single-transaction,可能就够了,如果是测试数据,或无业务请求,即使用lock-all-tables都可以。
近期更新的文章:
文章分类和索引:
以上是关于最近碰到的几个问题的主要内容,如果未能解决你的问题,请参考以下文章