mycat別々の読み取りおよびサブライブラリーサブテーブルを作成し、

背景:mysql5.7の複製からのショットを使用して、mycatは別々の読み込みに配置し、サブライブラリーサブテーブルを書きますと、

リソース展開:
システム:Centos7.2 IP:192.168.117.152(インストールのmysql -メイン)
システム:Centos7.2 IP:192.168.117.161(インストールのmysql -から)
システム:Centos7.2 IP:192.168.117.150(インストールJDK、mysqlの、mycat)

公式のソースRPMパッケージをダウンロードし
https://dev.mysql.com/downloads/repo/yum/

MySQLをインストールし、私はmysql8.0版ダウンロードするにはここにいる
のrpm -ivh mysql80-コミュニティリリース-を el7-3.noarch.rpm

リリースシリーズの選択
のyumをすべてrepolist | grepのmysqlの

关闭mysql8.0、开启mysql5.7
のyum-config設定マネージャ--disable-mysql80コミュニティ
のyum-config設定マネージャ--enable mysql5.7コミュニティ

MySQLサービスのインストールと起動
のMySQLコミュニティコミュニティ-Serverはyumを-yをインストールし
てmysqldを起動しsystemctl

デフォルトのログインパスワードmysql5.7 /var/log/mysqd.logに
パスワード制限の下で変更することができます最初のパスワード、非生産環境を変更するにはログイン
グローバルパスワードポリシー変更:グローバルvalidate_password_policy = 0に設定し、
その後、パスワードの長さを変更:グローバルvalidate_password_lengthを設定8 =;
'localhostの' @ ALTER USER 'ルート' 'picc1234' BY検出。

:MySQLの設定マスターは、ファイルの末尾な/etc/my.cnf以下の修正を追加し
、ライブラリからサーバ152-ID = ID番号のメインライブラリをしていないとして
、ログビン= mysqlのビン
ログスレーブ・アップデートからオープン真#1 =へジャーナル

サーバからの認証
のMySQL>グラントスレーブ複製ON   「123123」で識別される「myslave'@'192.168.2.%」に。

特権リフレッシュ
フラッシュの権限を、

マスター情報を入手

 

サーバからのコンフィギュレーションは、Vimな/etc/my.cnf
リレーリレー=両対数-bin-を
リレーログインデックス= bin.indexスレーブ・リレー
サーバID = //マスター12は、サーバIDからサーバーと同じではありません!

再起動してmysqlのサービスを
スレーブ上で実行:
mysqlの>変更マスタに
MASTER_HOST = '192.168.2.11'、MASTER_USER = 'myslave'、master_passwordは= '123123'、MASTER_LOG_FILEは= 'mysqlの-bin.000002'、MASTER_LOG_POS = 337;
スレーブ開始
MySQLを>スレーブを開始し、
スレーブ状態、IO / SQLスレッドがYESのある参照
の表示スレーブステータスの\ G;

MyCATは、MySQLのミドルウェアであるJavaであるので、あなたは、実験室環境でJavaをインストールする必要があり、関係者は上記のjdk1.7とを示唆しました。

公式サイトではmycatソースパッケージをダウンロードする:http://www.mycat.io/
ソースパケット抽出
-xzvfタールMycatサーバを-1.6.6.1-リリース-20181031195535-linux.tar.gz -Cは/ usr /ロカ/

次のように解凍が完了した後、ディレクトリは次のとおりです。

ディレクトリ 説明
ビン など、起動、再起動、停止するmycatコマンド
catlet Mycatの延長としてcatlet機能
confに Mycat構成情報、フォーカス
LIB Mycatは、JARパッケージを引用し、Mycatは、Java開発であります
ログ ログとログMycatの実行を開始含めて、ログファイルを

confディレクトリのMycat設定ファイルは、ここでいくつかの一般的に使用されるファイルです。

