细节
-
错误
-
状态: Done">完成
-
高
-
解决方法: 固定
-
3.0.13,3.2.1之上,3.3.0
-
没有一个
-
没有一个
-
04 -核心
-
是的
描述
对用户的影响:
- 部分列数据全部丢失
复制步骤:
1.根据初始描述创建数据:
删除表成员测试创建表MemberTest (MemberId)int(10) UNSIGNED NOT NULL, ' Password ' varchar“评论”')引擎=InnoDB默认字符集=utf8;添加主键(MemberId)INSERT INTO ' MemberTest ' (' MemberId ', ' Password ') VALUES (1)“测试”);
2.检查表格内容:
mysql> select * from MemberTest+----------+----------+ | MemberId |密码 | +----------+----------+ | 1 |测试 | +----------+----------+ 1行集(0.00秒)
3.pt-osc运行:
$ /home/sveta/mysqlpackages/雷竞技下载官网percona-toolkit-3.3.0/bin/pt-online-schema-change“添加列c1 INT”D=test,t=MemberTest,u=sveta——execute没有发现slave。看到——recursion-method如果主机Delly-7390有奴隶。没有检查slave lag,因为没有找到slave,并且没有指定——check-slave-lag。#一个软件更新是可用的:Operation, tries, wait: analyze_table, 10,1 copy_rows, 10,0.25 create_triggers, 10,1 drop_triggers, 10,1 swap_tables, 10,1 update_foreign_keys, 10,1 changing ' test ' . ' MemberTest '…创建新表格创建新表测试。_MemberTest_new OK。改变新表格改变“测试”。“_MemberTest_new”好了。2012-02-13 t18:38:46创建触发器…2021-02-13T18:38:46创建触发器OK。2021-02-13T18:38:46复制大约1行…2021-02-13T18:38:46复制行OK。2021 - 02年- 13 - t18:38:46分析新表格交换桌子…2021-02-13T18:38:46替换原来的和新表好。扔掉旧桌子…删除旧表“test”。“_MemberTest_old”好了。删除触发器…2021-02-13T18:38:46删除触发器OK。成功修改' test ' . ' MemberTest '。
4.再次检查表格内容:
实际结果:
mysql> select * from MemberTest+----------+----------+------+ | MemberId |密码| c1 | +----------+----------+------+ | 1 | |零 | +----------+----------+------+ 1行集(0.00秒)
注意,“Password”一列是空的。
预期结果:
mysql> select * from MemberTest+----------+----------+------+ | MemberId |密码| c1 | +----------+----------+------+ | 1 | |测试NULL | +----------+----------+------+ 1行集(0.00秒)
处理:
N/A
细节
sveta.smirnova:这里的问题是,GENERATED是一个关键字,因为5.7允许生成列。例如,列没有数据,但存储计算值。可以是这样的:foo INT GENERATED ALWAYS AS 2+2
最初的报告:
在使用pt-online-schema-change更改表后,其中一列的数据丢失了,这似乎与列注释上的“生成”一词有关。
命令:pt-online-schema-change——alter "ADD COLUMN c1 INT" D=test_kevin,t=MemberTest——execute
版本:pt-online-schema-change 3.2.1
服务器版本:5.7.16-10-57
测试数据:
删除表成员测试创建表MemberTest (MemberId)int(10) UNSIGNED NOT NULL, ' Password ' varchar“评论”')引擎=InnoDB默认字符集=utf8;添加主键(MemberId)INSERT INTO ' MemberTest ' (' MemberId ', ' Password ') VALUES (1)“测试”);
这个问题可能与pt - 1570但这似乎应该得到解决。