docker配置mysql主从

  1. 拉取mysql镜像到本地

    docker pull mysql

  2. 创建容器并且配置文件映射关系

    1. 创建映射文件:

      mkdir /usr/local/software/mysql
      cd /usr/local/software/mysql
      mkdir 3306/conf 3306/data
      mkdir 3310/conf 3310/data
      mkdir 3311/conf 3311/data
      
    2. 配置/conf目录下的my.cnf文件

      [mysqld]
      pid-file        = /var/run/mysqld/mysqld.pid
      socket          = /var/run/mysqld/mysqld.sock
      datadir         = /var/lib/mysql
      secure-file-priv= NULL
      default_authentication_plugin=mysql_native_password
      
      # Custom config should go here
      !includedir /etc/mysql/conf.d/
      
      server-id=200
      log_bin=master-bin
      binlog_format=row
      
    3. 创建容器并且运行:

      # 这里注意docker容器里面的mysql的my.cnf的位置,在第10行/etc/my.cnf,或者/etc/mysql/my.cnf
      # 建议自己先创建一个mysql容器进入docker里面的/etc、/etc/mysql查看是否有my.cnf文件,这里是在/etc下
      
      docker run -it \
      --name mysql_3306 \
      --privileged \
      -p 3306:3306 \
      --network wn_docker_net \
      --ip 172.18.12.2 \
      -v /usr/local/software/mysql/3306/conf/my.cnf:/etc/my.cnf \
      -v /usr/local/software/mysql/3306/data:/var/lib/mysql \
      -v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
      -e MYSQL_ROOT_PASSWORD=123456 \
      -d mysql
      
    4. 进入容器进行配置主服务器

      docker exec -it mysql_3306 bash
      mysql -uroot -p123456
      # 创建与从服务器进行通信的用户
      create user 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
      GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
      flush privileges;
      # 查看主服务器(master)的状态
      show master status;
      # 拿到第一列master-bin后面的数字和第二列的数字
      # 例: master-bin.000003 |      840 | 
      # 拿到创建时指定的ip:172.18.12.2
      
    5. 配置从服务器

      # 同2.*
      # 1. 配置 slave01(3310)的  my.cnf文件
      ...
      # 这里不同
      server-id=201
      log-bin=slave-01-bin
      relay_log=mysql-relay-bin
      read-only=1
      
      # 配置 slave02(3311)的  my.cnf文件
      ...
      # 这里不同
      server-id=202
      log-bin=slave-02-bin
      relay_log=mysql-relay-bin
      read-only=1
      
      # 2. 创建容器(3310)
      docker run -it \
      --name mysql_3310 \
      --privileged \
      -p 3310:3306 \
      --network wn_docker_net \
      --ip 172.18.12.3 \
      -v /usr/local/software/mysql/3310/conf/my.cnf:/etc/my.cnf \
      -v /usr/local/software/mysql/3310/data:/var/lib/mysql \
      -v /usr/local/software/mysql/3310/mysql-files:/var/lib/mysql-files \
      -e MYSQL_ROOT_PASSWORD=123456 \
      -d mysql
      
      #  创建容器(3311)
      docker run -it \
      --name mysql_3311 \
      --privileged \
      -p 3311:3306 \
      --network wn_docker_net \
      --ip 172.18.12.4 \
      -v /usr/local/software/mysql/3311/conf/my.cnf:/etc/my.cnf \
      -v /usr/local/software/mysql/3311/data:/var/lib/mysql \
      -v /usr/local/software/mysql/3311/mysql-files:/var/lib/mysql-files \
      -e MYSQL_ROOT_PASSWORD=123456 \
      -d mysql
      
    6. 将从服务器(slave)与主服务器(master)关联

      # 进入salve01(3310)
      docker exec -it mysql_3310 bash
      mysql -uroot -p123456
      # 关联master,看master的参数,ip master-bin  position
      change master to master_host='172.18.12.2', master_user='slave',master_password='123456',MASTER_LOG_FILE='master-bin.000003',MASTER_LOG_POS=840;
      # 开启slave
      start slave;
      # 查看salve状态 
      show slave status \G
      # 找到这两个参数,后面为yes即可
      # Slave_IO_Running: Yes
      # Slave_SQL_Running: Yes
      
      # salve02(3011)同理
      
    7. 从服务器(slave)的权限为只读,所以需要创建slave的只读账号

      # 进入mysql里面,以后登录就用这个账号而不是root
      create user 'suser'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
      GRANT SELECT  ON *.* TO 'suser'@'%';
      flush privileges;
      
    8. 测试:slave都登录只读账号,然后在master创建数据库,刷新查看slave里面有没有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值