企业实战_14_MyCat跨分片查询_全局表
接上一篇:企業(yè)實(shí)戰(zhàn)_13_MyCat清除冗余數(shù)據(jù)
https://gblfy.blog.csdn.net/article/details/100057317
文章目錄
- 一、跨分片查詢驗(yàn)證
- 1. 登錄mycat
- 2. 使用邏輯數(shù)據(jù)庫(kù)
- 1.3. 執(zhí)行跨分片查詢
- 1.4. 異常信息,問(wèn)題定位
- 1.5. 表分布
- 1.6. 跨分片查詢的解決方式
- 1.7. 場(chǎng)景分析
- 二、企業(yè)實(shí)戰(zhàn)跨分片查詢
- 2.1. 基礎(chǔ)操作(熟悉即可)
- 2.2. node2節(jié)點(diǎn)導(dǎo)出表數(shù)據(jù)
- 2.3. node3節(jié)點(diǎn)導(dǎo)入表數(shù)據(jù)
- 2.4. node4節(jié)點(diǎn)導(dǎo)入表數(shù)據(jù)
- 2.5. MyCat節(jié)點(diǎn)
- 2.6. 重啟MyCat使配置生效
- 2.7. 再次跨分頁(yè)查詢驗(yàn)證
- 三、全局表驗(yàn)證
- 3.1. 修改全局表數(shù)據(jù)
- 3.2. node2節(jié)點(diǎn)數(shù)據(jù)驗(yàn)證
- 3.3. node3節(jié)點(diǎn)數(shù)據(jù)驗(yàn)證
- 3.4. node4節(jié)點(diǎn)數(shù)據(jù)驗(yàn)證
一、跨分片查詢驗(yàn)證
1. 登錄mycat
在任意節(jié)點(diǎn)(node4)上登錄mycat
mysql -uapp_imooc -p123456 -h192.168.92.101 -P80662. 使用邏輯數(shù)據(jù)庫(kù)
use imooc_db;1.3. 執(zhí)行跨分片查詢
SELECTsupplier_name,b.region_name AS '省',c.region_name AS '市',d.region_name AS '區(qū)' FROMproduct_supplier_info aJOIN region_info b ON b.region_id = a.provinceJOIN region_info c ON c.region_id = a.cityJOIN region_info d ON d.region_id = a.district;1.4. 異常信息,問(wèn)題定位
ERROR 1064 (HY000): invalid route in sql, multi tables found but datanode has no intersection sql1.5. 表分布
| region_info | node1 |
| product_supplier_info | node2 |
| 針對(duì)這種情況應(yīng)該如何處理呢? |
1.6. 跨分片查詢的解決方式
| ① | api方式 | 通過(guò)前端程序,去訂單模塊中分別獲取省市區(qū)的信息,之后拼接在一起 |
| ② | 數(shù)據(jù)冗余的方式 | 把這些省市區(qū)的信息冗余到商品模塊的供應(yīng)商表中 |
| ③ | 全局表 | 字典表跨分片操作 |
1.7. 場(chǎng)景分析
- 字典類的表:
如果通過(guò)api方式,查詢的頻率比較高,api調(diào)取的次數(shù)也會(huì)很高,而且通過(guò)前臺(tái)程序,api調(diào)用再去拼接,比較耗時(shí)。
如果通過(guò)數(shù)據(jù)冗余方式,這個(gè)數(shù)據(jù)的冗余度比較大,字段不多還好說(shuō),針對(duì)字段比較多的字典表的話,一旦修改的話,我們就要修改和字段表相關(guān)的表,因此,字典類型的不適用api和數(shù)據(jù)冗余的方式進(jìn)行處理。
MyCat提供的全局表的功能,在每個(gè)分片上都會(huì)有這個(gè)全局表,也就是說(shuō),我們會(huì)把region_info這個(gè)表以相同的數(shù)據(jù),存儲(chǔ)到這3個(gè)數(shù)據(jù)節(jié)點(diǎn)中,然后再schema.xml中聲明全局表。
二、企業(yè)實(shí)戰(zhàn)跨分片查詢
2.1. 基礎(chǔ)操作(熟悉即可)
| ① | mysqldump -uroot -p order_db region_info > region_info | 導(dǎo)出備份region_info表 |
| ② | mysql -uroot -p product_db < region_info | 將region_info 數(shù)據(jù)導(dǎo)入到product_db數(shù)據(jù)庫(kù)中 |
| ③ | scp region_info root@192.168.43.172:/root | 將region_info 表以root用戶同步到ip為192.x服務(wù)器的root目錄下面 |
2.2. node2節(jié)點(diǎn)導(dǎo)出表數(shù)據(jù)
# 在node2節(jié)點(diǎn)上導(dǎo)出備份region_info表mysqldump -uroot -p order_db region_info > region_info# 復(fù)制到node3上scp region_info root@192.168.92.103:/root# 復(fù)制到node4上scp region_info root@192.168.92.104:/root2.3. node3節(jié)點(diǎn)導(dǎo)入表數(shù)據(jù)
# 將region_info 數(shù)據(jù)導(dǎo)入到product_db數(shù)據(jù)庫(kù)中 mysql -uroot -p product_db < region_info# 登錄mysql mysql -uroot -p Enter password: 123456# 使用product_db數(shù)據(jù)庫(kù) use product_db;# 查詢r(jià)egion_info是否導(dǎo)入成功 show tables;執(zhí)行日志: mysql> show tables; +-----------------------+ | Tables_in_product_db | +-----------------------+ | product_brand_info | | product_category | | product_comment | | product_info | | product_pic_info | | product_supplier_info | | region_info | +-----------------------+ 7 rows in set (0.00 sec)mysql>2.4. node4節(jié)點(diǎn)導(dǎo)入表數(shù)據(jù)
# 將region_info 數(shù)據(jù)導(dǎo)入到customer_db數(shù)據(jù)庫(kù)中 mysql -uroot -p customer_db< region_info# 登錄mysql mysql -uroot -p Enter password: 123456# 使用customer_db數(shù)據(jù)庫(kù) use customer_db;# 查詢r(jià)egion_info是否導(dǎo)入成功 show tables;執(zhí)行日志: mysql> show tables; +-----------------------+ | Tables_in_customer_db | +-----------------------+ | customer_balance_log | | customer_inf | | customer_level_inf | | customer_login | | customer_login_log | | customer_point_log | | region_info | +-----------------------+ 7 rows in set (0.00 sec)mysql>2.5. MyCat節(jié)點(diǎn)
# 進(jìn)入mycat的conf目錄下面cd /app/mycat/conf/# 編輯schema.xml文件vim schema.xml# 將region_info邏輯表,定義為全局表 將<table name="region_info" primaryKey="region_id" dataNode="ordb" /> 調(diào)整為<table name="region_info" primaryKey="region_id" dataNode="ordb,prodb,custdb" type="global"/>2.6. 重啟MyCat使配置生效
# 停止mycat mycat stop# 啟動(dòng)mycat mycat start# 查看啟動(dòng)日志 [root@node1 conf]# tail -f /app/mycat/logs/wrapper.log http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. INFO | jvm 1 | 2021/07/11 17:27:51 | MyCAT Server startup successfully. see logs in logs/mycat.log2.7. 再次跨分頁(yè)查詢驗(yàn)證
# 使用mysql客戶端連接mycat mysql -uapp_imooc -p123456 -h192.168.92.101 -P8066# 驗(yàn)證跨分片查詢 # 執(zhí)行跨分片查詢 SELECTsupplier_name,b.region_name AS '省',c.region_name AS '市',d.region_name AS '區(qū)' FROMproduct_supplier_info aJOIN region_info b ON b.region_id = a.provinceJOIN region_info c ON c.region_id = a.cityJOIN region_info d ON d.region_id = a.district;三、全局表驗(yàn)證
登錄mycat修改全局表數(shù)據(jù),驗(yàn)證是否同步3個(gè)物理節(jié)點(diǎn)的物理庫(kù)的全局表
3.1. 修改全局表數(shù)據(jù)
登錄MyCat修改全局表數(shù)據(jù),驗(yàn)證是否可以同步到其他3個(gè)數(shù)據(jù)節(jié)點(diǎn)中
#使用mysql客戶端連接mycat mysql -uapp_imooc -p123456 -h192.168.92.101 -P8066# 使用邏輯庫(kù) use imooc_db;# 查看全局表數(shù)據(jù) select * from region_info; mysql> select * from region_info; +-----------+-----------+---------------+--------------+ | region_id | parent_id | region_name | region_level | +-----------+-----------+---------------+--------------+ | 1 | 0 | 中國(guó)(china) | 0 | +-----------+-----------+---------------+--------------+ 1 row in set (0.29 sec)mysql>更新全局表數(shù)據(jù)
-------------------------------------------------# 更新全局表數(shù)據(jù) update region_info set region_name='中國(guó)2022' where region_id=1;# 更新后,再次查看全局表數(shù)據(jù) select * from region_info limit 10; Database changed mysql> select * from region_info; +-----------+-----------+---------------+--------------+ | region_id | parent_id | region_name | region_level | +-----------+-----------+---------------+--------------+ | 1 | 0 | 中國(guó)(china) | 0 | +-----------+-----------+---------------+--------------+ 1 row in set (0.29 sec)mysql> update region_info set region_name='中國(guó)2022' where region_id=1; Query OK, 1 row affected (0.07 sec) Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from region_info; +-----------+-----------+-------------+--------------+ | region_id | parent_id | region_name | region_level | +-----------+-----------+-------------+--------------+ | 1 | 0 | 中國(guó)2022 | 0 | +-----------+-----------+-------------+--------------+ 1 row in set (0.00 sec)mysql>注:mysql更新數(shù)據(jù)庫(kù)失敗 --read-only 請(qǐng)進(jìn)入傳送門:
https://blog.csdn.net/weixin_40816738/article/details/100059688
3.2. node2節(jié)點(diǎn)數(shù)據(jù)驗(yàn)證
登錄node2節(jié)點(diǎn)
- 在登錄mycat節(jié)點(diǎn)修改全局表數(shù)據(jù)后,查看node2節(jié)點(diǎn)的數(shù)據(jù)是否被更新
3.3. node3節(jié)點(diǎn)數(shù)據(jù)驗(yàn)證
登錄node3節(jié)點(diǎn)
- 查看在登錄mycat節(jié)點(diǎn)修改全局表數(shù)據(jù),node3節(jié)點(diǎn)的數(shù)據(jù)是否被更新
3.4. node4節(jié)點(diǎn)數(shù)據(jù)驗(yàn)證
- 查看在登錄mycat節(jié)點(diǎn)修改全局表數(shù)據(jù),node3節(jié)點(diǎn)的數(shù)據(jù)是否被更新
下一篇:企業(yè)實(shí)戰(zhàn)_15_MySql主從復(fù)制到MyCat總結(jié)
https://gblfy.blog.csdn.net/article/details/118657995
總結(jié)
以上是生活随笔為你收集整理的企业实战_14_MyCat跨分片查询_全局表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: org.apache.ibatis.re
- 下一篇: 2019-12-31