mycat配置双主双从实现mysql读写分离

docker容器下mysql主从配置

mycat配置双主双从实现mysql读写分离

拉取mysql5.7

docker pull mysql:5.7

运行mysql镜像

mysql M1 主容器:

docker run -p 3301:3306 --name mysql-master1  -v /usr/local/mysql-master1/conf:/etc/mysql/conf.d -v /usr/local/mysql-master1/logs:/logs -v /usr/local/mysql-master1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

mysql S1 从容器:

docker run -p 3302:3306 --name mysql-slave1  -v /usr/local/mysql-slave1/conf:/etc/mysql/conf.d -v /usr/local/mysql-slave1/logs:/logs -v /usr/local/mysql-slave1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

mysql M2 主容器:

docker run -p 3303:3306 --name mysql-master2  -v /usr/local/mysql-master2/conf:/etc/mysql/conf.d -v /usr/local/mysql-master2/logs:/logs -v /usr/local/mysql-master2/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

mysql S2 从容器:

docker run -p 3304:3306 --name mysql-slave2  -v /usr/local/mysql-slave2/conf:/etc/mysql/conf.d -v /usr/local/mysql-slave2/logs:/logs -v /usr/local/mysql-slave2/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

配置my.cnf文件

mysql-master1 配置my.cnf文件

在/usr/local/mysql-master1/conf下创建my.cnf文件:
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=1
## binlog-ignore-db,指定不需要同步的数据库名称,设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
## binlog-do-db= 指定需要同步的数据库名称  
# binlog-do-db=  (这个配置也可以不加,则除了 上面排除 binlog-ignore-db 外的库,都备份)


#重点 在作为从数据库时候,有写入操作也要更新二进制文件
log_slave_updates=1

## 开启二进制日志功能  
#记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故 障时数据的无损失恢复。
log-bin=mysql-master1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
#statement 记录所有的写操作到bin-log文件 缺点:sql语句执行set time=now() 会出现主从不一致  
#row 记录每行的变换  缺点:数据量大的时候,记录数据多
#mixed是statement和row的混合  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
 
#通用查询日志
#记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令, 对我们复原操作的实际场
#景、发现问题,甚至是对数据库操作的审计都有很大的帮助。
general_log=ON  
general_log_file=/var/lib/mysql/mysql-general.log 
 
#慢查询日志
#记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。
slow_query_log=ON 
slow_query_log_file=/var/lib/mysql/mysql-slow.log 
long_query_time=3 
#设置慢查询的阈值为3秒,超出此设定值的SQL即被记录到慢查询日志
log_output=FILE
max_allowed_packet=200M
 
#错误日志
#记录MySQL服务的启动、运行或停止MySQL服务时出现的问题,方便我们了解服务器的 状态,从而对服务器进行维护。
log-error=/var/lib/mysql/mysql-error.log

mysql-slave1 配置my.cnf文件

在/usr/local/mysql-slave1/conf下创建my.cnf文件:
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=2
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=all 
 
# relay_log配置中继日志
#用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。 从服务器通过读取中继#日志的内容,来同步主服务器上的操作。
relay_log=mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

mysql-master2 配置my.cnf文件

在/usr/local/mysql-master2/conf下创建my.cnf文件:
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=3
## binlog-ignore-db,指定不需要同步的数据库名称,设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
## binlog-do-db= 指定需要同步的数据库名称  
# binlog-do-db=  (这个配置也可以不加,则除了 上面排除 binlog-ignore-db 外的库,都备份)


#重点 在作为从数据库时候,有写入操作也要更新二进制文件
log_slave_updates=1


## 开启二进制日志功能  
#记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故 障时数据的无损失恢复。
log-bin=mysql-master2-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
#statement 记录所有的写操作到bin-log文件 缺点:sql语句执行set time=now() 会出现主从不一致  
#row 记录每行的变换  缺点:数据量大的时候,记录数据多
#mixed是statement和row的混合  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
 
#通用查询日志
#记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令, 对我们复原操作的实际场
#景、发现问题,甚至是对数据库操作的审计都有很大的帮助。
general_log=ON  
general_log_file=/var/lib/mysql/mysql-general.log 
 
#慢查询日志
#记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。
slow_query_log=ON 
slow_query_log_file=/var/lib/mysql/mysql-slow.log 
long_query_time=3 
#设置慢查询的阈值为3秒,超出此设定值的SQL即被记录到慢查询日志
log_output=FILE
max_allowed_packet=200M
 
#错误日志
#记录MySQL服务的启动、运行或停止MySQL服务时出现的问题,方便我们了解服务器的 状态,从而对服务器进行维护。
log-error=/var/lib/mysql/mysql-error.log

