当前位置:Gxlcms > 数据库问题 > 聊一聊mycat数据库集群系列之双主双重实现

聊一聊mycat数据库集群系列之双主双重实现

时间:2021-07-01 10:21:17 帮助过:6人阅读

= 3306 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0_3306 # 设置mysql数据库的数据的存放目录 datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0_3306\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 主从复制设置 # 设置服务id,注意改id值在同一个数据库集群中要保持唯一 server-id = 3306 # 写入磁盘策略 该参数的有效值有 012 # 默认值为1,在实际使用过程中,为了效率,我们一般会在设置为2 innodb_flush_log_at_trx_commit=2 # 开启binlog日志同步功能 # 这个参数直接影响mysql的性能和完整性。 sync_binlog=0 # 在作为从库的时候,有写入操作也要更新二进制文件 log-slave-updates # 二进制日志保留天数 expire_logs_days=180 # binlog日志文件名(可以任意命名) log-bin=mysql-bin # 表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535 auto_increment_increment=2 # 表示自增长字段从那个数开始,他的取值范围是1 .. 65535 auto_increment_offset=1 # 在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2. # 这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。 # 同步的数据库设置方式有两种: # binlog_do_db:设置需要同步的数据库 # binlog-ignore-db:设置不需要同步的数据库 #同步的数据库,除此之外别的不同步(和下面binlog-ignore-db二选一) # binlog_do_db=testdb #不同步数据库,除此之外都同步 binlog-ignore-db = information_schema binlog-ignore-db = mysql binlog-ignore-db = performance_schema binlog-ignore-db = sys [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8

3307置文件

 

[Client]
port = 3307
[mysqld]
#设置3307端口
port = 3307
# 设置mysql的安装目录
basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0_3307
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0_3307\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 主从复制设置
# 设置服务id,注意改id值在同一个数据库集群中要保持唯一
server-id = 3306
# 写入磁盘策略 该参数的有效值有 012
# 默认值为1,在实际使用过程中,为了效率,我们一般会在设置为2
innodb_flush_log_at_trx_commit=2  
# 开启binlog日志同步功能
# 这个参数直接影响mysql的性能和完整性。
sync_binlog=0
# 表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
auto_increment_increment=2
# 表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto_increment_offset=2
# 在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2.
# 这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。
# 在作为从库的时候,有写入操作也要更新二进制文件
log-slave-updates
# 二进制日志保留天数
expire_logs_days=180
# binlog日志文件名(可以任意命名)
log-bin=mysql-bin
# 同步的数据库设置方式有两种:
# binlog_do_db:设置需要同步的数据库
# binlog-ignore-db:设置不需要同步的数据库
#同步的数据库,除此之外别的不同步(和下面binlog-ignore-db二选一)
# binlog_do_db=testdb 
#不同步数据库,除此之外都同步
binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = sys
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

3308配置文件

[Client]

port = 3308

 

[mysqld]

#设置3308端口

port = 3308

# 该id主要要保持唯一,后面在设置主从同步的时候会用到

server-id = 3308

# 设置mysql的安装目录

basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3308

# 设置mysql数据库的数据的存放目录

datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3308\data

# 允许最大连接数

max_connections=200

# 服务端使用的字符集默认为8比特编码的latin1字符集

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

 

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8

3309配置文件

[Client]
port = 3309
 
[mysqld]
#设置3309端口
port = 3309
# 该id主要要保持唯一,后面在设置主从同步的时候会用到
server-id = 3309
# 设置mysql的安装目录
basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3309
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3309\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
 
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

3310配置文件

[Client]
port = 3308
 
[mysqld]
#设置3310端口
port = 3310
# 该id主要要保持唯一,后面在设置主从同步的时候会用到
server-id = 3310
# 设置mysql的安装目录
basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3310
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3310\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
 
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

3311配置文件

[Client]
port = 3311
 
[mysqld]
#设置3311端口
port = 3311
# 该id主要要保持唯一,后面在设置主从同步的时候会用到
server-id = 3308
# 设置mysql的安装目录
basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3311
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3311\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
 
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

