• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
钗的php生涯
博客园    首页    新随笔    联系   管理    订阅  订阅
docker 容器的mysql主从复制

一.

1.首先拉取docker镜像,我们这里使用5.7版本的mysql:

  docker pull mysql:5.7

2.分别启动主从两个容器:

     docker run -p 3339:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7(从)

    docker run -p 3339:3306 --name mysqli -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7(主)

3.

此时可以使用Navicat等工具测试连接mysql

 

Docker容器

  一 .配置主容器(mysqli):

       ① 通过docker exec -it 627a2368c865 /bin/bash命令进入到Master容器内部

       ②    cd /etc/mysql切换到/etc/mysql目录下,然后vi my.cnf对my.cnf进行编辑。此时会报出bash: vi: command not found,需要我们在docker容器内部自行安装vim。使     用  , apt-get install vim命令安装vim

    ③ 会出现以下问题:

 

 Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package vim

 

 

 

          解决方式:执行apt-get update,然后再次执行apt-get install vim即可成功安装vim

④ 使用vim编辑my.cnf,在my.cnf中添加:

     

  [mysqld]

## 同一局域网内注意要唯一

        server-id=100

## 开启二进制日志功能,可以随便取(关键)

        log-bin=mysql-bin

 

 

 

⑤.使用service mysql restart完成重启

     需要docker start mysql-master启动容器

 

⑥  

下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

 

 

二.配置从数据库:

    ①  在my.cnf中添加相同配置(注意server-id改为101)

 

 

[mysqld]

 

## 同一局域网内注意要唯一

 

        server-id=101

 

## 开启二进制日志功能,可以随便取(关键)

 

        log-bin=mysql-bin

 

②   重启mysql服务和docker容器,操作和配置Master(主)一致

③   在mysqli(主容器)进入mysql,执行show master status

 

④   通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

 

⑤ 在mymysql(从容器)中进入 mysql,执行

(

//用户名 密码与 一(6中密码一致)

)

change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;

 

   可能报错

 解决方式:停止从服务器

⑥ show slave status \G;

使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;。

⑦ 

      报错原因

  1. 网络不通

    检查ip,端口

  2. 密码不对

    检查是否创建用于同步的用户和用户密码是否正确

  3. pos不对

    检查Master的 Position

⑧ 使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;。

 

三. 在主服务器创建数据库,检查是否成功

 

主

 

 从

 

posted on 2019-04-15 19:15  php钗  阅读(195)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3