Mycat常見問題與解決方案


轉載於:https://www.cnblogs.com/jpfss/p/8194111.html

1 Mycat目前有哪些功能與特性?

答:
• 支持 SQL 92標准
• 支持Mysql集群,可以作為Proxy使用
• 支持JDBC連接多數據庫
• 支持NoSQL數據庫
• 支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性數據分片集群
• 自動故障切換,高可用性
• 支持讀寫分離,支持Mysql雙主多從,以及一主多從的模式
• 支持全局表,數據自動分片到多個節點,用於高效表關聯查詢
• 支持獨有的基於E-R 關系的分片策略,實現了高效的表關聯查詢
• 支持一致性Hash分片,有效解決分片擴容難題
• 多平台支持,部署和實施簡單
• 支持Catelet開發,類似數據庫存儲過程,用於跨分片復雜SQL的人工智能編碼實現,143行Demo完成跨分片的兩個表的JION查詢。
• 支持NIO與AIO兩種網絡通信機制,Windows下建議AIO,Linux下目前建議NIO
• 支持Mysql存儲過程調用
• 以插件方式支持SQL攔截和改寫
• 支持自增長主鍵、支持Oracle的Sequence機制

2 Mycat除了Mysql還支持哪些數據庫?

答:mongodb、oracle、sqlserver 、hive 、db2 、 postgresql。

3 Mycat目前有生產案例了么?

答:目前Mycat初步統計大概600家公司使用。

4 Mycat穩定性與Cobar如何?

答:目前Mycat穩定性優於Cobar,而且一直在更新,Cobar已經停止維護,可以放心使用。

5 Mycat支持集群么?

答:目前Mycat沒有實現對多Mycat集群的支持,可以暫時使用haproxy來做負載,或者統計硬件負載。

6 Mycat多主切換需要人工處理么?

答:Mycat通過心跳檢測,自主切換數據庫,保證高可用性,無須手動切換。

7 Mycat目前有多少人開發?

答:Mycat目前開發全部是志願者無償支持,主要有以leaderus 為首的Mycat-Server 開始、以rainbow為首的Mycat-web開發、以海王星為首的產品發布及代碼管理,還有以Marshy為首的推廣。

8 Mycat目前有哪些項目?

答:Mycat-Server :Mycat核心服務、
Mycat-spider : Mycat爬蟲技術、
Mycat-ConfigCenter :Mycat配置中心 、
Mycat-BigSQL : Mycat大數據處理(暫未更細)、
Mycat-Web : Mycat監控及web(新版開發中) 、
Mycat-Balance :Mycat集群負載(暫未更細)

9 Mycat最新的穩定版本是哪個到哪里下載?

答:打包代碼:Mycat最新穩定版是1.5.1 ,1.6為aphla,下載地址是:https://github.com/MyCATApache/Mycat-download
文檔:https://github.com/MyCATApache/Mycat-doc
源碼:https://github.com/MyCATApache/Mycat-Server

10 Mycat如何配置字符集?

答:在配置文件server.xml配置,默認配置為utf8。
utf8

11 Mycat后台管理監控如何使用?

答:9066端口可以用JDBC方式執行命令,在界面上進行管理維護,也可以通過命令行查看命令行操作。
命令行操作是:mysql -h127.0.0.1 -utest -ptest -P9066 登陸,然后執行相應命令。

12 Mycat主鍵插入后應用如何獲取?

答:獲得自增主鍵,插入記錄后執行select last_insert_id()獲取。

13 Mycat如何啟動與加入服務?

答:目前Mycat暫未封裝加入服務,需要自己封裝。
linux環境為:
./mycat start 啟動
./mycat stop 停止
./mycat console 前台運行
./mycat restart 重啟服務
./mycat pause 暫停
./mycat status 查看啟動狀態
window啟動為:
直接雙擊運行 startup_nowrap.bat ,如果閃退用cmd模式運行查看日志。