mysql-slave2 配置my.cnf文件

在/usr/local/mysql-slave2/conf下创建my.cnf文件:
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=4
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mysql-slave2-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=all 
 
# relay_log配置中继日志
#用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。 从服务器通过读取中继#日志的内容,来同步主服务器上的操作。
relay_log=mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

重启mysql主从数据库

[root@Zwen conf]# docker restart  mysql-master1
mysql-master1
[root@Zwen conf]# docker restart  mysql-master2
mysql-master2
[root@Zwen conf]# docker restart  mysql-slave1
mysql-slave1
[root@Zwen conf]# docker restart  mysql-slave2
mysql-slave2
[root@Zwen conf]# 

进入docker mysql-master1创建同步用户

#进入容器
[root@Zwen /]# docker exec -it mysql-master1 /bin/bash

#连接mysql
root@013075cb9308:/# mysql -uroot -p123456 

#查看主从状态
mysql> show master status;

+--------------------------+----------+--------------+-------------------------------------------------+-------------------+
| File                     | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+--------------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-master1-bin.000001 |      154 |              | sys,mysql,information_schema,performance_schema |                   |
+--------------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)




#master容器实例内创建数据同步用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456'
> OK
> 时间: 0.031s


GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'
> OK
> 时间: 0.018s


进入docker mysql-master2创建同步用户

#进入容器
[root@Zwen /]# docker exec -it mysql-master2 /bin/bash

#连接mysql
root@013075cb9308:/# mysql -uroot -p123456 

#查看主从状态
mysql> show master status;

+--------------------------+----------+--------------+-------------------------------------------------+-------------------+
| File                     | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+--------------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-master2-bin.000001 |      154 |              | sys,mysql,information_schema,performance_schema |                   |
+--------------------------+----------+--------------+-------------------------------------------------+-------------------+

1 row in set (0.00 sec)




#master容器实例内创建数据同步用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456'
> OK
> 时间: 0.031s


GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'
> OK
> 时间: 0.018s

重置《从机》mysql主从关系详解

mysql删除主从的方法:

1、利用“stop slave;”语句停止slave服务器的主从同步;

2、利用“RESET MASTER;”语句重置master服务;

3、利用“reset slave;”语句重置slave服务;

4、重启数据库即可。

重置《从机》mysql主从关系实施

#进入容器
[root@Zwen conf]# docker exec -it mysql-slave1 /bin/bash
#连接mysql
root@3f729a7f87cf:/# mysql -uroot -p123456

#停止slave服务器的主从同步
mysql> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)

#重置master服务
mysql> RESET MASTER;
Query OK, 0 rows affected (0.01 sec)


进入docker mysql-slave1开启同步

#进入容器
[root@Zwen /]# docker exec -it mysql-slave1 /bin/bash

#连接mysql
root@ea13a82226bf:/# mysql -uroot -p123456

#进行关联主数据库
mysql> change master to master_host='8.131.80.107', master_user='slave', master_password='123456', master_port=3301, master_log_file='mysql-master1-bin.000001', master_log_pos=154, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.02 sec)


mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 8.131.80.107
                  Master_User: slave
                  Master_Port: 3301
                Connect_Retry: 30
              Master_Log_File: mysql-master1-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 328
        Relay_Master_Log_File: mysql-master1-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 535
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 7eb61420-ce0f-11ed-aeb7-0242ac110004
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

进入docker mysql-slave2开启同步

#进入容器
[root@Zwen /]# docker exec -it mysql-slave2 /bin/bash

#连接mysql
root@ea13a82226bf:/# mysql -uroot -p123456

#进行关联主数据库
mysql> change master to master_host='8.131.80.107', master_user='slave', master_password='123456', master_port=3303, master_log_file='mysql-master2-bin.000001', master_log_pos=154, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

#开启同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 8.131.80.107
                  Master_User: slave
                  Master_Port: 3303
                Connect_Retry: 30
              Master_Log_File: mysql-master2-bin.000001
          Read_Master_Log_Pos: 617
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 791
        Relay_Master_Log_File: mysql-master2-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 617
              Relay_Log_Space: 998
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 3
                  Master_UUID: 97ada26f-cebc-11ed-a1ff-0242ac110006
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

进入docker mysql-master1开启双主同步


[root@Zwen conf]# docker exec -it mysql-master1 /bin/bash

root@ba51774f65fe:/# mysql -uroot -p123456

mysql> change master to master_host='8.131.80.107', master_user='slave', master_password='123456', master_port=3303, master_log_file='mysql-master2-bin.000001', master_log_pos=617, master_connect_retry=30;


mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 8.131.80.107
                  Master_User: slave
                  Master_Port: 3303
                Connect_Retry: 30
              Master_Log_File: mysql-master2-bin.000001
          Read_Master_Log_Pos: 617
               Relay_Log_File: ba51774f65fe-relay-bin.000002
                Relay_Log_Pos: 328
        Relay_Master_Log_File: mysql-master2-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 617
              Relay_Log_Space: 542
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 3
                  Master_UUID: 97ada26f-cebc-11ed-a1ff-0242ac110006
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

mysql> show master status;
+--------------------------+----------+--------------+-------------------------------------------------+-------------------+
| File                     | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+--------------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-master1-bin.000001 |      154 |              | sys,mysql,information_schema,performance_schema |                   |
+--------------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)



进入docker mysql-master2开启双主同步

[root@Zwen conf]# docker exec -it mysql-master2 /bin/bash

root@ba51774f65fe:/# mysql -uroot -p123456

mysql> change master to master_host='8.131.80.107', master_user='slave', master_password='123456', master_port=3301, master_log_file='mysql-master1-bin.000001', master_log_pos=154, master_connect_retry=30;


mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 8.131.80.107
                  Master_User: slave
                  Master_Port: 3301
                Connect_Retry: 30
              Master_Log_File: mysql-master1-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: 5ff9217012df-relay-bin.000002
                Relay_Log_Pos: 328
        Relay_Master_Log_File: mysql-master1-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 542
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 7eb61420-ce0f-11ed-aeb7-0242ac110004
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

总结

是否配置成功

1、Slave_IO_Running、Slave_SQL_Running 均为yes即可

主从复制不生效情况

2、mysql的主从复制为接入点复制,即配置完成后整体生效

主从复制搭建未完成,主库先创建表,在主库进行数据修改,则不可同步

主从复制搭建完成后,主库创建表,从库可创建

### 应注意在配置从机时,需要指定主机Position值(操作数据库Position会发生改变)

mysql> show master status;
±-------------------------±---------±-------------±------------------------------------------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±-------------------------±---------±-------------±------------------------------------------------±------------------+
| mysql-master1-bin.000001 | 154 | | sys,mysql,information_schema,performance_schema | |
±-------------------------±---------±-------------±------------------------------------------------±------------------+
1 row in set (0.00 sec)

mycat安装

下载压缩包并解压

//解压
tar -zxvf Mycat-server-1.6.7.6-release-20220524173810-linux.tar.gz
//移动mycat位置
cp mycat -r /usr/local

server.xml修改

		<user name="mycat" defaultAccount="true">
		<property name="password">123456property>
		<property name="schemas">mybatis_plus_mycatproperty>
		<property name="defaultSchema">mybatis_plus_mycatproperty>
		
		
		
		
	user>

	<user name="readonly">
		<property name="password">123456property>
		<property name="schemas">mybatis_plus_mycatproperty>
		<property name="readOnly">trueproperty>
		<property name="defaultSchema">mybatis_plus_mycatproperty>
	user>

schema.xml


DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	
	<schema name="mybatis_plus_mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
		
	schema>
	
	<dataNode name="dn1" dataHost="localhost1" database="mybatis_plus" />
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()heartbeat>
		
        <writeHost host="hostM1" url="8.131.80.107:3301" user="root"  password="123456">
            
            <readHost host="hostS1" url="8.131.80.107:3302" user="root" password="123456" /> 
        writeHost>
        
        <writeHost host="hostM2" url="8.131.80.107:3303" user="root"  password="123456">
            
            <readHost host="hostS2" url="8.131.80.107:3304" user="root" password="123456" /> 
        writeHost>
        
	dataHost>
mycat:schema>

参数详解

balance 属性

负载均衡类型,目前的取值有 3 种:

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”,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,
注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

writeType 属性

负载均衡类型,目前的取值有 3 种:

writeType=“0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,
重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType=“1”,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。switchType 属

-1 表示不自动切换。
1 默认值,自动切换。
2 基于 MySQL 主从同步的状态决定是否切换。

switchType 属性

-1 表示不自动切换
1 默认值,自动切换
2 基于 MySQL 主从同步的状态决定是否切换
心跳语句为 show slave status
3 基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1)
心跳语句为 show status like ‘wsrep%’

修改dataHost的 balance=“1”

mycat启动、关闭

启动程序
控制台启动  在目录mycat/bin 执行   ./mycat console

后台启动    在目录mycat/bin 执行   ./mycat start

后台关闭:./mycat stop

后台重启:./mycat restart

状态: ./mycat status

日志文件:mycat/logs/wrapper.log


你可能感兴趣的:(mycat读写分离,mysql,数据库,java,docker)