mycat實現mariadb讀寫分離 分庫

2022-09-07 04:33:07 字數 3986 閱讀 5839

節點名稱

節點ip

埠master

127.0.0.1

3306

sl**e

127.0.0.1

3305

mycat

127.0.0.1

8066/9066

1、mariadb安裝

新建主節點配置檔案(docker啟動時會把此檔案掛載到容器中)

mkdir /opt/software/mariadb_master/

cd /opt/software/mariadb_master/

mkdir conf data

cd conf

#建立主節點配置檔案docker.cnf

vim docker.cnf

配置檔案內容

[mysqld]

server-id=1

log-bin=master-bin

skip-host-cache

skip-name-resolve

collation-server = utf8mb4_general_ci

init-connect='set names utf8mb4'

character-set-server = utf8mb4

[mysql]

default-character-set=utf8mb4

[client]

default-character-set=utf8mb4

啟動mariadb

docker run --name mariadb-master -p 3306:3306 -e mysql_root_password=mypass -v /opt/software/mariadb_master/conf:/etc/mysql/conf.d -v /opt/software/mariadb_master/data:/var/lib/mysql -d mariadb:10.5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
進入容器中修改配置檔案/etc/mysql/my.cnf區分大小寫

lower_case_table_name=1
重新啟動 mariadb

同樣的步驟安裝mariadb從節點

配置檔案內容

[mysqld]

server-id=2

log-bin=master-bin

skip-host-cache

skip-name-resolve

collation-server = utf8mb4_general_ci

init-connect='set names utf8mb4'

character-set-server = utf8mb4

[mysql]

default-character-set=utf8mb4

[client]

default-character-set=utf8mb4

啟動命令

docker run --name mariadb-sl**e -p 3305:3306 -e mysql_root_password=mypass -v /opt/software/mariadb_sl**e/conf:/etc/mysql/conf.d -v /opt/software/mariadb_sl**e/data:/var/lib/mysql -d mariadb:10.5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
2、開啟主從複製

進入主節點,可以通過控制台或者n**icat這樣的客戶端管理軟體

docker exec -it mariadb-master /bin/bash

mysql -uroot -p

建立使用者

create user 'user001'@'%' identified by 'mypass';

grant replication sl**e on *.* to 'user001'@'%';

flush privileges;

##檢視主節點狀態

show master status;

進入從節點建立使用者開啟同步

docker exec -it sl**e /bin/bash

mysql -uroot -proot

change master to master_host='127.0.0.1',master_port=3306,master_user='user001',master_password='mypass',master_log_file='master-bin.000005',master_log_pos=28102042;

開啟主從複製

start sl**e;

show sl**e status

出現2個yes,代表主從複製設定成功。

3、注意

在更改配置檔案後一定要重啟mariadb。我執行show master status時顯示為空,就是忘記重啟、配置log-bin沒起作用

master_password、master_log_file的設定要與master status的內容匹配

如果sl**e status為非yes狀態,則一定要確定防火牆、網路是否通、使用者名稱、密碼是否正確。

我這裡選用的是mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

cd /opt/software/mycat/

tar -zxvf mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

配置檔案修改

server.xml主要更改部分如下:

mypass

mydb

mydb

schema.xml主要更改部分如下:

<?xml version="1.0"?>

select user()

大致內容為將mydb_1、mydb_2組合為邏輯庫mydb(server.xml與schema.xml的要對應);向hostm1寫,從hosts2讀。

啟動命令為./bin目錄下

./mycat start 啟動

./mycat stop 停止

./mycat console 前台執行

./mycat restart 重啟服務

./mycat pause 暫停

./mycat status 檢視啟動狀態

注意:啟動時報錯can't find table define in schema dual schema:mydb

原因:mycat 有些版本沒有dual 這個表,需要在你的邏輯庫裡面手動建立乙個dual中間表。且設定不區分大小寫。

插入資料時報錯can't find a valid data node for specified node index

原因:插入資料時選用了規則rule="sharding-by-month",而其底層的partbymonth如下:

yyyy-mm-dd

2015-01-01

sbegindate 表示開始的月份,只能搞2023年的月分片,如果是16年的就會報錯。改成2021-01-01即可。

mycat 實現讀寫分離

mycat 實現讀寫分離 配置mysql實現主從複製 安裝jdk 安裝mycat實現讀寫分離 tar zxf mycat server 1.6 release 20161028204710 sangnux.tar.gz c usr local 新增環境變數 新建邏輯庫,邏輯表 mycat預設配置了邏...

利用MyCAT實現資料分片

先從schema.xml中擷取一段示例 1 邏輯表名 goods,type global,全域性表 資料來源 dn1 dn2上 2 邏輯表名 hotnews,所屬分片 dn1 dn2 dn3 分片規則 mod long,注意按實際情況修改分片規則檔案 conf目錄下的rule.xml檔案 prima...

Mycat實現postgresql的分庫分表

mycat支援常用的幾種資料來源,原理就是通過 把不同的資料來源 成乙個虛擬的mysql資料庫,然後專案中直接訪問虛擬的這個mysql資料來源就可以了。對mycat的配置超級簡單,只是單獨修改conf中的幾個xml檔案即可實現不同的配置,其中最重要的幾個xml包括 server.xml 資料庫使用者...