「に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テイク効果。