免费在线a视频-免费在线观看a视频-免费在线观看大片影视大全-免费在线观看的视频-色播丁香-色播基地

實戰:MySQL一主兩從+MyCAT讀寫分離

:2025年02月11日 linux運維之路
分享到:

本文詳細介紹了實戰化部署MySQL+MYCAT讀寫分離的過程,包括環境的搭建、三臺Docker容器的創建、my.cnf文件的復制和編輯、重啟容器和再次修改my.cnf的步驟。在環境配置上,需要確保每個容器的id必須唯一且...

實戰MYSQL+MYCAT讀寫分離實戰,實現MYSQL數據庫1主2從架構。以下為詳細部署過程:

mysql的一主兩從環境:

1、由于我主機硬件條件限制,環境使用docker容器的方式部署,其它環境類同,僅需要把容器的ip改為實際的ip地址即可,其它操作一樣;

2、啟動3臺docker容器,鏡像為mysql8.0:

docker run -d --name=mysql8_01 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

docker run -d --name=mysql8_02 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

docker run -d --name=mysql8_03 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

3、使用docker cp命令把mysql8_01里的my.cnf文件復制出來備用:

docker cp mysql8_01:/etc/my.cnf ./

#文件復制出來后編輯my.cnf文件(分3次,每一次不可混淆):

vi my.cnf

#在[mysqld]字段后面加入如下內容:

server-id = 1 #此id在三個容器里必須唯一,不得重復,否則會報錯。

log-bin = mysql-bin

#保存文件后使用docker cp命令復制到mysql8_01容器原來位置:

docker cp my.cnf mysql8_01:/etc/

#重啟容器:

docker restart mysql8_01

#再次修改my.cnf

#在[mysqld]字段后面加入如下內容:

server-id = 2 #此id在三個容器里必須唯一,不得重復,否則會報錯。

#保存文件后使用docker cp命令復制到mysql8_02容器原來位置:

docker cp my.cnf mysql8_02:/etc/

#重啟容器:

docker restart mysql8_02

#再次修改my.cnf

#在[mysqld]字段后面加入如下內容:

server-id = 3 #此id在三個容器里必須唯一,不得重復,否則會報錯。

#保存文件后使用docker cp命令復制到mysql8_03容器原來位置:

docker cp my.cnf mysql8_03:/etc/

#重啟容器:

docker restart mysql8_03

4、進入mysql8_01容器查看其master status:

docker exec -it mysql8_01 /bin/bash

#登錄本容器的mysql server

mysql -u root -p -h 127.0.0.1

#在mysql server進入如下操作:

mysql>CREATE USER 'tongbu'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

mysql>GRANT REPLICATION SLAVE ON *.* TO 'tongbu'@'%';

#查看master狀態:

mysql>show master status\G;

*************************** 1. row ***************************

File: mysql-bin.000001

Position: 1578

5、退出mysql8_01進入mysql8_02容器:

docker exec -it mysql8_02 /bin/bash

bash-4.4# mysql -u root -p

#在mysql server進入如下操作:

mysql>change master to

master_host='172.17.0.2',master_port=3306,master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1578;

#啟動slave:

start slave;

#查看狀態,確保標紅處的兩個Yes,如果是No需要排錯才能繼續:

show slave status\G;

*************************** 1. row ***************************

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

6、退出mysql8_02進入mysql8_03容器:

docker exec -it mysql8_03 /bin/bash

bash-4.4# mysql -u root -p

#在mysql server進入如下操作:

mysql>change master to

master_host='172.17.0.2',master_port=3306,master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1578;

#啟動slave:

start slave;

#查看狀態,確保標紅處的兩個Yes,如果是No需要排錯才能繼續:

show slave status\G;

*************************** 1. row ***************************

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

7、此時試驗在mysql8_01容器上進行mysql的增刪改,mysql8_02和mysql8_03均會自動同步;

mycat的部署:

為學習mycat的部署過程,不使用現有的mycat鏡像,先構建一個可以ssh的centos7:

FROM freedoms1988/centos7-sshd