14 Mycat運行sql時經常阻塞或卡死是什么原因?

答: 如果出現執行sql語句長時間未返回,或卡死,請檢查是否是虛機下運行或cpu為單核,具體解決方式請參 考:https://github.com/MyCATApache/Mycat-Server/issues/73,如果仍舊無法解決,可以暫時跳過,目前有些環境阻塞卡死原因未知。

15 Mycat中,舊系統數據如何遷移到Mycat中?

答:舊數據遷移目前可以手工導入,在mycat中提取配置好分配規則及后端分片數據庫,然后通過dump或loaddata方式導入,后續Mycat就做舊數據自動數據遷移工具。

16 Mycat如何對舊分片數據遷移或擴容,支持自動擴容么?

答:目前除了一致性hash規則分片外其他數據遷移比較困難,目前暫時可以手工遷移,未提供自動遷移方案,具體遷移方案情況Mycat權威指南對應章節。

17 Mycat支持批量插入嗎?

答:目前Mycat1.3.0.3以后支持多values的批量插入,如insert into(xxx) values(xxx),(xxx) 。

18 Mycat支持多表Join嗎?

答:Mycat目前支持2個表Join,后續會支持多表Join,具體Join請看Mycat權威指南對應章節。

19 Mycat 啟動報主機不存在的問題?

答:需要添加ip跟主機的映射。

20 Mycat連接會報無效數據源(Invalid datasource)?

答:例如報錯:mysql> select * from company;
ERROR 3009 (HY000): java.lang.IllegalArgumentException: Invalid DataSource:0
這類錯誤最常見是一些配置問題例如schema.xml中的dataNode的配置和實際不符合,請先仔細檢查配置項,確保配置沒有問題。如果不是配置問題,分析具體日志看出錯原因,常見的有:
如果是應用連:在某些版本的Mysql驅動下連接Mycat會報錯,可升級最新的驅動包試下。
如果是服務端控制台連,確認mysql是否開啟遠程連接權限,或防火牆是否設置正確,或者數據庫database是否配置,或用戶名密碼是否正確。

21 Mycat使用中如何提需求或bug?

答:bug或新需求可以到群里提問,同時最好到github發起以isuues:https://github.com/MyCATApache/Mycat-Server/issues

22 Mycat如何建表與創建存儲過程?

答:注意注解中語句是節點的表請替換成自己表如select 1 from 表 ,查出來的數據在那個節點往哪個節點建
存儲過程
/!mycat: sql=select 1 from 表 / CREATE DEFINER=root@% PROCEDURE proc_test() BEGIN END ;
表:
/!mycat: sql=select 1 from 表 /create table ttt(id int);

23 Mycat目前有多少人維護?

答:目前初步統計有10人以上核心人員維護。

24 Mycat支持的或者不支持的語句有哪些?

答:insert into,復雜子查詢,3表及其以上跨庫join等不支持。

25 MycatJDBC連接報 PacketTooBigException異常

答:檢查mysqljdbc驅動的版本,在使用mycat1.3和mycat1.4版本情況下,不要使用jdbc5.1.37和38版本的驅動,會出現如下異常報錯:com.mysql.jdbc.PacketTooBigException: Packet for query is too large (60 > -1). You can change this value on the server by setting the max_allowed_packet’ variable。建議使用jdbc5.1.35或者36的版本。

26 Mycat中文亂碼的問題

