sharding proxy分庫分表最佳實踐

2021-09-27 12:51:07 字數 3781 閱讀 7560

sharding-proxy 分庫分表、讀寫分離,它和mycat類似,屬於中介軟體**層,它類似乙個資料庫,**後面的分庫分表的多個資料庫,它遮蔽了後端多個資料庫的複雜性,應用開發時直接連線 sharding-proxy 即可

如果使用docker,可以執行docker pull shardingsphere/sharding-proxy獲取映象。詳細資訊請參考docker映象。

解壓縮後修改conf/server.yaml和以config-字首開頭的檔案,如:conf/config-***.yaml檔案,進行分片規則、讀寫分離規則配置. 配置方式請參考配置手冊。

把檔案裡的配置的 # 注釋開啟,改為符合自己的配置

例子:authentication:

username: root

password: 123456

props:

#max.connections.size.per.query: 1

acceptor.size: 8 # 用於設定接收客戶端請求的工作執行緒個數,預設為cpu核數*2

executor.size: 4 # 工作執行緒數量,預設值: cpu核數

proxy.transaction.type: xa

proxy.transaction.enabled: true # 是否開啟事務, 目前僅支援xa事務,預設為不開啟

proxy.opentracing.enabled: false # 是否開啟鏈路追蹤功能,預設為不開啟

sql.show: true # 是否開啟sql顯示,預設值: false

開啟 config-sharding.yaml

例子如下:

schemaname: sharding_db

datasources:

person:

url: jdbc:mysql:

username: root

password: 123456

#connectiontimeoutmilliseconds: 30000

#idletimeoutmilliseconds: 60000

#maxlifetimemilliseconds: 1800000

#maxpoolsize: 50

autocommit: true

connectiontimeout: 30000

idletimeout: 60000

maxlifetime: 1800000

maximumpoolsize: 5

shardingrule:

tables:

t_user:

actualdatanodes: person.t_user$->

tablestrategy:

inline:

shardingcolumn: id

algorithmexpression: t_user$->

keygeneratorcolumnname: id

keygeneratorclassname: com.xx.base.idgenerator.shardingkeygenerator

#預設自增列值生成器類名稱

defaultkeygeneratorclassname: io.shardingsphere.core.keygen.defaultkeygenerator

注意:有坑

sharding-proxy3.0版本(目前沒有看到有更新),分布id實現類defaultkeygenerator,但官方分布式id生成器實現類defaultkeygenerator,在業務量不大的情況下,snowflake生成的id序列號部分大多都是0,所以通過這個分步式id通過取模hash分庫,導致資料全落入單庫中,資料分布不平均,需要自己實現重寫內部雪花演算法。shardingkeygenerator這個類式自己實現,分步式id分布均勻。核心**實現如下:

private static byte sequenceoffset;
private void vibratesequenceoffset()
linux作業系統請執行bin/start.sh,windows作業系統請執行bin/start.bat啟動sharding-proxy。如需配置啟動埠、配置檔案位置,可參考快速入門 進行啟動。

使用任何mysql的客戶端連線。如:mysql -u root -h 127.0.0.1 -p 3307

以springboot專案為例

com.alibaba

druid-spring-boot-starter

1.1.9

io.shardingsphere

sharding-transaction-spring

3.1.0

org.springframework.boot

spring-boot-starter-aop

spring.datasource.type=com.alibaba.druid.pool.druiddatasource

spring.datasource.driver-class-name=com.mysql.jdbc.driver

spring.datasource.url=jdbc:mysql://localhost:3307/sharding_db?useserverprepstmts=true&cacheprepstmts=true

spring.datasource.username=root

spring.datasource.password=123456

#spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.driver

#初始化時建立物理連線的個數

spring.datasource.druid.initial-size=3

#最小連線池數量

spring.datasource.druid.min-idle=3

#最大連線池數量

spring.datasource.druid.max-active=10

#獲取連線時最大等待時間

spring.datasource.druid.max-wait=60000

分庫備份 分庫恢復

由於一台mysql資料庫伺服器上有多個資料庫,所以在考慮備份的時候也將多個庫分開進行,以便在單個庫出現問題時恢復。一 分庫備份 1 可以乙個庫對應一條備份語句,如 mysqldump s home mysql run mysql.socket uroot p123456 single transac...

mysql分庫備份 MySQL分庫備份與分表備份

mysql分庫備份與分表備份 1 分庫備份 要求 將mysql資料庫中的使用者資料庫備份,備份的資料庫檔案以時間命名 指令碼內容如下 root db01 scripts vim backup database.sh bin bash mysql user root mysql pass 123456...

sql server 分庫合併

參考 sqlserver 伺服器架構遷移 2,sql server 中心訂閱模型 多發布單訂閱 思路 是 分庫建立發布,然後新伺服器訂閱所有分庫進行資料彙總 需要注意 分庫建立發布的時候 1,分庫的發布還是需要做sid 的篩選 2,選擇設定所有表,設定屬性 名稱已被使用時的操作 為 刪除資料,如果目...