更新時間:2021-09-17 10:22:53 來源:動力節(jié)點 瀏覽2494次
在Mycat教程當(dāng)中,讀寫與分離也是重要的知識點,大家可要好好學(xué)習(xí)哦。
測試讀寫分離:
[root@anedbtest01 conf]# cat schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="testdb" checkSQLschema="true" sqlMaxLimit="100">
<table name="travelrecord" dataNode="dn1" autoIncrement="true" primaryKey="ID" />
<table name="t1" dataNode="dn1" autoIncrement="true" primaryKey="ID" />
</schema>
<dataNode name="dn1" dataHost="shard" database="db1" />
<dataHost name="shard" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="123">
<readHost host="hostS2" url="127.0.0.1:3307" user="root" password="123" />
</writeHost>
</dataHost>
</mycat:schema>
balance="0":讀請求僅發(fā)送到writeHost上(不開啟讀寫分離)。
balance="1":讀請求隨機分發(fā)到當(dāng)前writeHost對應(yīng)的readHost和standby的writeHost上。
balance="2":讀請求隨機分發(fā)到當(dāng)前dataHost內(nèi)所有的writeHost和readHost上。
balance="3":讀請求隨機分發(fā)到當(dāng)前writeHost對應(yīng)的readHost上。
mysql> show @@heartbeat;
+--------+-------+-----------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| NAME | TYPE | HOST | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME | STOP |
+--------+-------+-----------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| hostM1 | mysql | 127.0.0.1 | 3306 | 1 | 0 | idle | 0 | 1,1,1 | 2018-09-05 16:44:36 | false |
| hostS2 | mysql | 127.0.0.1 | 3307 | 1 | 0 | idle | 0 | 0,0,0 | 2018-09-05 16:44:36 | false |
+--------+-------+-----------+------+---------+-------+--------+---------+--------------+---------------------+-------+
2 rows in set (0.00 sec)
create table t1 (id bigint not null primary key,user_id varchar(100),date DATE, fee decimal);
我們在主庫:3306 插入數(shù)據(jù)
insert into t1(id,user_id,date,fee) values(2,@@hostname,20180901,100);
insert into t1(id,user_id,date,fee) values(5000002,@@hostname,20180905,100);
從庫3307插入數(shù)據(jù)
insert into t1(id,user_id,date,fee) values(3,@@port,20180901,100);
insert into t1(id,user_id,date,fee) values(5000003,@@port,20180905,100);
主庫查看數(shù)據(jù):
mysql> select * from t1;
+---------+-------------+------------+------+
| id | user_id | date | fee |
+---------+-------------+------------+------+
| 2 | anedbtest01 | 2018-09-01 | 100 |
| 5000002 | anedbtest01 | 2018-09-05 | 100 |
+---------+-------------+------------+------+
2 rows in set (0.00 sec)
從庫查看數(shù)據(jù):
mysql> select * from t1;
+---------+-------------+------------+------+
| id | user_id | date | fee |
+---------+-------------+------------+------+
| 2 | anedbtest01 | 2018-09-01 | 100 |
| 3 | 3307 | 2018-09-01 | 100 |
| 5000002 | anedbtest01 | 2018-09-05 | 100 |
| 5000003 | 3307 | 2018-09-05 | 100 |
+---------+-------------+------------+------+
4 rows in set (0.00 sec)
通過mycat查看數(shù)據(jù)可以發(fā)現(xiàn),查看的數(shù)據(jù)是從庫的數(shù)據(jù),實現(xiàn)了讀寫分離:
[root@anedbtest01 bin]# /mnt/mysql5641/bin/mysql -uroot -p123 -P8066 -h127.0.0.1
mysql> select * from t1;
+---------+-------------+------------+------+
| id | user_id | date | fee |
+---------+-------------+------------+------+
| 2 | anedbtest01 | 2018-09-01 | 100 |
| 3 | 3307 | 2018-09-01 | 100 |
| 5000002 | anedbtest01 | 2018-09-05 | 100 |
| 5000003 | 3307 | 2018-09-05 | 100 |
+---------+-------------+------------+------+
4 rows in set (0.00 sec)
修改 schema.xml 中balance="2" ,在mycat端查詢,可以看到有時候查詢會落到主庫,有時候查詢會落到在從庫
[root@anedbtest01 bin]# /mnt/mysql5641/bin/mysql -uroot -p123 -P8066 -h127.0.0.1
mysql> select * from t1;
+---------+-------------+------------+------+
| id | user_id | date | fee |
+---------+-------------+------------+------+
| 2 | anedbtest01 | 2018-09-01 | 100 |
| 3 | 3307 | 2018-09-01 | 100 |
| 5000002 | anedbtest01 | 2018-09-05 | 100 |
| 5000003 | 3307 | 2018-09-05 | 100 |
+---------+-------------+------------+------+
4 rows in set (0.00 sec)
mysql> select * from t1;
+---------+-------------+------------+------+
| id | user_id | date | fee |
+---------+-------------+------------+------+
| 2 | anedbtest01 | 2018-09-01 | 100 |
| 5000002 | anedbtest01 | 2018-09-05 | 100 |
+---------+-------------+------------+------+
2 rows in set (0.01 sec)
大家如果對Mycat感興趣,不妨關(guān)注一下動力節(jié)點Mycat視頻教程頁面,視頻可以免費下載,內(nèi)容細(xì)致全面,通俗易懂,適合初學(xué)者觀看學(xué)習(xí)。