ファイル 説明
server.xmlを Mycatプロファイル、アカウント設定、パラメータなど
schema.xml Mycat対応する物理構成データベースとデータベーステーブル
rule.xml Mycatスライス(サブライブラリーサブテーブル)RULES
                < ユーザー= "test_mycat" >      接続されている#USERユーザーの構成]ノード、ユーザーのログイン名name、Mycatユーザー名
                 < プロパティ= "パスワード" > 123456 </ プロパティ>   Mycatに接続されている#のログインパスワード、パスワード
                 < プロパティ=「スキーマ」> TESTDB </ プロパティ>   DB1、DB2、設定#データベース名が、そこのschema.xmlれ、関連する構成、カンマで区切られた複数の、例えば、2つのデータベースを管理するために、ユーザが必要ですDB1は、DBS 

                <! - テーブルレベルの権限DML - > 
                <! -             
                <=権限は"偽に"チェック> 
                        <スキーマ名= "TESTDB」DML = "0110">
                                <テーブル名= "TB01" DML = "0000"> </ TABLE> 
                                <テーブル名= "TB02" DML = "1111"> </ TABLE> 
                        </スキーマ> 
                </権限>            
                 - > 
        </ ユーザー> 

        < ユーザー= "dev_mycat" > 
                < プロパティ= "パスワード" >ユーザー</ プロパティ> 
                < プロパティ= "スキーマ" > TESTDB </ プロパティ> 
                <プロパティ=「読み取り専用」><// プロパティ> 
        </ ユーザー>


ここでtest_mycatアカウントのパスワードを設定し、データベースTESTDBに対して、読み取りおよび書き込み権限がテーブルのために特別な権限を行っていない、123456です。

schema.xml
のschema.xmlは、すべての最初の最も重要な設定項目は、私のプロフィールを見ています。

<?XMLバージョン= "1.0" ?> 
<!DOCTYPEのmycat:スキーマSYSTEM "schema.dtd" > 
< mycat:スキーマのxmlns:mycat = "のhttp://io.mycat/" > 

        < スキーマ= "TESTDB" checkSQLschema = "false"をsqlMaxLimit = "100" > 
                < テーブル名前= "学生" のPrimaryKey = "ID" データノード= "DN1、DN2、DN3" ルール= "MOD-長い"  /> 
                < テーブル= "グレード" 主キー=」
        > 
        <! - <データノード名= "DN1 $ 0から743" dataHost = "localhost1"データベース= "$ 0から743のDB" 
                /> - > 
        < データノードの名前= "DN1" dataHost = "localhost1" データベース= "北京"  /> 
        < データノードの名前= "DN2" dataHost = "localhost1" データベース= "上海"  /> 
        < データノードの名前= "DN3" dataHost = "localhost1" データベース= "広州"  /> 
        <データノード= "DN4" dataHost = "localhost1" データベース= "基本的な"  /> 
        < dataHostの= "localhost1" maxCon = "1000" minCon = "10" バランス= "3" 
                          writeType = "0" のdbType = "MySQLの" dbDriver = "ネイティブ" SWITCHTYPE = "1"   slaveThreshold = "100" > 
                < ハートビート>を選択し、ユーザー()</ ハートビート> 
                <! - マルチ書き込みホスト持つことができます- > 
                < writeHostのホスト= "hostM1を"URL = "192.168.117.152:3306" ユーザー= "ルート"
                                   パスワード= "picc1234" > 
                        <! - マルチ読み取りホストを持つことができます- > 
                        < readHostのホストは= "HOSTS2" URL = "192.168.117.161:3306" ユーザーは= "ルート" パスワード= "picc1234"  /> 
                </ writeHost > 
                <! - <writeHostホスト= "hostM2" URL = "localhostを:3316"ユーザー= "ルート"パスワード= "123456" /> - > 
        </ dataHost > 
</ mycat:スキーマ>

 

スライスを実行する設定ファイルのこのセクション(すなわち、サブテーブル)

 

説明:
mycatのTESTDB論理ライブラリーでは、2人の学生、学年、学生テーブルはDN1、DN2、DN3 3つのデータ・ノードに対応する、各ノードのデータがマッピングされていることが分かる北京、上海、広州データベースインスタンス3、3ライブラリは、ルール・パターンに応じて、学生テーブルを有する(セグメンテーションルールテーブル、合計10種類)

