CentOS 安装 配置MyCat,实现MySQL的主从复制和读写分离

CentOS 安装 配置MyCat,实现MySQL的主从复制和读写分离

MyCat是Java语言开发的,所以需要提前安装openJDK或JDK。

安装JDK

1、下载mycat安装包(略)

这里使用的是:Mycat-server-1.6.7.1-release-linux.tar.gz

2、解压,移动到安装目录

# 解压
tar -zxvf Mycat-server-1.6.7.1-release-linux.tar.gz

# 移动到安装目录
mv mycat /usr/local/

3、修改配置

3.1、修改server.xml配置

# 进入配置文件目录
cd /usr/local/mycat/conf
# 修改server.xml
vi server.xml

修改内容:

  • 下面的<user name="user"这一段是不需要改的
  • 将MyCat的默认用户root 修改为自定义用户名,例如:mycat
  • 密码修改为自定义密码
  • scemas修改为自定义逻辑库名称
        <user name="rayfoo_root" defaultAccount="true">
                <property name="password">rayfoo</property>
                <property name="schemas">RAYFDB</property>

                <!-- 表级 DML 权限设置 -->
                <!--
                <privileges check="false">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>
                 -->
        </user>

3.2、修改schema.xml

# 进入配置文件目录
cd /usr/local/mycat/conf
# 修改schema.xml
vi schema.xml

修改逻辑数据库名称和节点:

  • 保留一个dataNode
  • 保留一个dataHost
  • 配置读库readHost
  • 配置写库writeHost
  • 这里如果修改了schema的name,那么server.xml的schema的name也需要同步修改
  • balance="3"开启读写分离
  • 读写分离必须使用mycat的虚拟库才能实现 !!!
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="RAYFOODB" checkSQLschema="false" sqlMaxLimit="100">
        </schema>
        <dataNode name="dn1" dataHost="primaryhost" database="testdb" />
        <dataHost name="primaryhost" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.2.183:3306" user="root"
                                   password="rayfoo">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="192.168.2.184:3306" user="root" password="rayfoo" />
                </writeHost>
        </dataHost>
</mycat:schema>

4、启动MyCat

# 进入安装目录
cd /usr/local/mycat/bin

# 启动mycat 启动方式1:控制台启动,一般用于调试,可以查看日志
./mycat console

# 后台启动
./mycat start

5、开放端口

# 开启防火墙
firewall-cmd --permanent --add-port=8066/tcp
# 查看列表
firewall-cmd --permanent --list-ports
# 重启防火墙
firewall-cmd --reload

6、使用mysql命令登录

# 进入mysql安装目录
cd /usr/local/mysql/bin

# 登录mycat
./mysql -urayfoo_root -prayfoo -P 8066 -h 192.168.2.183

7、MySQL配置主从复制

配置主从复制尽量配合MyCat使用,一般配置主库为写库,从库为读库。使用主从复制一定要避免手动写入从库数据!!!!!!

7.1、修改配置

配置主数据库my.cnf

  • 注意:别直接复制,binlog-do-db一定要改
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=MIXED

配置从数据库my.cnf

#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

重启主从数据库,确保都开放了3306端口

7.2、创建账户,配置主从复制

在主机上建立帐户并授权 slave,注意这里一定要重启数据库后再执行,否则查询show master status;为空

#在主机MySQL里执行授权命令
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
#查询master的状态
mysql> show master status;

#记录下File和Position的值
#执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化

在从机上配置需要复制的主机,注意这里一定要重启数据库后再执行

mysql> CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;

#启动从服务器复制功能
mysql> start slave;
#查看从服务器状态
mysql> show slave status\G;

#下面两个参数都是Yes,则说明主从配置成功!
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

此时,主数据库的任何操作都会自动在从数据库执行

7.3、停止、取消主从复制

在从机执行:

mysql> stop slave;

恢复主从复制:

mysql> start slave;

取消原有主从关系,重新配置主从;需要在从机执行:

mysql> stop slave;
mysql> reset master;

8、双主从复制和读写分离

双向主从复制需要四台机器,先分别搭建两套主从;然后再将两台主机做为互相主从复制。以此实现高可用。

双主双从模式的读写分离,将两个主库作为写库,两个从库作为读库即可。

8.1、双主双从复制

8.1.1、master1配置

修改配置文件: vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候, 有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1, 取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1

8.1.2、master2配置

修改配置文件: vim /etc/my.cnf
#主服务器唯一ID
server-id=3
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2

8.1.3、slavel1配置

修改配置文件: vim /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

8.1.4、slavel2配置

修改配置文件: vim /etc/my.cnf
#从服务器唯一ID
server-id=4
#启用中继日志
relay-log=mysql-relay

8.1.5、执行复制

8.1.5.1、双主机、 双从机重启 mysql 服务

8.1.5.2、开放mysql默认端口

8.1.5.3、在两台主机上建立帐户并授权 slave
#在主机MySQL里执行授权命令
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
#查询Master1的状态
mysql> show master status;

#登录master2 查询Master2的状态
mysql> show master status;

#分别记录下File和Position的值
#执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
8.1.5.4、在从机上配置需要复制的主机(Slava1 复制 Master1, Slava2 复制 Master2)
#复制主机的命令
mysql> CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;

分别在两台从机执行命令

8.1.5.5、分别启动两台从服务器复制功能
# 分别启动两台服务器的复制功能
mysql> start slave;

# 分别查看从服务器状态
mysql> show slave status\G;


#下面两个参数都是Yes,则说明主从配置成功!
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
8.1.5.6、分别在两台主服务器互相复制

Master2的复制Master1、Master1的复制Master2

8.2、双主双从读写分离

…
<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100" >
  <heartbeat>select user()</heartbeat>
  <!-- can have multi write hosts -->
  <writeHost host="hostM1" url="192.168.140.128:3306" user="root" password="123123">
    <!-- can have multi read hosts -->
    <readHost host="hostS1" url="192.168.140.127:3306" user="root" password="123123" />
  </writeHost>
  <writeHost host="hostM2" url="192.168.140.126:3306" user="root" password="123123">
    <!-- can have multi read hosts -->
    <readHost host="hostS2" url="192.168.140.125:3306" user="root" password="123123" />
  </writeHost>
</dataHost>
… #
balance="1": 全部的readHost与stand by writeHost参与select语句的负载均衡。
#writeType="0": 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
#writeType="1",所有写操作都随机的发送到配置的 writeHost, 1.5 以后废弃不推荐
#writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties 。
#switchType="1": 1 默认值,自动切换。
# -1 表示不自动切换
# 2 基于 MySQL 主从同步的状态决定是否切换。
posted @ 2022-06-09 00:41  张瑞丰  阅读(257)  评论(0编辑  收藏  举报