生活随笔
收集整理的這篇文章主要介紹了
MySQL分库分表 mycat
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Top
NSD DBA2 DAY06
案例1:搭建mycat 分片服務器 1 案例1:搭建mycat 分片服務器
1.1 問題
- 數據庫主機 192.168.4.55 使用db1庫存儲數據
- 數據庫主機 192.168.4.56 使用db2庫存儲數據
- 主機 192.168.4.54 運行mycat服務,邏輯庫名稱為test,連接用戶名為admin,密碼123456
- 在主機 192.168.4.254 訪問測試配置
1.2 方案
準備四臺主機,搭建mycat分片服務器,通過某種特定條件,將存放在一個數據庫(主機)中的數據,分散存放到多個數據庫(主機)中,已達到分散單臺設備負載的效果。其中192.168.4.56作為mycat服務器,192.168.4.54和192.168.4.55作為數據庫服務器,192.168.4.254作為客戶端。如圖-1所示:
圖-1
?
數據分片的拓撲如圖-2所示:
圖-2
1.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:公共配置
1)關閉防火墻和selinux,配置yum源(系統源),這里不再操作
2)把54,55還原成獨立數據庫服務器,且只保留默認4個庫其他都刪除,停止56主機的mha管理服務,下載mycat 軟件到56主機
3)在54(主機c2)和55(主機c1)上面創建db1和db2庫
[root@c1 ~]# mysql -u root -p123456????mysql> create database db1;????????Query OK, 1 row affected (0.00 sec) [root@c2 ~]# mysql -u root -p123456mysql> create database db2;????????Query OK, 1 row affected (0.00 sec) 在54上面授權一個用戶
mysql> grant all on *.* to admin@"%" identified by "123456";Query OK, 0 rows affected, 1 warning (0.00 sec) 在55上面授權一個用戶
mysql> grant all on *.* to admin@"%" identified by "123456";Query OK, 0 rows affected, 1 warning (0.00 sec) 4)修改數據庫的配置文件
注意:1代表不區分表名的大小寫,0為區分大小寫
主機c1上面:
[root@c1 ~]# vim /etc/my.cnf[mysqld]lower_case_table_names=1????????[root@c1 ~]# systemctl restart mysqld 主機c2上面:
[root@c2 ~]# vim /etc/my.cnf[mysqld]lower_case_table_names=1[root@c2 ~]# systemctl restart mysqld 5)在56主機上面安裝JDK
[root@mycat ~]# rpm -qa | grep -i jdk????????java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64copy-jdk-configs-2.2-3.el7.noarch[root@mycat ~]# yum -y install java-1.8.0-openjdk 6)在56主機上面安裝mycat
[root@mycat ~]# cd mysql/[root@mycat mysql]# tar -xf Mycat-server-1.4-beta-20150604171601-linux.tar.gz????[root@mycat mysql]# mv mycat/ /usr/local/[root@mycat mysql]# ls /usr/local/mycat/bin catlet conf lib logs version.txt[root@mycat mysql]# cd /usr/local/mycat/[root@mycat mycat]# ./bin/mycat --helpUsage: ./bin/mycat { console | start | stop | restart | status | dump } 7)修改配置文件
目錄結構說明:
bin mycat命令,如 啟動 停止 等
catlet 擴展功能
conf 配置文件
lib mycat使用的jar
log mycat啟動日志和運行日志
wrapper.log mycat服務啟動日志
mycat.log 記錄SQL腳本執行后的報錯內容
重要配置文件說明:
server.xml 設置連mycat的賬號信息
schema.xml 配置mycat的真實庫表
rule.xml 定義mycat分片規則
配置標簽說明
<user>.. ..</user> 定義連mycat用戶信息
<datanode>.. ..</datanode> 指定數據節點
<datahost>.. ..</datahost> 指定數據庫地址及用戶信息
查看server.xml配置文件
[root@mycat mycat]# cd conf/[root@mycat conf]# vim server.xml</system><user name="test">????????<property name="password">test</property>????????<property name="schemas">TESTDB</property>????</user> <user name="user"><property name="password">user</property><property name="schemas">TESTDB</property><property name="readOnly">true</property>????????</user> 修改schema.xml配置文件
[root@mycat conf]# vim schema.xml<table name="travelrecord" dataNode="dn1,dn2" rule="auto-sharding-long" /><table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2" /><table name="hotnews" primaryKey="ID" dataNode="dn1,dn2" rule="mod-long" /><dataNode name="dn1" dataHost="c1" database="db1" /><dataNode name="dn2" dataHost="c2" database="db2" /> 指定c1名稱主機對應的ip地址<dataHost name="c1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="c1" url="192.168.4.55:3306" user="admin"????????password="123456"><!-- can have multi read hosts --> </writeHost></dataHost> 指定c2名稱主機對應的ip地址<dataHost name="c2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="c2" url="192.168.4.54:3306" user="admin"????????password="123456"><!-- can have multi read hosts --> </writeHost></dataHost> 8)添加PATH路徑
[root@mycat conf]# export PATH=/usr/local/mycat/bin:$PATH[root@mycat conf]# echo "PATH=/usr/local/mycat/bin:$PATH" >> /etc/profile[root@mycat conf]# source /etc/profile[root@mycat conf]# echo $PATH/usr/local/mycat/bin:/usr/local/mycat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@mycat conf]# which mycat/usr/local/mycat/bin/mycat 9)啟動服務并查看端口
[root@mycat conf]# mycat startStarting Mycat-server...[root@mycat conf]# netstat -antup | grep :8066tcp6 0 0 :::8066 :::* LISTEN 6421/java[root@mycat conf]# ps -C javaPID TTY TIME CMD6421 ? 00:00:04 java 用admin用戶登錄
[root@client ~]# mysql -h192.168.4.54 -uadmin -p123456mysql> show processlist;+----+-------+--------------------+------+---------+------+----------+------------------+| Id | User | Host | db | Command | Time | State | Info |+----+-------+--------------------+------+---------+------+----------+------------------+| 3 | admin | 192.168.4.56:34580 | db2 | Sleep | 80 | | NULL || 4 | admin | 192.168.4.56:34570 | db2 | Sleep | 100 | | NULL || 5 | admin | 192.168.4.56:34572 | db2 | Sleep | 40 | | NULL || 6 | admin | 192.168.4.56:34562 | db2 | Sleep | 30 | | NULL || 7 | admin | 192.168.4.56:34564 | db2 | Sleep | 90 | | NULL || 8 | admin | 192.168.4.56:34566 | db2 | Sleep | 60 | | NULL || 9 | admin | 192.168.4.56:34574 | db2 | Sleep | 70 | | NULL || 10 | admin | 192.168.4.56:34576 | db2 | Sleep | 10 | | NULL || 11 | admin | 192.168.4.56:34578 | db2 | Sleep | 20 | | NULL || 12 | admin | 192.168.4.56:34568 | db2 | Sleep | 50 | | NULL || 14 | admin | 192.168.4.51:58354 | NULL | Query | 0 | starting | show processlist |+----+-------+--------------------+------+---------+------+----------+------------------+11 rows in set (0.00 sec) [root@client ~]# mysql -h192.168.4.55 -uadmin -p123456mysql> show processlist;+----+-------+--------------------+------+---------+------+----------+------------------+| Id | User | Host | db | Command | Time | State | Info |+----+-------+--------------------+------+---------+------+----------+------------------+| 3 | root | localhost | NULL | Sleep | 2352 | | NULL || 4 | admin | 192.168.4.56:45148 | db1 | Sleep | 2 | | NULL || 5 | admin | 192.168.4.56:45150 | db1 | Sleep | 62 | | NULL || 6 | admin | 192.168.4.56:45160 | db1 | Sleep | 12 | | NULL || 7 | admin | 192.168.4.56:45162 | db1 | Sleep | 92 | | NULL || 8 | admin | 192.168.4.56:45152 | db1 | Sleep | 32 | | NULL || 9 | admin | 192.168.4.56:45154 | db1 | Sleep | 42 | | NULL || 10 | admin | 192.168.4.56:45156 | db1 | Sleep | 22 | | NULL || 11 | admin | 192.168.4.56:45158 | db1 | Sleep | 82 | | NULL || 12 | admin | 192.168.4.56:45164 | db1 | Sleep | 52 | | NULL || 13 | admin | 192.168.4.56:45166 | db1 | Sleep | 72 | | NULL || 14 | admin | 192.168.4.51:32796 | NULL | Query | 0 | starting | show processlist |+----+-------+--------------------+------+---------+------+----------+------------------+12 rows in set (0.00 sec) [root@mycat conf]# ls /usr/local/mycat/logs/mycat.log mycat.pid wrapper.log????????[root@mycat conf]# ldconfig -v???????? 10)客戶端訪問
命令: mysql -hmycat主機的IP -P端口號 -u用戶 -p密碼
[root@clent ~]# mysql -h192.168.4.56 -P8066 -utest -ptestmysql> show databases;+----------+| DATABASE |+----------+| TESTDB |+----------+1 row in set (0.00 sec) mysql> USE TESTDB;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A Database changedmysql> mysql> show tables;+------------------+| Tables in TESTDB |+------------------+| company || customer || customer_addr || employee || goods || hotnews || orders || order_items || travelrecord |+------------------+9 rows in set (0.00 sec) 11)客戶端測試:
mysql> create table employee(id int not null primary key,name varchar(100),sharding_id int not null);Query OK, 0 rows affected (0.10 sec) mysql> insert into employee(id,name,sharding_id) values(1,"bob",10000);Query OK, 1 row affected (0.03 sec) mysql> insert into employee(id,name,sharding_id) values(1,"lucy",10010);Query OK, 1 row affected (0.02 sec) mysql> select * from employee;+----+------+-------------+| id | name | sharding_id |+----+------+-------------+| 1 | bob | 10000 || 1 | lucy | 10010 |+----+------+-------------+2 rows in set (0.06 sec) 12)在c1上面查看結果
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || db1 || mysql || performance_schema || sys |+--------------------+5 rows in set (0.00 sec) mysql> use db1;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A Database changedmysql> show tables;+---------------+| Tables_in_db1 |+---------------+| employee |+---------------+1 row in set (0.00 sec) mysql> select * from employee;????????+----+------+-------------+| id | name | sharding_id |+----+------+-------------+| 1 | bob | 10000 |+----+------+-------------+1 row in set (0.00 sec) 13)在c2上面查看結果
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || db2 || mysql || performance_schema || sys |+--------------------+5 rows in set (0.00 sec) mysql> use db2;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A Database changedmysql> show tables;+---------------+| Tables_in_db2 |+---------------+| employee |+---------------+1 row in set (0.00 sec) mysql> select * from employee;+----+------+-------------+| id | name | sharding_id |+----+------+-------------+| 1 | lucy | 10010 |+----+------+-------------+1 row in set (0.00 sec)
轉載于:https://www.cnblogs.com/tiki/p/10785278.html
總結
以上是生活随笔為你收集整理的MySQL分库分表 mycat的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。