三、数据库配置验证

  数据库双主多重配置验证,主要验证两个主机数据更新是否所有集群中的是所有数据是否都发送对应的改变,如果发送说明配置成功。

  1、  在3306中创建一个数据test和一个表user

  查看其它的库是否都创建了一个库test和一个表user

  2、  在3307中对表user插入一条数据

  查看其余所有库对于的表是否也新增了该数据

四、mycat双主多从配置

         Mycat的使用配置,我们先从最简单的模式(主从复制)开始配置起走。Mycat主从复制主要配置文件有如下两个文件,两个文件都在mycat目录\conf下。

  • server.xml: 配置文件包含了mycat的系统配置信息
  • schema.xml:涵盖了mycat的逻辑库,表,分片规则,分片节点及数据源。

server.xml配置文件

       server.xml主要涉及到两个标签的配置,和上一篇的主重复制一样:

  • system标签:主要配置系统相关的配置,在此不在做详细的描述,根据实际需要在去配置;
  • user标签:主要用于定义登录mycat的用户和权限,这也是本次需要介绍的配置节点。user标签可以同时配置多个节点。
<!--配置mycat连接用户信息-->
<!--name:用户名-->
<user name="root" defaultAccount="true">
    <!--password:用户登录密码-->
    <property name="password">xuyuanhong</property>
    <!--password:mysql对应的逻辑库名称,如果有多个库,那么不同的库之间通过,连接-->
    <property name="schemas">test</property>
</user>

schema.xml配置文件

         schema配置相对上一篇的主从复制的配置节点,只是将负载均衡节点balance的值改为1,同时在服务上新增一个主节点,同时新增一个从节点,其余配置不变,如下:

 

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    
    <!--schema:mycat整个数据库的映射框架配置,每一个mycat逻辑库需要一个对于的配置节点-->
    <!--name:mycat的逻辑库名称,和sercer.xml中的逻辑库名称保持一致-->
    <!--checkSQLschema:是否检测SQL,如果设置为 true,那么mycat会对传递的SQL做优化,主要去掉指定库名称,反之则不做任何处理,一般情况下设置false-->
    <!--sqlMaxLimit:最大连接数-->
    <!--dataNode:主要配置逻辑库和实际库的映射关系,会有一个专门的节点来配置,此处指需要绑定对于的映射关系名称即可-->
    <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dntest">
    </schema>
    
    <!--dataNode:配置mycat逻辑库和实际库的映射关系-->
    <!--name:映射关系名称,要和上面的schema对应的dataNode节点名称保持一致-->
    <!--database:实体库映射的真实数据库名称-->
    <!--dataHost:具体的数据库连接属性节点名称-->
    <dataNode name="dntest" database="test" dataHost="hosttest" />
    
    <!--dataHost:配置数据库的连接信息和路由规则信息-->
    <!--name:数据连接地址信息名称,语上面的dataNode节点中的dataHost名称对应-->
    <!--maxCon:指定每个读写实例连接池的最大连接-->
    <!--minCon:指定每个读写实例连接池的最小连接,初始化连接池的大小-->
    <!--balance:查询操作负载均衡类型,目前的取值有以下4种
        balance=0: 不开启读写分离,所有读操作都发送到当前可用的writeHost上。
        balance=1: 全部的readHost与Stand by writeHost都参与select语句的负载均衡,
            简而言之,当双主双从模式(M1->S1, M2->S2,并且M1与M2互为主备)时,在正常情况下,M2,S1和S2都参与select的负载均
        balance=2: 所有的读操作都随机在writeHost,readHost上分发。
        balance=3: 所有的读请求都随机分配到writeHost对应的readHost上执行,writeHost不负担读压力,注意balance=3只在mycat1.4之后版本中有效。
        在实际使用中,针对读写分离模式,我们一般都配置为3
    -->
    <!--writeType:写操作负载均衡类型,目前的取值有3种:
        writeType=“0”, 所有写操作都发送到可用的writeHost上。
        writeType=“1”,所有写操作都随机的发送到readHost。
        writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。
        毫无疑问,在实际使用过中,都会配置为0
    -->