設定ファイルのこのセクションは、分離を達成するために読み込まれ、マルチマスタおよびマルチから添加してもよいです

説明:URL:アドレスはMySQLへ接続され、ユーザー:ユーザーのログインデータ、パスワード:パスワードがあるが

別々の読み取りおよび書き込みテスト
ログmycatはmycatは、MySQL、必要性を接続する権限を持っていないがあるかもしれない、同じ、mycat 2つのポート、8066ポートが成功した場合、管理ポート9066は、すべてのテーブルが詰まって見て、mycatに接続されて接続されていMySQLを接続したいですその後、許可mycatメインライブラリーから
限り、選択した場合は、その後の読み取りを新たに挿入されたデータを参照し、分離効果を記述することはできません、マスタースレーブ同期機能をオフにしmycat上のデータにチェックデータを書き込みます。

サブライブラリーのサブテーブルのテストは
、実際のデータベースを作成するには
、北京、上海、広州、:我々は確かに4つのデータベースを作成する必要があり、まず第一を基本に、 そして対応するテーブルを生成します。見て、そして学生のグレードテーブルは、3つの異なるデータベースに分散保存され、別のデータベースに存在し、学生テーブル内のデータを得るように。

create database beijing;
use beijing;
create table student(
    id    int primary key,
    name   varchar(8) not null,
    grade  int  not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

create database shanghai;
use shanghai;
create table student(
    id    int primary key,
    name   varchar(8) not null,
    grade  int  not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

create database guangzhou;
use guangzhou;
create table student(
    id    int primary key,
    name   varchar(8) not null,
    grade  int  not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

create database basic;
use basic;
create table grade(
    id    int primary key,
    name   varchar(8) not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

连接mycat写入测试数据

insert into grade (id,name) values (1,'一年级');
insert into grade (id,name) values (2,'二年级');
insert into grade (id,name) values (3,'三年级');

insert into student (id,name,grade) values (1,'张三',2);
insert into student (id,name,grade) values (2,'李四',1);
insert into student (id,name,grade) values (3,'王五',3);
insert into student (id,name,grade) values (4,'',3);
insert into student (id,name,grade) values (5,'',2);
insert into student (id,name,grade) values (6,'',1);

 

我们插入了6条student记录,这时应该根据不同的取模结果,存在不同的实际数据库的student表中,所以我们切换到实际数据库,分别查看实际数据库里的数据:

Database changed
mysql> show tables;
+-------------------+
| Tables_in_beijing |
+-------------------+
| student           |
+-------------------+
1 row in set (0.00 sec)

mysql> select * from beijing.student;
+----+--------+-------+
| id | name   | grade |
+----+--------+-------+
|  3 | 王五   |     3 |
|  6 ||     1 |
+----+--------+-------+
2 rows in set (0.00 sec)

mysql> select * from shanghai.student;
+----+--------+-------+
| id | name   | grade |
+----+--------+-------+
|  1 | 张三   |     2 |
|  4 ||     3 |
+----+--------+-------+
2 rows in set (0.00 sec)

mysql> select * from guangzhou.student;
+----+--------+-------+
| id | name   | grade |
+----+--------+-------+
|  2 | 李四   |     1 |
|  5 ||     2 |
+----+--------+-------+
2 rows in set (0.01 sec)

mysql>

 

再回到mycat看逻辑数据库:
mysql主从复制+mycat读写分离和分库分表

逻辑数据库,查询grade和student两张表,已经数据聚合,还可以进行排序;
mysql主从复制+mycat读写分离和分库分表

如果我们需要将2张表进行关联,也是可以的:
/!mycat:catlet=io.mycat.catlets.ShareJoin /select * from student s,grade g on s.grade=g.id where g.name='一年级';
mysql主从复制+mycat读写分离和分库分表

おすすめ

転載: www.cnblogs.com/fighting-ljy/p/10955159.html