docker环境下mysql配置主从复制,mycat配置读写分离

一、环境

centos7、docker、mysql5.7、mycat-1.6.7.6

二、docker环境下的主从配置

1、编辑主库的my.cnf文件

1.1 使用docker命令导出主库容器中的my.cnf到当前目录下

docker cp lucid_davinci:/etc/mysql/my.cnf .      //lucid_davinci为容器名 .代表当前目录下

1.2 修改my.cnf文件如下:

[mysqld]
  skip-grant-tables
  user=mysql

  character-set-server=utf8

  #binlog格式
  binlog-format=ROW
  #slave更新时是否记录到日志中
  log-slave-updates=true
  #启用二进制日志 
  log-bin=mysql-bin-master 
  #本机数据库 ID 标示,主从配置中ID要唯一
  server-id=1 
  #可以被从服务器复制的库, 二进制需要同步的数据库名
  binlog-do-db=test 
  #不可以被从服务器复制的库
  binlog-ignore-db=mysql

1.3 将my.cnf导入容器并重启

docker cp my.cnf suspicious_bose:/etc/mysql/my.cnf 
docker restart suspicious_bose

 

2、在主库中添加slave用户和密码

docker exec -it suspicious_bose /bin/bash  //进入容器

mysql -uroot -p                            //登陆mysql

CREATE USER 'resp'@'%' IDENTIFIED BY '*****';   //创建用户

GRANT REPLICATION SLAVE ON *.* TO 'resp'@'%';  //给用户赋权

注:配置主从前,需保证同步的数据库完全一致

 

 3、编辑主库的my.cnf文件

       3.1 步骤与主库相同,修改内容为:

[mysqld]
  skip-grant-tables
  user=mysql

  character-set-server=utf8

  #本机数据库 ID 标示,主从配置中ID要唯一
  server-id=2 
 

  [client]

  default-character-set=utf8

  [mysql]

  default-character-set=utf8

bind-address = 0.0.0.0

 3.2 进入从库容器并登陆MySQL

docker exec -it lucid_davinci /bin/bash   // 进入容器

mysql -uroot -p                           // 登陆mysql

change master to master_host='***.**.**.***',master_user='slave',master_password='***'; // 设置主库的host和账号密码

start slave;                               // 开启主从模式

show slave status\G;                     // 查看状态
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.31.61
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin-master.000003
          Read_Master_Log_Pos: 450
               Relay_Log_File: node1-relay-bin.000004
               Relay_Log_Pos: 677
        Relay_Master_Log_File: mysql-bin-master.000003
              Slave_IO_Running: Yes
              Slave_SQL_Running: Yes

  当Slave_IO_Running: Yes 、 Slave_SQL_Running: Yes时,代表主从配置完成

参数 作用
Slave_IO_Running 负责与 Master 主机的 IO 通信
Slave_SQL_Running 负责自己的 slave mysql 进程

4、查看主库主从同步状态

[root@master ~]# mysql -u root -p

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

mysql> show processlist\G
*************************** 1. row ***************************
     Id: 8
   User: slave
   Host: node1:56922
     db: NULL
Command: Binlog Dump
   Time: 143
  State: Master has sent all binlog to slave; waiting for more updates
   Info: NULL

5、测试主从同步

5.1 在主服务器模拟程序插入数据

[root@master ~]# mysql -u root -p
mysql> use test;
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> insert into test1 values(1,'man')
    -> ;
Query OK, 1 row affected (0.00 sec)

mysql> select * from test1;
+------+------+
| id   | name |
+------+------+
|    1 | man  |
+------+------+
1 row in set (0.00 sec)


5.2 切换到从库进行查看

[root@slave~]# mysql -u root -p
mysql> select * from test.test1;
+------+------+
| id   | name |
+------+------+
|    1 | man  |
+------+------+
1 row in set (0.00 sec)

至此,主从配置完成

三、mycat实现读写分离

1、mycat下载安装

1.1 mycat是用java写的,所以需要下载安装openjdk

# yum源安装
yum search jdk

yum -y install java-1.8.0-openjdk.x86_64

# 查看jsk版本
java -version

1.2 安装mycat

$ cd /usr/local/src/
$ wget http://dl.mycat.org.cn/1.6.7.6/20211016233725/Mycat-server-1.6.7.6-release-20211016233725-linux.tar.gz
#mysql8的驱动
$ wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar

# 解压
# 解压
$ tar -zxvf Mycat-server-1.6.7.6-release-20211016233725-linux.tar.gz

# 改名(可忽略)
$ mv mycat/ mycat-1.6.7.6

# 移动到/usr/local目录
$ mv mycat-1.6.7.6/ /usr/local/

#替换mysql-connector-java-8.0.18.jar
$ cd /usr/local/mycat-1.6.7.6/lib
$ mv mysql-connector-java-8* /tmp
$ mv /usr/local/src/mysql-connector-java-8.0.18.jar .

2、配置mycat

# 进入配置文件目录,并查看文件
$ cd /usr/local/mycat-1.6.7.6/conf

# 修改server.xml
$ vi server.xml
 # 修改底部管理员用户和只读用户信息及密码,配置schemas
 
    123456
    TESTDB
    TESTDB



    user
    TESTDB
    true
    TESTDB


  
# 修改schema.xml
vi schema.xml

# 替换为以下内容



    

    #此处的test为需要同步的库
    
    
        select user()

        #localhost替换为主从服务器公网地址,账号密码为ssh登陆方式
        
            
        
        
    

  

  dataHost节点中的balance(负载均衡类型)属性值共四种情况:

  • 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"
      所有读请求随机的分发到readhost 执行,writerHost不负担读压力

3、启动并测试(一主一从)

# 启动
cd /usr/local/mycat-1.6.7.4/bin/
./mycat start

# 查看启动状态
./mycat status


# 使用工具连接
# IP:
# 端口:8066
# 用户名:root
# 密码:123456

# 创建测试表
create table t_data(`id`int not null primary key auto_increment, `value` varchar(255));

# 插入一条记录
insert into t_data(`value`) values('C3Stones');

# 查询
select * from t_data;

二主二从下,两主互为备份。

 

 

你可能感兴趣的:(docker,mysql,容器)