背景: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看逻辑数据库:
逻辑数据库,查询grade和student两张表,已经数据聚合,还可以进行排序;
如果我们需要将2张表进行关联,也是可以的:
/!mycat:catlet=io.mycat.catlets.ShareJoin /select * from student s,grade g on s.grade=g.id where g.name='一年级';