<!--dbType:指定后端连接的数据库类型,目前支持二进制的mysql协议,还有其他使用JDBC连接的数据库。如mongodb,spark等-->

              <!--dbDriver:指定连接后端数据库使用的Driver,目前可选的值有native和JDBC。

                            使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb。

                            其他类型的数据库则需要使用JDBC驱动来支持

              -->

              <!--switchType:切换方式:

                            -1:表示不自动切换。

                            1:默认值,表示自动切换

                            2:表示基于MySQL主从同步状态决定是否切换,心跳语句: show slave status.

                            3:表示基于mysql galary cluster的切换机制,适合mycat1.4之上的版本,心跳语句show status like "%esrep%";

              -->

              <dataHost name="hosttest" maxCon="1000" minCon="10" balance="1"

                                            writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

                            <!--心跳检测语句,mycat也是要实时的去检测每一个映射数据库的状态,通过执行该语句的返回来判断数据库是否在线-->

                            <heartbeat>select user()</heartbeat>

                            <!-- writeHost:写服务器映射关系配置 -->

                            <!-- url:数据库地址(ip+端口号) -->

                            <!-- user:数据库连接用户名(注意改账号一定要授权可以远程访问改数据库) -->

                            <!-- password:数据库连接密码 -->

                            <writeHost host="hostM1" url="192.168.101.191:3306" user="root"

                                                           password="xuyuanhong">

                                                            <!-- readHost:读服务器映射关系配置,可以配置多个节点,多个节点就代表多个从数据库 -->

                                                            <readHost host="hostS11" url="192.168.101.191:3308" user="root" password="xuyuanhong">

                                                            </readHost>                    

                                                            <readHost host="hostS12" url="192.168.101.191:3309" user="root" password="xuyuanhong">

                                                            </readHost>      

                            </writeHost>

                            <writeHost host="hostM2" url="192.168.101.191:3307" user="root"

                                                           password="xuyuanhong">

                                                                  <!-- readHost:读服务器映射关系配置,可以配置多个节点,多个节点就代表多个从数据库 -->

                                                            <readHost host="hostS21" url="192.168.101.191:3310" user="root" password="xuyuanhong">

                                                            </readHost>                    

                                                            <readHost host="hostS22" url="192.168.101.191:3311" user="root" password="xuyuanhong">

                                                            </readHost>      

                            </writeHost>

              </dataHost>

</mycat:schema>

 

五、mycat启动及其常用操作命令

  • 首先需要进入到mycat安装目录的bin目录下
cd E:\Program Files\mycat\bin

 

  •        开启mycat
mycat.bat start

 

  • 停止mycat
mycat.bat stop

 

  • 重启mycat
mycat.bat restart

 

  • 查看mycat状态
mycat.bat status

  

六、mycat中遇到的问题解决

         其实在实际mycat配置时,我也不是一次配置成功的,也遇到了两个小问题,现在罗列出来,如果刚刚你也遇到了正好可以解决掉。

1、Unrecognized VM option ‘AggressiveOpts‘

  解决方式:打开wrapper.conf配置文件,找到AggressiveOpts并将整行注释掉即可,如下图所示:

 技术图片

2、Could not create the Java Virtual Machine.

  该问题有可能是设置才内存超出本地环境实际内存,处理方式也简单,直接将wrapper.conf对应的内存改小即可。如下图位置:

 技术图片

  有关mycat的部署安装、读写分离就分享到这儿了,下一篇将和大家一起分享mycat的多主多重配置,有兴趣的小伙伴,可以持续关注,谢谢!

       好了,到目前为止,针对数据库的主从复制、算主多重的部署从头到尾的每一步都做了一个总结。在后续的文章中就要开始对数据库的分库分表进行梳理回顾。有兴趣的朋友,可以持续关注,谢谢支持。

END
为了更高的交流,欢迎大家关注我的公众号,扫描下面二维码即可关注,谢谢:

技术图片

聊一聊mycat数据库集群系列之双主双重实现

标签:最大   存储   rop   The   相对   机制   主从   account   等等   

人气教程排行