Mycat - セットグローバルインクリメントID

「にMycat -サブテーブルのMySQLのレベルの実現」の記事で、我々はorder_masterデータテーブルにおけるデータベースストアデータベースを注文し、セグメンテーションのレベルは、CUSTOMER_IDフィールドに基づいていたときに我々 Mycatによってorder_masterデータテーブルにデータを挿入テーブル内のデータによるMycat order_masterたときにクエリデータ、それはMycatクエリデータにより判明した、多くのフィールドが重複する値をORDER_IDがあります。これはorderdb01に起因するorderdb04データベース主キーORDER_IDのorder_masterデータテーブルは、タイプ、orderdb01ことを意味する整数自動インクリメントに設定され、そのデータベース内の主キーテーブルorderdb04のorder_masterデータが1から最初から増加しますMycatクエリデータorder_masterデータテーブル、重複する主キー値の数が多いを通じてつながりました。

だから、どのように問題を解決するには?

Mycatは、グローバル自動インクリメントID機能を提供し、この問題を解決することができます!

それがどのように動作します

この時点で、我々binghe151サーバーが常駐Mycat、MySQLデータベースをインストールします。

あなたがMySQLの8.xのバージョンをインストールする必要がある場合は、「を参照することができます-ソースコンパイラMySQL8.x +アップグレードのgcc +アップグレードcmakeの(フルプロテストバージョン)のMySQL

あなたがMySQLの5.xのバージョンをインストールする必要がある場合は、「参照することができ--CentOS6.5コンパイルのMySQL 5.7またはインストールMySQL5.6

以下に示すように、インストール後は、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コマンドラインです。次に、新しいコマンドラインmycatのMySQLデータベースは、下図のように。

mysql> create database mycat;
Query OK, 1 row affected (2.52 sec)

注:、実際には1つのMySQLインスタンス缶にbinghe152〜binghe158サーバー上に構築されたmycatデータベースのいずれか、ここでは、私のための別々のmycatデータベースとストア事業のデータベースに、mycatデータベースを作成するために、binghe151サーバー上で再び別のMySQLをインストールします。

次に、我々はmycatデータベースの初期化データテーブルといくつかのデータ値に、必要なデータテーブルとデータ値がMycatを実行して、ディレクトリの下dbseq.sqlスクリプトconfディレクトリにインストール初期化することができる必要があります。以下に示すように次に、私たちは、mycatデータベースにスクリプトをdbseq.sqlます。

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

以下に示すように導入が完了した後、我々はmyCat、MySQLのコマンドの下でデータテーブルの行を参照します。

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ファイルシステムの下値sequenceHandlerTypeは、このオプションが設定されていない場合、以下に示すように、設定項目が増加し、タグ1を変更します。

<property name="sequenceHandlerType">1</property>

次に、schema.xmlファイルに以下に示すように、サーバノードmycatデータベース常駐あるdataHostノードを追加します。

<dataHost name="binghe151" maxCon="1000" minCon="10" balance="1"
          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="binghe51" url="192.168.175.151:3306" user="mycat" password="mycat"/>
</dataHost>

この時点で、我々は、MySQL binghe151 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データベースは、外側のユーザーCRUD権限データベースを持つに関数を実行する権限を持っている必要性をmycatさらに増加し​​ました。

次に、我々は以下に示すように、ノードのschema.xmlデータファイルを追加する必要があります。

<dataNode name="mycat" dataHost="binghe151" database="mycat" />

また、我々はまた、ディレクトリの下のconfディレクトリを必要とする次のようにMycat修正sequence_db_conf.propertiesファイルをマウント。

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

ファイルの内容を変更し、図のequence_db_conf.propertiesは、以下のようにしています。

GLOBAL=mycat
order_master=mycat

以下のように続いて、我々は、データベースmycat_sequenceのmycatデータテーブルにbinghe151のMySQLサーバのコマンドライン、挿入データにログインします。

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)

この時点で、あなたはより多くの名称order_masterデータよりもテーブルにmycat_sequenceデータを見ることができます。

そして、あなたはどのようにグローバルインクリメントIDを使用するMycatを指示する必要があります。

どのようにグローバルインクリメントIDを使用するには?

schema.xmlファイルのニーズが設定されるように、グローバルデータテーブルorder_masterインクリメントIDの開口部は、オートインクリメントの必要性は、次のように構成された構成テーブルorder_master =「true」属性を追加します。

<table name="order_master" primaryKey="order_id" dataNode = "orderdb01,orderdb02,orderdb03,orderdb04" rule="order_master" autoIncrement="true"/>

次に、構成を検証し、Mycatを再起動します。この場合、データテーブル内のデータテーブルへのデータの挿入使用Mycatのorder_master後、次にMycatによってorder_masterクエリデータは、主キーはもはや繰り返されるORDER_IDが見つかりました。説明グローバルIDテイク効果。

リリース1322元の記事 ウォンの賞賛2046 ビュー518万+

おすすめ

転載: blog.csdn.net/l1028386804/article/details/104602420