mycat mysql自增主键_Mycat之——设置全局自增id

在《Mycat之——实现MySQL的水平分表》一文中,我们将商城数据库的订单数据库中的order_master数据表,根据customer_id字段进行了水平切分,当我们通过Mycat向order_master数据表中插入数据后,再通过Mycat查询order_master数据表中的数据时,发现通过Mycat查询出来的数据中,order_id字段有很多重复的值。这是由于在orderdb01orderdb04数据库中的order_master数据表的主键order_id都是设置为整型的自增类型,也就是说在orderdb01orderdb04数据库中的order_master数据表的主键都是从1开始自增,这就导致了通过Mycat查询order_master数据表的数据时,出现大量重复的主键值。

那么,如何解决上述问题呢?

Mycat中提供了全局自增id的功能,可以解决这个问题!

如何进行操作呢

此时,我们在Mycat所在的binghe151服务器上,安装MySQL数据库。

安装之后,登录MySQL命令行,如下所示。

[root@binghe151 ~]# mysql -uroot -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 33926

Server version: 8.0.18 binghe edition

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

注意:这里登录的是MySQL命令行,而不是Mycat命令行。接下来,在MySQL命令行新建一个mycat数据库,如下所示。

mysql> create database mycat;

Query OK, 1 row affected (2.52 sec)

注意:其实这个mycat数据库建立在binghe152~binghe158服务器上的任意一个MySQL实例上都可以,这里,我为了将mycat数据库与商城的业务数据库分开,就单独在binghe151服务器上再次安装一个MySQL来创建mycat数据库。

接下来,我们需要在mycat数据库中初始化数据表和一些数据值,需要的数据表和数据值可以通过运行Mycat安装目录下的conf目录下的dbseq.sql脚本来进行初始化。接下来,我们将dbseq.sql脚本导入到mycat数据库中,如下所示。

[root@binghe151 ~]# mysql -uroot -p mycat < /usr/local/mycat/conf/dbseq.sql

Enter password:

导入完成后,我们在MySQL命令行查看下mycat下的数据表,如下所示。

mysql> use mycat;

Database changed

mysql> show tables;

+-----------------+

| Tables_in_mycat |

+-----------------+

| mycat_sequence |

+-----------------+

1 row in set (0.98 sec)

mysql> select * from mycat_sequence;

+--------+---------------+-----------+

| name | current_value | increment |

+--------+---------------+-----------+

| GLOBAL | 1 | 1 |

+--------+---------------+-----------+

1 row in set (0.03 sec)

查看mycat数据库中存在的函数,如下所示。

mysql> show function status like 'mycat%' \G

*************************** 1. row ***************************

Db: mycat

Name: mycat_seq_currval

Type: FUNCTION

Definer: root@localhost

Modified: 2020-03-01 22:06:11

Created: 2020-03-01 22:06:11

Security_type: DEFINER

Comment:

character_set_client: utf8mb4

collation_connection: utf8mb4_general_ci

Database Collation: utf8mb4_0900_ai_ci

*************************** 2. row ***************************

Db: mycat

Name: mycat_seq_nextval

Type: FUNCTION

Definer: root@localhost

Modified: 2020-03-01 22:06:11

Created: 2020-03-01 22:06:11

Security_type: DEFINER

Comment:

character_set_client: utf8mb4

collation_connection: utf8mb4_general_ci

Database Collation: utf8mb4_0900_ai_ci

*************************** 3. row ***************************

Db: mycat

Name: mycat_seq_nextvals

Type: FUNCTION

Definer: root@localhost

Modified: 2020-03-01 22:06:12

Created: 2020-03-01 22:06:12

Security_type: DEFINER

Comment:

character_set_client: utf8mb4

collation_connection: utf8mb4_general_ci

Database Collation: utf8mb4_0900_ai_ci

*************************** 4. row ***************************

Db: mycat

Name: mycat_seq_setval

Type: FUNCTION

Definer: root@localhost

Modified: 2020-03-01 22:06:12

Created: 2020-03-01 22:06:12

Security_type: DEFINER

Comment:

character_set_client: utf8mb4

collation_connection: utf8mb4_general_ci

Database Collation: utf8mb4_0900_ai_ci

4 rows in set (0.00 sec)

接下来,我们还需要对server.xml文件进行相应的修改。这里,将server.xml文件中的system标签下的sequenceHandlerType的值修改为1,没有配置这个选项的话,就增加这个配置项,如下所示。

1

接下来,在schema.xml文件中新增一个dataHost节点,这个节点就是mycat数据库所在的服务器节点,如下所示。

writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

select user()

此时,需要在binghe151服务器的MySQL中创建mycat用户。

如果大家安装的是MySQL 8.x版本,则在MySQL命令行执行如下命令。

CREATE USER 'mycat'@'192.168.175.%' IDENTIFIED BY 'mycat';

ALTER USER 'mycat'@'192.168.175.%' IDENTIFIED WITH mysql_native_password BY 'mycat';

GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON *.* TO 'mycat'@'192.168.175.%';

FLUSH PRIVILEGES;

如果大家安装的是MySQL 5.x版本,则在MySQL命令行执行如下命令。

GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON *.* TO 'mycat'@'192.168.175.%' IDENTIFIED BY 'mycat';

FLUSH PRIVILEGES;

注意:在binghe151服务器上的MySQL数据库中增加的mycat用户除了需要具有对数据库的增删改查权限外,还需要具有执行函数的权限。

接下来,需要在schema.xml文件中新增一个数据节点,如下所示。

另外,我们还需要在Mycat安装目录下的conf目录中修改sequence_db_conf.properties文件,如下所示。

vim /usr/local/mycat/conf/sequence_db_conf.properties

修改后的equence_db_conf.properties文件中的内容如下所示。

GLOBAL=mycat

order_master=mycat

接下来,我们在binghe151服务器上登录MySQL命令行,向mycat数据库中的mycat_sequence数据表插入数据,如下所示。

mysql> use mycat;

Database changed

mysql> show tables;

+-----------------+

| Tables_in_mycat |

+-----------------+

| mycat_sequence |

+-----------------+

1 row in set (0.21 sec)

mysql> insert into mycat_sequence values ('order_master',1,1);

Query OK, 1 row affected (0.65 sec)

mysql> select * from mycat_sequence;

+--------------+---------------+-----------+

| name | current_value | increment |

+--------------+---------------+-----------+

| GLOBAL | 1 | 1 |

| order_master | 1 | 1 |

+--------------+---------------+-----------+

2 rows in set (0.00 sec)

此时,可以看到mycat_sequence数据表中多了一条名称为order_master的数据。

接下来就需要告诉Mycat如何使用全局自增id了。

如何使用全局自增id?

需要在schema.xml文件中进行配置,对order_master数据表开启全局自增id,需要在order_master表的配置中新增一个autoIncrement="true"的属性配置,如下所示。

接下来,重启Mycat,使配置生效。此时,使用Mycat向order_master数据表中插入数据后,再通过Mycat查询order_master数据表中的数据,发现order_id主键的值不再有重复了。说明全局id配置生效。

1aee9c2fd0ae6d394d1860f73c6b8d05.png

d65c8f8eb3a033c61178a898e6617dec.png

冰 河

博客专家

发布了1322 篇原创文章 · 获赞 2046 · 访问量 518万+

他的留言板

关注

标签:自增,mycat,数据表,master,MySQL,id,Mycat,order

来源: https://blog.csdn.net/l1028386804/article/details/104602420

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值