MAINTAINER wulvcan

RUN rm -rf /etc/yum.repos.d/epel*

RUN ssh-keygen -A

RUN echo "abc123ABC" | passwd --stdin root

RUN sed -i -e '/DNS/s/#//g' -e '/DNS/s/yes/no/g' /etc/ssh/sshd_config

ENTRYPOINT /usr/sbin/init

CMD /usr/sbin/sshd -D

        構建新的鏡像:

#需要在上一步創建的Dockerfile文件所在的目錄執行

docker build -t centos-ssh:v1 .

        使用新構建的鏡像運行一個容器:

docker run -d --name=centos7 --privileged=true centos-ssh:v1

a8628fb36ec2d943c3a6e0b0391d4a1aa56c51889c91cba3f0edb48104277f4c

root@wulvcan:~#docker inspect centos7 | grep IPAddress

"SecondaryIPAddresses": null,

"IPAddress": "172.17.0.5",

"IPAddress": "172.17.0.5",

#使用ssh登錄172.17.0.5

root@wulvcan:~# ssh root@172.17.0.5

root@172.17.0.5's password:

[root@a8628fb36ec2 ~]#

mycat是java語言開發的,所以安裝mycat前,需要先安裝JDK(jave環境,,此處安裝JDK8.0:

#下載地址https://www.oracle.com/java/technologies/downloads/#java8,需要注冊賬號。

#為了加快實驗速度,下面使用群共享的文件jdk1.8.0_131.tar.gz

#把tar包放在/usr/local/java目錄下,解壓。

mkdir -p /usr/local/java

mv jdk1.8.0_131.tar.gz /usr/local/java

cd /usr/local/java

tar -xvf jdk1.8.0_131.tar.gz

創建java環境變量,修改/etc/profile文件:

#在文件尾部加入如下內容(注意路徑要與實際相符):

export JAVA_HOME=/usr/local/jave/jdk1.8.0_131

export JRE_HOME=${JAVA_HOME}/jre

#export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

#export PATH=${JAVA_HOME}/bin:$PATH

export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar

export PATH=$PATH:${JAVA_HOME}/bin

重新加載profile文件:

source /etc/profile

        查看java環境:

java -version

java version "1.8.0_131"

Java(TM) SE Runtime Environment (build 1.8.0_131-b11)

Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

        下載mycat運行包:http://dl.mycat.org.cn/2.0/install-template/

wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip

        下載mycat的jar依賴包:http://dl.mycat.org.cn/2.0/1.20-release/

wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies2022-5-5.jar

        解壓mycat運行包,并移動至/usr/local目錄下:

unzip mycat2-install-template-1.21.zip

mv mycat/ /usr/local/

#復制mycat依賴包mycat2-1.21-release-jar-with-dependencies2022-5-5.jar

#mycat2-1.21-release-jar-with-dependencies2022-5-5.jar到/usr/local/mycat/lib/目錄

cp mycat2-1.21-release-jar-with-dependencies2022-5-5.jar /usr/local/mycat/lib/

#把/usr/local/mycat/bin目錄下的所有文件加執行權限

chmod a+x /usr/local/mycat/bin/*

在mysql創建一個mycat賬號用于后繼的登錄(也可以使用root賬號,此處使用root賬號)。在mysql上創建一個mycat的原型庫,mycat在啟動時會在此原型庫上創建運行所需的各種表數據,此庫必須提前手動創建,否則mycat在啟動時會報錯。

#在容器mysql8_01上創建:

create database mycat;

Query OK, 1 row affected (0.10 sec)

#此時可以查看兩個從庫是否同步了主庫的數據,作為驗證一主兩從架構是否正確

創建原型庫的數據源,此步驟也必須創建,否則mycat啟動時會報錯:

cd /usr/local/mycat/conf/datasources/

#編輯該json文件,注意修改的位置,如果上一步創建了mycat賬號,這里的用戶名要改為mycat賬號名

vim prototypeDs.datasource.json

{

"dbType":"mysql",

"idleTimeout":60000,

"initSqls":[],

"initSqlsGetConnection":true,

"instanceType":"READ_WRITE",

"maxCon":1000,

"maxConnectTimeout":3000,

"maxRetryCount":5,

"minCon":1,

"name":"prototypeDs",

"password":"123456",

"type":"JDBC",

"url":"jdbc:mysql://172.17.0.2:3306/mycat?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",        "user":"root",

"weight":0

}

        在同一目錄下生成master和slave配置文件:

cp prototypeDs.datasource.json master.datasource.json

#由于有兩個從庫,需要生成2個slave配置文件,名稱可以任意,最好方便記憶,后面配置過程會用到

cp prototypeDs.datasource.json slave-01.datasource.json

cp prototypeDs.datasource.json slave-02.datasource.json

        分別修改3個配置文件:

        vi master.datasource.json

        name改為master,ip為mysql8_01容器的ip,讀寫分離數據庫為test001(需要提前創建好)

        vi slave-01.datasource.json

        instanceType改為READ表示只讀不寫,name改為slave-01,ip為mysql8_02容器的ip,讀寫分離數據庫為test001

        vi slave-02.datasource.json

        instanceType改為READ表示只讀不寫,name改為slave-02,ip為mysql8_03容器的ip,讀寫分離數據庫為test001

        添加數據庫test001的數據源的集群信息,此步驟必須操作,如果多個主或者多個從,需要用逗號分隔:

cd /usr/local/mycat/conf/clusters/

#復制創建一個新文件

cp prototype.cluster.json master-slave.cluster.json

vi master-slave.cluster.json

#修改為以下內容:

{

"clusterType":"MASTER_SLAVE",

"heartbeat":{

"heartbeatTimeout":1000,

"maxRetry":3,

"minSwitchTimeInterval":300,

"slaveThreshold":0

},

"masters":[

"master"

],

"replicas":[

"slave-01",

"slave-02"

],

"maxCon":5000,

"name":"master-slave",

"readBalanceType":"BALANCE_ALL",

"switchType":"NOT_SWITCH"

}

        配置物理數據庫和mycat中數據源/數據源集群的關系,此步驟必須操作

cp mysql.schema.json test001.schema.json

#在test001.schema.json輸入以下內容,原內容全部清空

{

"schemaName": "test001",

"targetName": "master-slave",

"normalTables": {}

}

        修改登錄用戶信息,此步驟必須操作

cd /usr/local/mycat/conf/users/

vi root.user.json

#修改登錄的用戶名和密碼,此處用root用戶,如果是別的用戶需要更改為對應的密碼

#"transactionType":"xa",表示支持事務類型(具體還不明白)

{

"dialect":"mysql",

"ip":null,

"password":"123456",

"transactionType":"xa",

"username":"root"

}

        如有需要,修改mycat的監聽端口,在server.json里修改,此處使用默認的8066端口

        萬事具備,只欠最后一步啟動:

[root@a8628fb36ec2 bin]# /usr/local/mycat/bin/mycat start

Starting mycat2...

        查看啟動日志,如日志有started up提示,表示mycat已經正常啟動

[root@a8628fb36ec2 bin]# tail /usr/local/mycat/logs/

mycat.pid    wrapper.log

[root@a8628fb36ec2 bin]# tail /usr/local/mycat/logs/wrapper.log

INFO   | jvm 1    | 2022/08/27 08:40:55 | 2022-08-27 08:40:55,824[INFO]com.alibaba.druid.pool.DruidDataSource.init:990{dataSource-2} inited

INFO   | jvm 1    | 2022/08/27 08:40:58 | 2022-08-27 08:40:58,688[INFO]io.mycat.config.MycatRouterConfigOps.recoveryXA:735readXARecoveryLog start

INFO   | jvm 1    | 2022/08/27 08:40:58 | 2022-08-27 08:40:58,872[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:119Mycat Vertx server e302ad53-7d70-4d53-b1d0-fcd966fd631c started up.

INFO   | jvm 1    | 2022/08/27 08:40:58 | 2022-08-27 08:40:58,873[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:119Mycat Vertx server b149a5a3-d1a5-43d7-9131-593373bca64e started up.

INFO   | jvm 1    | 2022/08/27 08:40:58 | 2022-08-27 08:40:58,873[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:119Mycat Vertx server 7d3fb2ab-ad0f-44f3-b339-aa601dd3c9a0 started up.

INFO   | jvm 1    | 2022/08/27 08:40:58 | 2022-08-27 08:40:58,874[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:119Mycat Vertx server 6eb7c8e7-eff4-4adc-8387-534287f13555 started up.

INFO   | jvm 1    | 2022/08/27 08:40:58 | 2022-08-27 08:40:58,874[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:119Mycat Vertx server 44a16fc0-68fc-4bac-9e09-f12ecc67e67a started up.

INFO   | jvm 1    | 2022/08/27 08:40:58 | 2022-08-27 08:40:58,874[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:119Mycat Vertx server c3f9733c-720b-42bc-9297-cf76d7efce52 started up.

INFO   | jvm 1    | 2022/08/27 08:40:58 | 2022-08-27 08:40:58,874[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:119Mycat Vertx server 9345b7a0-86ca-435b-a792-87b67df1fa65 started up.

INFO   | jvm 1    | 2022/08/27 08:40:58 | 2022-08-27 08:40:58,875[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:119Mycat Vertx server 4688e2b0-5fb2-4ce2-be46-053c7d73e1ee started up.

        查看監聽端口,可以看到有8066監聽

        查看java進程:

        如果沒有java進程,需要檢查java是否正常啟動:java -version,做相應的排錯工作。

        使用telnet命令測試8066端口,如沒有telnet命令可用yum install telnet安裝

[root@a8628fb36ec2 /]# telnet 127.0.0.1 8066

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

T

5.7.33-mycat-2.0ZXHVkHTqwWZwnCwYcMhmysql_native_password

#表示8066端口已經通了

#使用ctrl+] 組合鍵退出telnet命令行界面。

        登陸mycat測試

mysql -uroot -p -P 8066 -h 127.0.0.1

Server version: 5.7.33-mycat-2.0 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

  1. 測試mycat的讀寫分離

#登陸mycat

mysql -uroot -p -P 8066 -h 127.0.0.1

MySQL [(none)]> use test001;

Database changed

MySQL [test001]>

MySQL [test001]> show tables;

Empty set (0.00 sec)

MySQL [test001]>

#可以看到默認沒有表,測試創建一個表

MySQL [test001]> create table t1(id char(100),name varchar(100),age char(20),job char(20));

Query OK, 0 rows affected (1.49 sec)

MySQL [test001]>

MySQL [test001]> show tables;

+-------------------+

| Tables_in_test001 |

+-------------------+

| t1                |

+-------------------+

1 row in set (0.14 sec)

MySQL [test001]>

MySQL [test001]> desc t1;

+-------+--------------+------+-----+---------+-------+

| Field | Type         | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| id    | char(100)    | YES  |     | NULL    |       |

| name  | varchar(100) | YES  |     | NULL    |       |

| age   | char(20)     | YES  |     | NULL    |       |

| job   | char(20)     | YES  |     | NULL    |       |

+-------+--------------+------+-----+---------+-------+

4 rows in set (0.12 sec)

MySQL [test001]>

#測試在該表插入內容:

MySQL [test001]> insert into t1 values (001,'wulvcan',18,'IT');

Query OK, 1 row affected (0.08 sec)

MySQL [test001]> insert into t1 values (002,'laowu',48,'IT');

Query OK, 1 row affected (0.02 sec)

MySQL [test001]>

MySQL [test001]> select * from t1;

+------+---------+------+------+

| id   | name    | age  | job  |

+------+---------+------+------+

| 1    | wulvcan | 18   | IT   |

| 2    | laowu   | 48   | IT   |

+------+---------+------+------+

2 rows in set (0.08 sec)

MySQL [test001]>

  1. 此時去mysql8_01容器登陸mysql查看:

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mycat              |

| mysql              |

| nibu               |

| performance_schema |

| sys                |

| test001            |

+--------------------+

7 rows in set (0.00 sec)

mysql> use test001;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from t1;

+------+---------+------+------+

| id   | name    | age  | job  |

+------+---------+------+------+

| 1    | wulvcan | 18   | IT   |

| 2    | laowu   | 48   | IT   |

+------+---------+------+------+

2 rows in set (0.00 sec)

#可以看到剛才在mycat創建的數據庫及表和表內容

在從庫(mysql8_02和mysql8_03)上登陸查詢:

mysql> use test001;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from t1;

+------+---------+------+------+

| id   | name    | age  | job  |

+------+---------+------+------+

| 1    | wulvcan | 18   | IT   |

| 2    | laowu   | 48   | IT   |

+------+---------+------+------+

2 rows in set (0.00 sec)

#兩臺從庫上均可以查詢到mycat創建的表內容。

  1. 上面的步驟創建為寫操作,無法判斷讀寫分離的情況,現在兩個從庫上插入新的數據。由于是主從架構,在從庫上的操作不會同步到主庫上,如果使用mycat查詢可以查詢到在從庫插入的數據,表示mycat讀數據庫的時候是走的從庫,從而證明讀寫佢分離成功。

#分別在從庫上操作

insert into t1 values (003,'test_test',33,'test');

  1. 此時在登錄mycat查詢,可以看到從庫上的數據表示是在從庫上讀取的信息:

[root@a8628fb36ec2 /]# mysql -uroot -p -P 8066 -h 127.0.0.1

Enter password:

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.7.33-mycat-2.0 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> use test001

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

MySQL [test001]> select * from t1;

+------+-----------+------+------+

| id   | name      | age  | job  |

+------+-----------+------+------+

| 1    | wulvcan   | 18   | IT   |

| 2    | laowu     | 48   | IT   |

| 3    | test_test | 33   | test |

+------+-----------+------+------+

3 rows in set (0.05 sec)

MySQL [test001]>

至此,mycat實現mysql讀寫分離。

原文來源:https://mp.weixin.qq.com/s/J_p01l12cIcplF4s01R-sQ

[我要糾錯]
文:宋聰喬&發表于江蘇
關鍵詞: 實戰 MYSQL+MYCAT 讀寫 分離 實戰

來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。

點個贊
0
踩一腳
0

您在閱讀:實戰:MySQL一主兩從+MyCAT讀寫分離

Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利

蘇公網安備32010402000125 蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司

南京思必達教育科技有限公司版權所有   百度統計

主站蜘蛛池模板: 免费看一级黄色 | 波多野结衣在线一区二区 | 国产成人在线观看网站 | 一本无线乱码不卡一二三四 | 一品毛片| 高h喷水荡肉爽文np肉色文 | 中文字幕免费视频 | 成人永久免费福利视频网站 | h网站免费观看 | 成人在线不卡视频 | 亚洲欧美日本国产综合在线 | 日韩手机在线免费视频 | 啪啪色网 | 日本一区二区中文字幕 | 福利网在线观看 | 99精品国产第一福利网站 | 国产成人经典三级在线观看 | 91精品导航 | 国产一区二区在线观看动漫 | 成人日韩在线观看 | 国产精品香蕉在线一区 | 国产专区日韩精品欧美色 | 国产亚洲精品自在线亚洲情侣 | 免费男女视频 | 日本精品久久久免费高清 | 你懂的 在线视频 | 国产香蕉一本大道 | 日本黄色mv | 亚洲国产精品激情在线观看 | 日本欧美在线播放 | 九九精品久久 | 成人动漫在线免费观看 | 激情文学综合丁香 | 国产精品第五页 | 在线视频亚洲欧美 | 国产精品天天看天天爽 | 国产成人午夜视频 | 欧美久在线观看在线观看 | 波多野结衣在线视频观看 | 国内精品一区二区三区 | 免费一区视频 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產品享最低成本,有需要聯系,
  • 卡爾蔡司鏡片優惠店,鏡片價格低
  • 蘋果原裝手機殼