TiDB增加表的主键报错的处理方法
(2020-07-13 21:21:14)分类: Internet和计算机 |
问题:在TiDB中给表增加主键时,报错:
ALTER TABLE `yourtables` ADD PRIMARY
KEY (`new_primary_key`);
结果有报错如下:
ERROR 8200 (HY000): Unsupported add primary key, alter-primary-key
is false
[原因分析]
alter-primary-key
用于控制添加或者删除主键功能(在 3.0.6 及以后版本支持此配置项)。
默认值:false
默认情况下,不支持增删主键。将此变量被设置为 true 后,支持增删主键功能。不过对在此开关开启前已经存在的表,且主键是整型类型时,即使之后开启此开关也不支持对此列表删除主键。
alter-primary-key
用于控制添加或者删除主键功能(在 3.0.6 及以后版本支持此配置项)。
默认值:false
默认情况下,不支持增删主键。将此变量被设置为 true 后,支持增删主键功能。不过对在此开关开启前已经存在的表,且主键是整型类型时,即使之后开启此开关也不支持对此列表删除主键。
[解决方案]
ansible部署方式修改:
ansible部署方式修改:
cd tidb-ansible/
vi conf/tidb.yml
将 alter-primary-key: false 改为:alter-primary-key: true
注意:alter-primary-key: false
是默认值,该行是注释的,可以新增一行(注意开头要空2格,不可顶格):
alter-primary-key: true
然后执行:
ansible-playbook rolling_update.yml -t tidb
生效(会重启TiDB集群)
附:如果系统启用了SWAP,在执行上述ansible脚本时会报错中断,需要禁用SWAP或禁止ansible脚本对SWAP分区的检测:
vi roles/check_system_dynamic/tasks/main.yml,将以下行注释掉:
- name: Preflight check - Check swap
fail:
msg: "Swap
is on, for best performance, turn swap off"
when: ansible_swaptotal_mb != 0
即:
然后重新执行:
ansible-playbook rolling_update.yml -t tidb