日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DBA(五):数据分片、Mycat服务

發布時間:2025/3/21 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DBA(五):数据分片、Mycat服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據分片概述

分庫/分表

  • 什么是分庫分表?
  • 將存放在一臺數據庫服務器中的數據,按照特定的方式進行拆分,分散存儲到多臺數據庫服務器中,以達到分散單臺服務器負載的效果
水平分割
  • 橫向切分
  • 按照表中指定字段的分片規則,將表記錄按行切分,分散存儲到多個數據庫中
垂直分割
  • 縱向切分
  • 將單個數據庫的多個表按照業務類型分類,分散存儲到不同的數據庫

MyCAT介紹

  • 軟件介紹:
  • 開源軟件,是基于Java的分布式數據庫系統中間件,為高并發環境的分布式存儲提供解決方案
  • 適合數據大量寫入的存儲需求
  • 支持MySQL、Oracle、Sqlserver、MongoDB等
  • 提供數據讀寫分離服務
  • 基于阿里巴巴Cobar進行研發的開源軟件
  • 分片規則
  • mycat支持提供10種分片規則
  • 枚舉法-----------sharding-by-intfile
  • 固定分片--------rule 1
  • 范圍約定--------auto-sharding-long
  • 求模法------------mod-long
  • 日期列分區法—sharding-by-date
  • 通配取模----------sharding-by-pattern
  • ASCII碼求模通配----sharding-by-prefixpattern
  • 編程指定----------sharding-by-substring
  • 字符串拆分hash解析------sharding-by-stringhash
  • 一致性hash-------sharding-by-murmur
  • 工作過程
  • 當mycat收到一個SQL命令時
  • 解析SQL命令涉及到的表
  • 然后看對表的配置,如果有分片規則,則獲取SQL命令里的分片字段的值,并匹配分片函數,獲得分片列表
  • 然后將SQL命令往對應的數據庫去執行
  • 最后收集和處理所有的分片結果數據,并返回到客戶端
  • 部署MyCAT服務

    環境部署

    IP規劃

    拓撲結構

    服務部署

    步驟:
    1.安裝軟件JDK(系統自帶),安裝mycat服務軟件包軟件包在此提取碼:w4e7
    2. 配置數據分片
    3. 配置數據庫服務器
    4. 啟動Mycat服務

    1.在數據庫服務器53、54、55主機中分別創建用于分片式存儲的庫db1、db2、db3 [root@host53 ~]# mysql -uroot -p123456 mysql> create database db1; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)[root@host54 ~]# mysql -uroot -p123456 mysql> create database db2; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db2 | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)[root@host55 ~]# mysql -uroot -p123qqq...A mysql> create database db3; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db3 | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.01 sec)2.在host56主機安裝mycat軟件以及Java軟件[root@host56 ~]# yum -y install java-1.8.0-openjdk.x86_64 [root@host56 ~]# java -version ##顯示版本 openjdk version "1.8.0_161" OpenJDK Runtime Environment (build 1.8.0_161-b14) OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode) [root@host56 ~]# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz ##不需要安裝,解壓就可以使用 [root@host56 ~]# ls mycat Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz [root@host56 ~]# ls mycat/ bin catlet conf lib logs version.txt [root@host56 ~]# mv mycat/ /usr/local/ [root@host56 ~]# ls /usr/local/ bin etc games include lib lib64 libexec mycat sbin share src [root@host56 ~]# cd /usr/local/mycat/ [root@host56 mycat]# ls lib/*.jar Java的打包壓縮文件################################################################### 目錄結構 [root@host56 mycat]# ls bin ##mycat命令 catlet ##擴展功能 conf ##配置文件 lib ##mycat使用的jar包 logs ##mycat啟動日志和運行日志 version.txt wrapper.log ##mycat服務啟動日志,在服務啟動后自動生成 mycat.log ##記錄SQL腳本執行后的報錯內容,在服務啟動后自動生成 ################################################################### 配置文件說明 server.xml ##設置連接賬號及邏輯庫 schema.xml ##配置數據分片存儲的表 rule.xml ##分片規則 其他文件 ##分片規則配置文件 ###################################################################3.配置Mycat服務創建客戶端連接件使用的用戶 密碼 邏輯庫 權限 [root@host56 mycat]# vim /usr/local/mycat/conf/server.xml (使用默認配置即可) <user name="root"> //連接mycat服務時使用的用戶名<property name="password">123456</property> //用戶連接mycat用戶時使用的密碼<property name="schemas">TESTDB</property> //邏輯庫名 </user> <user name="user"><property name="password">user</property><property name="schemas">TESTDB</property><property name="readOnly">true</property> //只讀權限,連接mycat服務后只有讀記錄的權限,不寫這一行則是可讀可寫 </user> 定義數據分片存儲的表 --------------------------------------------------- 定義分片的表 <schema>......</schema> ##定義分片信息 <table>......</table> ##定義表 name ##邏輯庫或邏輯表名 dataNode ##指定數據節點 rule ##指定使用的分片規則 type=global ##數據不分片存儲定義數據節點 <dataNode 選項=值,....../> ##定義數據節點 name ##數據節點明 datahost ##數據庫服務器主機名 database ##數據庫名定義數據庫服務器IP地址及端口 <datahost 選項=值,......>...</datahost> ##服務器主機名 name ##主機名(與datahost對應的主機名) host ##主機名(與IP地址對應的主機名) url ##數據庫服務器IP地址及端口號 user ##數據庫服務器授權用戶 password ##授權用戶密碼 --------------------------------------------------- [root@mycat56 mycat]# wc -l schema.xml //刪除前查看總行數 77 /root/schema.xml [root@host56 mycat]# cp /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak #先做一次備份!!! [root@host56 mycat]# vim /usr/local/mycat/conf/schema.xml 為了看到更為清晰的配置文件,可以將注釋行刪掉,大批量的刪除后再進入到文件內逐行刪除注釋行<!-- -->,最后的配置文件大約為38行左右 [root@host56 mycat]# sed -i '56,77d' /usr/local/mycat/conf/schema.xml [root@host56 mycat]# sed -i '39,42d' /usr/local/mycat/conf/schema.xml [root@host56 mycat]# wc -l /usr/local/mycat/conf/schema.xml 38 /usr/local/mycat/conf/schema.xml[root@host56 mycat]# vim /usr/local/mycat/conf/schema.xml 1 <?xml version="1.0"?>2 <!DOCTYPE mycat:schema SYSTEM "schema.dtd">3 <mycat:schema xmlns:mycat="http://io.mycat/">4 5 <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">6 <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding- long" />7 8 <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2, dn3" />9 <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2,dn 3" />10 <table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="d n1,dn2,dn3"11 rule="mod-long" />12 <table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"13 rule="sharding-by-intfile" />14 <table name="customer" primaryKey="ID" dataNode="dn1,dn2,dn3"15 rule="sharding-by-intfile">16 <childTable name="orders" primaryKey="ID" joinKey="customer_id "17 parentKey="id">18 <childTable name="order_items" joinKey="order_id"19 parentKey="id" />20 </childTable>21 <childTable name="customer_addr" primaryKey="ID" joinKey="cust omer_id"22 parentKey="id" />23 </table>24 </schema>##定義數據庫主機名及存儲數據的庫25 <dataNode name="dn1" dataHost="mysql53" database="db1" />26 <dataNode name="dn2" dataHost="mysql54" database="db2" />27 <dataNode name="dn3" dataHost="mysql55" database="db3" />28 ##定義mysql53主機名對應的數據庫服務器IP地址 29 <dataHost name="mysql53" maxCon="1000" minCon="10" balance="0" 30 writeType="0" dbType="mysql" dbDriver="native" switchType="1 " slaveThreshold="100">31 <heartbeat>select user()</heartbeat>32 <writeHost host="hostM1" url="192.168.4.53:3306" user="tian" 33 password="123qqq...A"> 34 </writeHost> 35 </dataHost> 36 ##定義mysql54主機名對應的數據庫服務器IP地址 37 <dataHost name="mysql54" maxCon="1000" minCon="10" balance="0" 38 writeType="0" dbType="mysql" dbDriver="native" switchType="1 " slaveThreshold="100"> 39 <heartbeat>select user()</heartbeat> 40 <writeHost host="hostM2" url="192.168.4.54:3306" user="tian"41 password="123qqq...A">42 </writeHost> 43 </dataHost> 44 ##定義mysql55主機名對應的數據庫服務器IP地址 45 <dataHost name="mysql55" maxCon="1000" minCon="10" balance="0" 46 writeType="0" dbType="mysql" dbDriver="native" switchType="1 " slaveThreshold="100">47 <heartbeat>select user()</heartbeat>48 <writeHost host="hostM3" url="192.168.4.55:3306" user="tian"49 password="123qqq...A">50 </writeHost>51 </dataHost>52 </mycat:schema> 4.配置數據庫服務器 首先確認53、54、55主機是否有相對應的庫,授權給配置文件中的用戶登錄 53主機: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)mysql> grant all on *.* to tian@"%" identified by "123qqq...A"; ##添加授權用戶 Query OK, 0 rows affected, 1 warning (0.10 sec)54主機: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db2 | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)mysql> grant all on *.* to tian@"%" identified by "123qqq...A"; ##添加授權用戶 Query OK, 0 rows affected, 1 warning (0.00 sec)55主機: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db3 | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.01 sec)mysql> grant all on *.* to tian@"%" identified by "123qqq...A"; ##添加授權用戶 Query OK, 0 rows affected, 1 warning (0.00 sec)5.啟動Mycat服務測試數據庫的授權用戶(記得要關防火墻)[root@host50 ~]# mysql -h192.168.4.53 -utian -p123qqq...A [root@host50 ~]# mysql -h192.168.4.54 -utian -p123qqq...A [root@host50 ~]# mysql -h192.168.4.55 -utian -p123qqq...A啟動服務 [root@host56 mycat]# /usr/local/mycat/bin/mycat start Starting Mycat-server... [root@host56 mycat]# netstat -nutlp | grep 8066 ##查看端口 tcp6 0 0 :::8066 :::* LISTEN 1951/java [root@host56 mycat]# ps -C java ##查看進程PID TTY TIME CMD1951 ? 00:00:02 java [root@host56 mycat]# ls /usr/local/mycat/logs/ #此時查看,目錄下就有了錯誤日志等文件 mycat.log mycat.pid wrapper.log查看報錯動態輸出: [root@host56 mycat]# tail -f /usr/local/mycat/logs/wrapper.log6.客戶端訪問分片服務器56 [root@host50 ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456 #用server.xml中定義的用戶名密碼登錄 MySQL [(none)]> show databases; #查看庫,顯示的是配置文件中設定的虛假的庫 +----------+ | DATABASE | +----------+ | TESTDB | +----------+ 1 row in set (0.00 sec) MySQL [(none)]> use TESTDB; MySQL [TESTDB]> show tables; #查看表,這些表也是在schema.xml中定義的表 +------------------+ | Tables in TESTDB | +------------------+ | company | | customer | | customer_addr | | employee | | goods | | hotnews | | orders | | order_items | | travelrecord | +------------------+ 9 rows in set (0.00 sec)MySQL [TESTDB]> desc company; #查看表結構,此時會報錯,因為是分片式服務器中的虛擬表,所以會報出db1、 db2、 db3表中沒有這個表 ERROR 1146 (42S02): Table 'db3.company' doesn't exist MySQL [TESTDB]> desc company; ERROR 1146 (42S02): Table 'db2.company' doesn't exist MySQL [TESTDB]> desc company; ERROR 1146 (42S02): Table 'db1.company' doesn't exist ==================================================================== 如果啟動服務后查不到端口號,可以進行如下操作 [root@host56 ~]# cd /usr/local/mycat/logs/ [root@host56 logs]# ls 2020-02 mycat.log mycat.pid wrapper.log [root@host56 logs]# rm -rf mycat.pid [root@host56 logs]# /usr/local/mycat/bin/mycat start Starting Mycat-server... ===================================================================

    分片規則

    • 枚舉法(sharding-by-intfile)
    • 字段值必須在規則文件定義的值里選擇
    1. 查看表使用的分片規則 [root@host56 mycat]# vim /usr/local/mycat/conf/schema.xml<table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"rule="sharding-by-intfile" /> <table name="customer" primaryKey="ID" dataNode="dn1,dn2,dn3"rule="sharding-by-intfile"> 2. 查看分片規則使用的函數 [root@host56 mycat]# vim /usr/local/mycat/conf/rule.xml<tableRule name="sharding-by-intfile"> #分片規則<rule><columns>sharding_id</columns> #分片字段名<algorithm>hash-int</algorithm> #算法,函數名</rule></tableRule> 3. 查看函數確定分片字段名稱<function name="hash-int"class="io.mycat.route.function.PartitionByFileMap"> #函數調用的配置文件,在lib里,不要動!!!!!<property name="mapFile">partition-hash-int.txt</property> #分片字段值列表配置文件</function>定義分片字段值列表 :[root@host56 conf]# vim /usr/local/mycat/conf/partition-hash-int.txt 10000=0 #0代表schema.xml中第一臺數據庫服務器 對應dn1 10010=1 #1代表schema.xml中第二胎數據庫服務器 對應dn2 10020=2 #2代表schema.xml中第三臺數據庫服務器 對應dn3 [root@host56 conf]# /usr/local/mycat/bin/mycat restart #重啟 Stopping Mycat-server... Stopped Mycat-server. Starting Mycat-server... [root@host56 conf]# ss -nutlp | grep 8066 #可以再次查看到端口則說明重啟成功 tcp LISTEN 0 100 :::8066 :::* users:(("java",pid=2236,fd=78))4.建表(表的字段由第1 2 3步決定)[root@host50 ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456 ##客戶端訪問服務 MySQL [(none)]> use TESTDB; #進到TESTDB庫 MySQL [TESTDB]> create table employee( #創建表結構-> ID int primary key auto_increment ,-> sharding_id int ,-> name char(10) ,-> addree varchar(50) ,-> mail varchar(50)-> ); Query OK, 0 rows affected (0.13 sec)MySQL [TESTDB]> desc employee; ##查看表結構 +-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | NULL | auto_increment | | sharding_id | int(11) | YES | | NULL | | | name | char(10) | YES | | NULL | | | addree | varchar(50) | YES | | NULL | | | mail | varchar(50) | YES | | NULL | | +-------------+-------------+------+-----+---------+----------------+ 5 rows in set (0.03 sec)5.插入記錄插入數據:MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10030 ,"bob","usa" ,"bob@111.com"); ERROR 1064 (HY000): can't find any valid datanode :EMPLOYEE -> SHARDING_ID -> 10030 #sharding_id不能找到有效的數據節點,只能存放在partition-hash-int.txt里面的數據節點MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10000 ,"bob","usa" ,"bob@111.com"); ##存儲在53服務器的db1庫里的employee表里 Query OK, 1 row affected (0.03 sec)MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10000 ,"aaa","usa" ,"bob@111.com"); Query OK, 1 row affected (0.01 sec)MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10000 ,"bbb","usa" ,"bob@111.com"); Query OK, 1 row affected (0.01 sec)MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10010 ,"sss","usa" ,"bob@111.com"); ##存儲在54服務器的db2庫里的employee表里 Query OK, 1 row affected (0.01 sec)MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10010 ,"ddd","usa" ,"bob@111.com"); Query OK, 1 row affected (0.01 sec)MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10010 ,"fff","usa" ,"bob@111.com"); Query OK, 1 row affected (0.01 sec)MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10010 ,"ggg","usa" ,"bob@111.com"); Query OK, 1 row affected (0.01 sec)MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10020 ,"qqq","usa" ,"bob@111.com"); ##存儲在55服務器的db3庫里的employee表里 Query OK, 1 row affected (0.05 sec)MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10020 ,"www","usa" ,"bob@111.com"); Query OK, 1 row affected (0.01 sec)MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10020 ,"eee","usa" ,"bob@111.com"); Query OK, 1 row affected (0.00 sec)MySQL [TESTDB]> insert into employee(sharding_id ,name ,addree ,mail) values(10020 ,"rrr","usa" ,"bob@111.com"); Query OK, 1 row affected (0.01 sec)6.在數據庫服務器53/54/55主機查看數據是否成功分片存儲到各個主機[root@host53 ~]# mysql -uroot -p123456mysql> select * from db1.employee; +----+-------------+------+--------+-------------+ | ID | sharding_id | name | addree | mail | +----+-------------+------+--------+-------------+ | 1 | 10000 | bob | usa | bob@111.com | | 2 | 10000 | aaa | usa | bob@111.com | | 3 | 10000 | bbb | usa | bob@111.com | +----+-------------+------+--------+-------------+ 3 rows in set (0.00 sec)mysql> select * from db2.employee; +----+-------------+------+--------+-------------+ | ID | sharding_id | name | addree | mail | +----+-------------+------+--------+-------------+ | 1 | 10010 | sss | usa | bob@111.com | | 2 | 10010 | ddd | usa | bob@111.com | | 3 | 10010 | fff | usa | bob@111.com | | 4 | 10010 | ggg | usa | bob@111.com | +----+-------------+------+--------+-------------+ 4 rows in set (0.00 sec)[root@host55 ~]# mysql -uroot -p123qqq...A mysql> select * from db3.employee; +----+-------------+------+--------+-------------+ | ID | sharding_id | name | addree | mail | +----+-------------+------+--------+-------------+ | 1 | 10020 | qqq | usa | bob@111.com | | 2 | 10020 | www | usa | bob@111.com | | 3 | 10020 | eee | usa | bob@111.com | | 4 | 10020 | rrr | usa | bob@111.com | +----+-------------+------+--------+-------------+ 4 rows in set (0.00 sec)MySQL [TESTDB]> select * from employee; +----+-------------+------+--------+-------------+ | ID | sharding_id | name | addree | mail | +----+-------------+------+--------+-------------+ | 1 | 10000 | bob | usa | bob@111.com | | 2 | 10000 | aaa | usa | bob@111.com | | 3 | 10000 | bbb | usa | bob@111.com | | 1 | 10020 | qqq | usa | bob@111.com | | 2 | 10020 | www | usa | bob@111.com | | 3 | 10020 | eee | usa | bob@111.com | | 4 | 10020 | rrr | usa | bob@111.com | | 1 | 10010 | sss | usa | bob@111.com | | 2 | 10010 | ddd | usa | bob@111.com | | 3 | 10010 | fff | usa | bob@111.com | | 4 | 10010 | ggg | usa | bob@111.com | +----+-------------+------+--------+-------------+ 11 rows in set (0.11 sec)
    • 求模法
    • 根據字段值與設定的數字求模結果存儲數據
    1.查看配置文件使用求模法規則的表名 [root@host56 logs]# vim /usr/local/mycat/conf/schema.xml<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"rule="mod-long" />2.查看表的分片字段名及使用的函數配置 [root@host56 logs]# vim /usr/local/mycat/conf/rule.xml <tableRule name="mod-long"><rule><columns>x</columns> #求模字段名,可自定義<algorithm>mod-long</algorithm> #算法</rule></tableRule><function name="mod-long" class="io.mycat.route.function.PartitionByMod"><!-- how many data nodes --><property name="count">3</property> #字段與之求模的數字</function>3.重啟mycat服務 [root@host56 logs]# /usr/local/mycat/bin/mycat stop Stopping Mycat-server... Mycat-server was not running. [root@host56 logs]# /usr/local/mycat/bin/mycat start Starting Mycat-server... [root@host56 logs]# /usr/local/mycat/bin/mycat status Mycat-server is running (1846).4.客戶端連接mycat服務建表存儲數據 [root@host50 ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456 MySQL [(none)]> show databases; +----------+ | DATABASE | +----------+ | TESTDB | +----------+ 1 row in set (0.01 sec) MySQL [(none)]> use TESTDB;MySQL [TESTDB]> show tables; +------------------+ | Tables in TESTDB | +------------------+ | company | | customer | | customer_addr | | employee | | goods | | hotnews | | orders | | order_items | | travelrecord | +------------------+ 9 rows in set (0.00 sec)MySQL [(none)]> create table TESTDB.hotnews; #在客戶端不能用庫名.表名創建,因為分片式服務器最終是寫到相對應的數據庫服務器上的,而數據庫服務器中并沒有TESTDB這個虛擬庫,我們需要進到虛擬庫中創建寫入數據 ERROR 3000 (HY000): No MyCAT Database selectedMySQL [(none)]> use TESTDB; MySQL [TESTDB]> create table hotnews(ID int primary key auto_increment , x int , title char(25) , comment varchar(150) ); Query OK, 0 rows affected (10.10 sec)MySQL [TESTDB]> insert into hotnews(x , title , comment) values( 10, "dddd" , "yyyy"); #在這里雖然我們設置了自增模式,但是我們也需要寫id號,否則會報錯 ERROR 1264 (22003): Out of range value for column 'ID' at row 1MySQL [TESTDB]> insert into hotnews(ID ,x , title , comment) values(null , 11, "dddd" , "yyyy"); ##插入記錄,11和3取余,余2,記錄存儲在55服務器的db3庫里 Query OK, 1 row affected (0.07 sec)MySQL [TESTDB]> insert into hotnews(ID ,x , title , comment) values(null , 11, "dddd" , "yyyy"); Query OK, 1 row affected (0.01 sec)MySQL [TESTDB]> insert into hotnews(ID ,x , title , comment) values(null , 10, "dddd" , "yyyy"); ##插入記錄,10和3取余,余1,記錄存儲在54服務器的db2庫里 Query OK, 1 row affected (0.02 sec)MySQL [TESTDB]> insert into hotnews(ID ,x , title , comment) values(null , 10, "dddd" , "yyyy"); Query OK, 1 row affected (0.01 sec) MySQL [TESTDB]> insert into hotnews(ID ,x , title , comment) values(null , 9, "dddd" , "yyyy"); ##插入記錄,9和3取余,余0,存儲在53服務器的db1庫里 Query OK, 1 row affected (0.04 sec)MySQL [TESTDB]> insert into hotnews(ID ,x , title , comment) values(null , 9, "dddd" , "yyyy"); Query OK, 1 row affected (0.01 sec)MySQL [TESTDB]> insert into hotnews(ID ,x , title , comment) values(null , 11, "dddd" , "yyyy"); Query OK, 1 row affected (0.01 sec)MySQL [TESTDB]> insert into hotnews(ID ,x , title , comment) values(null , 10, "dddd" , "yyyy"); Query OK, 1 row affected (0.00 sec)MySQL [TESTDB]> insert into hotnews(ID ,x , title , comment) values(null , 9, "dddd" , "yyyy"); Query OK, 1 row affected (0.00 sec)5.在3臺數據庫服務器本機查看數據[root@host53 ~]# mysql -uroot -p123456 mysql> select * from db1.hotnews; +----+------+-------+---------+ | ID | x | title | comment | +----+------+-------+---------+ | 1 | 9 | dddd | yyyy | | 2 | 9 | dddd | yyyy | | 3 | 9 | dddd | yyyy | +----+------+-------+---------+ 3 rows in set (0.00 sec)[root@host54 ~]# mysql -uroot -p123456 mysql> select * from db2.hotnews; +----+------+-------+---------+ | ID | x | title | comment | +----+------+-------+---------+ | 1 | 10 | dddd | yyyy | | 2 | 10 | dddd | yyyy | | 3 | 10 | dddd | yyyy | +----+------+-------+---------+ 3 rows in set (0.00 sec)[root@host55 ~]# mysql -uroot -p123qqq...A mysql> select * from db3.hotnews; +----+------+-------+---------+ | ID | x | title | comment | +----+------+-------+---------+ | 1 | 11 | dddd | yyyy | | 2 | 11 | dddd | yyyy | | 3 | 11 | dddd | yyyy | +----+------+-------+---------+ 3 rows in set (0.00 sec)[root@host50 ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456 MySQL [TESTDB]> select * from hotnews; +----+------+-------+---------+ | ID | x | title | comment | +----+------+-------+---------+ | 1 | 9 | dddd | yyyy | | 2 | 9 | dddd | yyyy | | 3 | 9 | dddd | yyyy | | 1 | 10 | dddd | yyyy | | 2 | 10 | dddd | yyyy | | 3 | 10 | dddd | yyyy | | 1 | 11 | dddd | yyyy | | 2 | 11 | dddd | yyyy | | 3 | 11 | dddd | yyyy | +----+------+-------+---------+ 9 rows in set (0.07 sec)

    添加新庫/新表

    • 服務端配置
    1.添加新庫 [root@host56 logs]# vim /usr/local/mycat/conf/server.xml #添加新的庫82 <property name="schemas">TESTDB,GAME</property>97 <property name="schemas">TESTDB,GAME</property>2.添加新表 [root@host56 ~]# vim /usr/local/mycat/conf/schema.xml #添加以下幾行,添加虛擬表 5 <schema name="GAME" checkSQLschema="false" sqlMaxLimit="100">6 <table name="teacher" dataNode="dn1,dn2,dn3" rule="mod-long" /> 7 <table name="class" dataNode="dn1,dn2,dn3" type="global" /> 8 </schema>3.重啟mycat服務 [root@host56 logs]# /usr/local/mycat/bin/mycat stop Stopping Mycat-server... Mycat-server was not running. [root@host56 logs]# /usr/local/mycat/bin/mycat start Starting Mycat-server... [root@host56 logs]# ss -nutlp | grep 8066 tcp LISTEN 0 100 :::8066 :::* users:(("java",pid=2762,fd=77))
    • 客戶端訪問
      1.客戶端連接mycat服務
    [root@host50 ~]# mysql -h192.168.4.56 -P8066 -uroot -p1234562.創建新表存數據 MySQL [(none)]> show databases; +----------+ | DATABASE | +----------+ | GAME | ##邏輯庫 | TESTDB | +----------+ 2 rows in set (0.01 sec)MySQL [(none)]> use GAME;MySQL [GAME]> create table class(name char(10) ,age int); Query OK, 0 rows affected (0.04 sec)MySQL [GAME]> insert into class values("yyy" ,19); Query OK, 1 row affected (0.07 sec)MySQL [GAME]> insert into class values("yyy" ,19); Query OK, 1 row affected (0.03 sec)MySQL [GAME]> insert into class values("yyy" ,19); Query OK, 1 row affected (0.01 sec)MySQL [GAME]> insert into class values("yyy" ,19); Query OK, 1 row affected (0.01 sec)MySQL [GAME]> insert into class values("zzz" ,20); Query OK, 1 row affected (0.01 sec)MySQL [GAME]> insert into class values("zzz" ,20); Query OK, 1 row affected (0.00 sec)MySQL [GAME]> insert into class values("zzz" ,20); Query OK, 1 row affected (0.02 sec)MySQL [GAME]> select * from class; +------+------+ | name | age | +------+------+ | yyy | 19 | | yyy | 19 | | yyy | 19 | | yyy | 19 | | zzz | 20 | | zzz | 20 | | zzz | 20 | +------+------+ 7 rows in set (0.05 sec)3.在數據庫服務器查看 [root@host53 ~]# mysql -uroot -p123456 mysql> select * from db1.class; +------+------+ | name | age | +------+------+ | yyy | 19 | | yyy | 19 | | yyy | 19 | | yyy | 19 | | zzz | 20 | | zzz | 20 | | zzz | 20 | +------+------+ 7 rows in set (0.00 sec)[root@host54 ~]# mysql -uroot -p123456mysql> select * from db2.class; +------+------+ | name | age | +------+------+ | yyy | 19 | | yyy | 19 | | yyy | 19 | | yyy | 19 | | zzz | 20 | | zzz | 20 | | zzz | 20 | +------+------+ 7 rows in set (0.01 sec)[root@host55 ~]# mysql -uroot -p123qqq...A mysql> select * from db3.class; +------+------+ | name | age | +------+------+ | yyy | 19 | | yyy | 19 | | yyy | 19 | | yyy | 19 | | zzz | 20 | | zzz | 20 | | zzz | 20 | +------+------+ 7 rows in set (0.00 sec)
    總結
  • mycat介紹:做數據分片存儲的軟件
  • 10種分片規則:枚舉法,求模法
  • 配置文件:配置連接用戶,邏輯庫名,邏輯表,分片字段名
  • 服務管理:啟動,停止,查看狀態,kill killall
  • 分片規則的使用:水平分割 mod-long sharding-by-intfile
  • 添加新庫新表
  • 客戶端連接
  • 總結

    以上是生活随笔為你收集整理的DBA(五):数据分片、Mycat服务的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产伦理一区二区三区 | 草碰在线 | 国产无遮挡裸体免费视频 | 午夜伦情| 69免费| 欧美日韩免费高清一区色橹橹 | 荒野求生21天去码版网站 | 亚洲九区 | 国产精品99无码一区二区 | 一起草视频在线播放 | 99re中文字幕| 女同动漫免费观看高清完整版在线观看 | 日韩色网| 欧美色婷婷 | 免费无码av片在线观看 | 欧美激情亚洲激情 | 嫩草视屏 | 日日干日日草 | 免费观看在线视频 | 久久综合社区 | 五月婷婷激情综合 | 亚洲精品久久久久久久蜜桃臀 | 久久精品7 | 国产传媒一区二区三区 | 非洲一级黄色片 | 国产一级片a | 人妻夜夜爽天天爽 | 男女视频在线观看 | 日本精品黄 | 污污的视频软件 | 日韩视频在线视频 | 免费男女乱淫真视频免费播放 | 国产aⅴ片 | 51成人做爰www免费看网站 | 欧美精品v国产精品v日韩精品 | 我和单位漂亮少妇激情 | 欧美一区二区三区成人久久片 | 成人免费xxxxx在线观看 | 中文在线а√天堂 | 欧美福利一区二区三区 | 一本色道久久综合亚洲 | 永久免费在线 | 欧美色99 | 久久九九国产视频 | 西西午夜视频 | 日韩精品偷拍 | 伊人久久影院 | 受虐m奴xxx在线观看 | 色屁屁一区二区三区视频 | 色哟哟精品一区 | 亚洲精品久久久中文字幕 | 淫品色影院| 亚洲国产一区二区三区 | 瑟瑟视频在线看 | 福利资源在线观看 | 美女在线国产 | 国产黄色免费视频 | 日本少妇一级片 | 欧美成人动态图 | 青青草娱乐视频 | 亚洲tv在线 | 欧美三级免费观看 | jizzjizz黄大片 | 寡妇一级片 | 色偷偷免费视频 | 亚洲欧洲日本在线 | 日本在线高清 | 欧美三级手机在线观看 | 北条麻妃一区二区三区 | 深夜国产在线 | 国产精品一区二区免费 | 午夜欧美视频 | 99免费观看视频 | 精品人妻无码一区二区三区 | 日本少妇性生活 | 精品一区二区三区免费 | 另类男人与善交video | 日韩精品免费一区二区 | 91福利视频免费观看 | 国产高清无密码一区二区三区 | 毛片视频播放 | 久热免费在线 | 精品国产成人av在线免 | 本道综合精品 | 日批视频在线 | 日韩精品久久久久久 | 免费黄网站在线看 | 成人污 | 爱爱免费视频网站 | 免费欧美一级视频 | 亚洲一区二区三区四区五区六区 | 老色鬼av| 一级特黄特色的免费大片视频 | 福利亚洲 | 国产精品乱码一区二区 | 老色批影视| 国产亚洲av综合人人澡精品 | 国产高清一区在线观看 | 亚洲欧美激情一区二区三区 |