答:如果在使用mycat出現中文插入或者查詢出現亂碼,請檢查三個環節的字符集設置:1)客戶端環節(應用程序、mysql命令或圖形終端工具)連接mycat字符集2)mycat連接數據庫的字符集3)數據庫(mysql,oracle)字符集。這三個環節的字符集如果配置一致,則不會出現中文亂碼,其中尤其需要注意的是客戶端連接mycat時使用的連接字符集,通常的中文亂碼問題一般都由此處設置不當引出。其中mycat內部默認使用utf8字符集,在最初啟動連接數據庫時,mycat會默認使用utf8去連接數據庫,當客戶端真正連接mycat訪問數據庫時,mycat會使用客戶端連接使用的字符集修改它連接數據庫的字符集,在mycat環境的管理9066端口,可以通過show @@backend命令查看后端數據庫的連接字符集,通過show @@connection命令查看前端客戶端的連接字符集。客戶端的連接可以通過指定字符集編碼或者發送SET命令指定連接mycat時connection使用的字符集,常見客戶端連接指定字符集寫法如下:
1) jdbcUrl=jdbc:mysql://localhost:8066/databaseName? characterEncoding=iso_1
2) SET character_set_client = utf8;用來指定解析客戶端傳遞數據的編碼
SET character_set_results = utf8;用來指定數據庫內部處理時使用的編碼
SET character_set_connection = utf8;用來指定數據返回給客戶端的編碼方式
3) mysql –utest –ptest –P8066 –default-character-set=gbk

27 Mycat無法登陸Access denied

答:Mycat正常安裝配置完成,登陸mycat出現以下錯誤:
[mysql@master ~]$ mysql -utest -ptest -P8066
ERROR 1045 (28000): Access denied for user ‘test’@’localhost’ (using password: YES)
請檢查在schema.xml中的相關dataHost的mysql主機的登陸權限,一般都是因為配置的mysql的用戶登陸權限不符合,mysql用戶權限管理不熟悉的請自己度娘。只有一種情況例外,mycat和mysql主機都部署在同一台設備,其中主機localhost的權限配置正確,使用-hlocalhost能正確登陸mysql但是無法登陸mycat的情況,請使用-h127.0.0.1登陸,或者本地網絡實際地址,不要使用-hlocalhost,很多使用者反饋此問題,原因未明。

28 Mycat的分片數據插入報異常IndexOutofBoundException

答:在一些配置了分片策略的表進行數據插入時報錯,常見的報錯信息如下:java.lang.IndexOutOfBoundsException:Index:4,size:3這類報錯通常由於分片策略配置不對引起,請仔細檢查並理解分片策略的配置,例如:使用固定分片hash算法,PartitionByLong策略,如果schema.xml里面設置的分片數量dataNode和rule.xml配置的partitionCount 分片個數不一致,尤其是出現分片數量dataNode小於partitionCount數量的情況,插入數據就可能會報錯。很多使用者都沒有仔細理解文檔中對分片策略的說明,用默認rule.xml配置的值,沒有和自己實際使用環境進行參數核實就進行分片策略使用造成這類問題居多。

29 Mycat ER分片子表數據插入報錯

答:一般都是插入子表時出現不能找到父節點的報錯。報錯信息如: [Err] 1064 - can’t find (root) parent sharding node for sql:。此類ER表的插入操作不能做為一個事務進行數據提交,如果父子表在一個事務中進行提交,顯然在事務沒有提交前子表是無法查到父表的數據的,因此就無法確定sharding node。如果是ER關系的表在插入數據時不能在同一個事務中提交數據,只能分開提交。

30 Mycat最大內存無法調整至4G以上

答:mycat1.4的JVM使用最大內存調整如果超過4G大小,不能使用wrapper.java.maxmemory參數,需要使用wrapper.java.additional的寫法,注意將wrapper.java.maxmemory參數注釋,例如增加最大內存至8G:wrapper.java.additional.10=-Xmx8G。

31 Mycat使用過程中報錯怎么辦

答:記住無論什么時候遇到報錯,如果不能第一時間理解報錯的原因,首先就去看日志,無論是啟動(wrapper.log)還是運行過程中(mycat.log),請相信良好的日志是編程查錯的終極必殺技。日志如果記錄信息不夠,可以調整conf/log4j.xml中的level級別至debug,所有的詳細信息均會記錄。另外如果在群里面提問,盡量將環境配置信息和報錯日志提供清楚,這樣別人才能快速幫你定位問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM