一、测试环境
操作系统:redhat 6.9
MySQL服务端版本:5.7.21
Mysqldump版本:
mysqldump Ver 10.13 Distrib 5.1.73, for redhat-linux-gnu (x86_64)
mysqldump Ver 10.13 Distrib 5.7.21, for linux-glibc2.12 (x86_64)
二、环境准备
CREATE TABLE `test` (
`id` char(12) COLLATE gbk_bin NOT NULL,
`name` char(2) COLLATE gbk_bin NOT NULL,
`col3` varchar(17) COLLATE gbk_bin NOT NULL,
`CALCOL` varchar(38) COLLATE gbk_bin GENERATED ALWAYS AS (concat(`id`,`name`)) VIRTUAL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_bin;
INSERT INTO `test` (`id`, `name`, `col3`) VALUES (‘010000000104′,’05’,’62805010000000104′);
三、mysqldump问题重现
以下分别使用mysql5.7版本mysqldump与mysql5.1版本的mysqldump对表进行备份。
[root@aboss ~]# /usr/local/mysql/bin/mysqldump –version
mysqldump Ver 10.13 Distrib 5.7.21, for linux-glibc2.12 (x86_64)
[root@aboss ~]# /usr/local/mysql/bin/mysqldump -h192.168.8.198 -uroot -pxxxxxx –set-gtid-purged=OFF testdb test>test_5_7.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@aboss ~]# mysqldump –version
mysqldump Ver 10.13 Distrib 5.1.73, for redhat-linux-gnu (x86_64)
[root@aboss ~]# mysqldump -h192.168.8.198 -uroot -pxxxxxx testdb test>test_5_1.sql
导出都是正常。
以下将对两个备份文件进行恢复
5.7版本的mysqldump导入是正常的
mysql -uroot -pxxxxxx testdb <test_5_7.sql
而使用5.1版本的mysqldump导入时候,就报错了
[root@aboss ~]# mysql -uroot -pxxxxxx testdb <test_5_1.sql
ERROR 3105 (HY000) at line 40: The value specified for generated column ‘CALCOL’ in table ‘test’ is not allowed.
报错信息是虚拟列是不允许被指定值的。
四、出现问题的原因
分别查看一下mysqldump导出来的内容
mysqldump5.7.21
INSERT INTO `test` (`id`, `name`, `col3`) VALUES (‘010000000104′,’05’,’62805010000000104′);
mysqldump 5.1.73
INSERT INTO `test` VALUES (‘010000000104′,’05’,’62805010000000104′,’01000000010405′);
从上面可以看出,5.7版本的mysqldump导出的sql文件,指定了列名,而不包含虚拟列,而5.1版本的mysqldump导出的sql文件,没有指定列名,也包含了虚拟列,所以会报错。
装了mysql5.7.21版本的数据库,为什么会使用5.1版本的mysqldump呢?
由于redhat6系统,默认安装的是mysql5.1版本的rpm,mysqldump将被安装在/usr/bin/目录下面。当你输入命令的时候,系统会优先在/usr/bin下面查找命令。
五、如何避免
1、使用mysqldump时要查看一下版本
2、使用mysqldump时,指定完整的路径
3、把操作系统默认装的5.1版本的mysqldump卸载掉
rpm -e mysql-5.1.73-8.el6_8.x86_64
评论前必须登录!