zoukankan      html  css  js  c++  java
  • 使用docker部署mysql主从复制集群

    一、环境搭建

    虚拟机环境:centos7 IP:192.168.37.134  用户名:root   密码:123

    启动3个容器,一个是master,端口是3307,另外两个是slaver,端口是3308和3309

    docker pull mysql:5.7
    
    docker run -p 3307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
    docker run -p 3308:3306 --name mysql-slaver1 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
    docker run -p 3309:3306 --name mysql-slaver2 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7

     

     二、配置mysql-master

    进入mysql-master容器,修改/etc/mysql/my.cnf,添加

    [mysqld]
    server-id=3307  ##自定义id号,不要重
    log-bin=mysql-bin  ##开启二进制日志

     

     注意:在使用vim时,可能会出现not found,需要apt-get install vim

    修改好my.cnf后,需要重启一下mysql,重启一下mysql-master容器,重新进入容器

    service mysql restart
    docker start mysql-master
    docker exec -it mysql-master /bin/bash

     进入容器后,登录mysql,为slaver分配一个账号

    CREATE USER 'slave'@'%' IDENTIFIED BY '123abc';  ##用户名是slave,密码是123abc
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';  ##指定访问权限

    查看当前主机状态,注意:查看完状态后就不要再进行其他的操作了,slaver会引用mster的Position编码,每次操作Position都会变。

    到这里,master就配置完成了,等待slaver的连接。

     三、配置mysql-slaver

    以mysql-slaver1为例

    进入容器和配置master一样

    修改/etc/mysql/my.cnf文件,添加

    [mysqld]
    server-id=3308  ##id号,自定义,不要重就行
    log-bin=mysql-slave-bin   ##开启二进制日志功能
    relay_log=edu-mysql-relay-bin  ##配置中继日志

    然后是重启mysql,重启容器,重新进入容器,登录mysql进行下一步配置

    service mysql restart
    docker start mysql-slaver1
    docker exec -it mysql-slaver2 /bin/bash
    mysql -u root -p

     执行命令进行master的连接,需要配置master的ip,用户名,密码,日志文件和当前版本号

    change master to master_host='192.168.37.134', master_user='slave', master_password='abc123', master_port=3307, master_log_file='mysql-bin.000001', master_log_pos= 789, master_connect_retry=30;

    查看连接状态

    show slave status G;

    可以看到当前状态是未开启主从复制,接下来开启,再查看状态

    start slave;
    show slave status G;

    当看到这个的时候,说明我们的配置出现了问题,原因是密码写错了,出现这种情况一般就是在连接配置的时候出现了问题。现在改回来重新执行如下代码

    stop slave;  #修改之前需要先stop一下
    change master to master_host='192.168.37.134', master_user='slave', master_password='123abc', master_port=3307, master_log_file='mysql-bin.000001', master_log_pos= 789, master_connect_retry=30;
    start slave;
    show dlave status G;

    当看到两个Yes的时候,说明slave配置成功了,并且已经开启了主从复制。

    mysql-slaver2配置相同。

    四、测试

    mysql-master上创建一个数据库,创建表,插入数据

    create database test charset utf8;
    use test;
    create table user(id int(11),name varchar(255))charset utf8;
    insert into user(id,name) values(100,'tom'),(101,'jerry');

    在其中一台mysql-slaver1上查看数据

    五、说明一下

    1. mysql是按/etc/my.cnf

    -> /etc/mysql/my.cnf

    -> /usr/local/mysql/etc/my.cnf

    -> ~/.my.cnf的顺序读取配置文件的。

    如果几个配置文件中都有相同的参数,mysql会以读取的最后一个文件配置参数为准。

    2. 集群结构

    当前的结构是slaver1和slaver2作为master的从机,需要在slaver1和slaver2上配置master的相关信息。

    也可以使用串行结构

    只不过是slaver2把slaver1认为是master,配置的是slaver1的相关信息

    在spring项目中,可以配置两个数据源,一个读,一个写。然后DAO层的类分别注入不同的数据源,产生读的bean和写的bean,service调用的时候注入指定的bean就可以啦。

     

  • 相关阅读:
    .NET Framework Execution Was Aborted By Escalation Policy
    语句获取作业属性、历史记录
    Login failed知多少
    数据库代理错误日志
    微信小程序资料
    时间进度条,根据时间,显示任务进度条
    两个select 左右添加,上下移动
    图片轮播无缝接
    CSS3简单的栅格系统
    JavaScript DOM节点和文档类型
  • 原文地址:https://www.cnblogs.com/wwzyy/p/11060400.html
Copyright © 2011-2022 走看看