MySQL PXC集群如何导入无主键表

2018年12月6日 2954点热度 0人点赞 0条评论

新建的一个2节点PXC MySQL集群在导入数据时出现报错:
ERROR 1105 (HY000): Percona-XtraDB-Cluster prohibits use of DML command on a table (jeecmsv93.org_depart_funct_bak) without an explicit primary key with pxc_strict_mode = ENFORCING or MASTER

这是由于PXC每个表必须要有主键,如果没有主键,可能造成集群中每个节点的data page里的数据不一样。
默认的配置选项PXC Strict Mode设置为ENFORCING,如果验证失败拒绝操作并抛出错误。可以修改为PERMISSIVE,如果失败,记录警告并继续正常运行。
SET GLOBAL pxc_strict_mode=PERMISSIVE;
再次导入,数据导入成功,提示TRIGGER错误:
[root@internetdb1:/home/data]mysql -uinspur -ppasswd --default-character-set=UTF8 jeecmsv93 < jeecmsv93.sql mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1419 (HY000) at line 81716: You do not have the SUPER privilege (you *might* want to use the less safe log_bin_trust_function_creators variable)
查看数据文件81716行:
CREATE TRIGGER `triggerCommentInsert` AFTER INSERT ON `jc_comment` FOR EACH ROW update jc_site_attr set attr_value=attr_value+1 where attr_name="commentTotal" and site_id=new.site_id;
是权限问题,不改权限的话,修改参数选项:
SET GLOBAL log_bin_trust_function_creators = 1;
手动执行以上create trigger,成功:
CREATE TRIGGER `triggerCommentInsert` AFTER INSERT ON `jc_comment` FOR EACH ROW update jc_site_attr set attr_value=attr_value+1 where attr_name="commentTotal" and site_id=new.site_id;
Query OK, 0 rows affected (0.01 sec)

-------
以下附pxc_strict_mode的详细说明。
PXC Strict Mode
PXC严格模式旨在避免在Percona XtraDB群集中使用实验性和不支持的功能,它在启动时和运行时执行多个验证。
根据您选择的实际模式,在遇到验证失败时,服务器将抛出错误(暂停启动或拒绝操作),或记录警告并继续正常运行:
• DISABLED:不要执行严格的模式验证和正常运行。
• PERMISSIVE:如果失败,记录警告并继续正常运行。
• ENFORCING:如果在启动期间验证失败,请暂停服务器并抛出错误。如果验证失败运行时,拒绝操作并抛出错误。
• MASTER:与ENFORCING相同,但不执行显式表锁定的验证。这个模式可以与其中写操作被隔离到单个节点的集群一起使用。
默认情况下,PXC Strict Mode设置为pxc_strict_mode = ENFORCING ,除非节点充当独立服务器或节点 bootstrapping,则PXC Strict Mode默认为DISABLED。
建议保持PXC严格模式设置为ENFORCING,因为在这种情况下每当Percona XtraDB群集遇到实验功能或不支持的操作,服务器将拒绝它。这将迫使你重新评估Percona XtraDB群集配置,而不会危及数据的一致性。
如果您计划将PXC严格模式设置为除ENFORCING以外的任何内容,则应注意这些限制以及这可能对数据完整性的影响。
要设置模式,请在mysqld启动期间在配置文件中使用 pxc_strict_mode 变量或使用 --pxc-strict-mode 选项。
最好使用必要的模式启动服务器(强烈建议使用默认的ENFORCING)。但是,您可以在运行时动态更改它。
mysql> SET pxc_strict_mode=PERMISSIVE;
为了进一步确保数据一致性,重要的是使集群中的所有节点运行相同配置,包括pxc_strict_mode

liking

这个人很懒,什么都没留下

文章评论