mysql主从复制逻辑:

1.从库执行start slave 开启主从复制。

2.从库请求连接到主库,并且指定binlog文件以及位置后发出请求。

3.主库收到从库请求后,将信息返回给从库,除了信息日志外,还包含新的文件名称以及下一个更新节点。

4.从库接收到主库发送的信息后,会将信息更新至自身的relay log中,并且将新的文件名记录到master-info中。

5.从库SQL线程会检测本地relay-log,如有变化,会将信息解析为SQL可执行语句并且执行该语句,同时在relay-log.info中记录当前文件名以及位置点。

mysql 主从复制操作方法:
主库:
1.保证bin-log的开启(可在mysql中利用 show variables where variable_name like 'bin%' 中查看,其中栏位值为ON则为开启,OFF则为关闭 bin-log具体逻辑取决于my.cnf设定值中的bin-log)
2.新建用户并且设定其为replication slave账户(grant replication slave on db_name.tb_name to 'user_name'@'host_name' identified by 'password';)
3.对主库锁表只读(flush table with read lock;)
4.收集master的信息,包括(replication slave username and password , master status filename and master status position(get master status: show master status ) )
5.导出主库数据,解锁(unlock tables;)

从库:
1.将主库数据导入从库
2.将从库连接主库(change master to master_host='host_name',master_port='master_port',master_user='master_user',paster_password='master_password',master_log_file='master_status_log_file',master_log_pos='master_status_log_position');
3.开启主从复制,start slave; 查看从库状态是否OK(show slave status\G;)如果确定状态为NO时,则需要重新启动master和slave,再次检查状态是否OK

0.创建新的docker网络,用于主从服务器指定ip

 liwangdeMacBook-Air:~ liwang$ docker network create --subnet= mynetwork

1.安装主服务器

1.1 利用docker run一个新的centos容器,并且指定其ip地址,将数据库文件挂载至宿主机上

 liwangdeMacBook-Air:~ liwang$ docker run -i -t --name mysql_master --net mynetwork --ip : -v /Users/liwang/docker/mysql_data:/data centos /bin/bash

1.2 下载mysql二进制包进行安装配置

mysql下载路径:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

下载完毕后,利用docker cp将包copy至容器内

 liwangdeMacBook-Air:Downloads liwang$ docker -linux-glibc2.-x86_64.tar.gz `docker inspect -f {{.ID}} mysql_master`:/soft

安装步骤:

  创建用户:
 [root@76ffc9a23bf6 /]# useradd mysql -s /sbin/nologin -M
  解压:
 [root@76ffc9a23bf6 soft]# -linux-glibc2.-x86_64.tar.gz
  初始化:
 [root@76ffc9a23bf6 mysql--linux-glibc2.-x86_64]# bin/mysqld --initialize --basedir=/soft/mysql--linux-glibc2.-x86_64 --datadir=/data --user=mysql
  启动mysql:
 [root@76ffc9a23bf6 mysql--linux-glibc2.-x86_64]# /soft/mysql--linux-glibc2.-x86_64/bin/mysqld_safe --user=mysql &

当第一个容器能够顺利打开mysql时,利用docker commit将容器制作成镜像,以便slave直接run出来即可

 liwangdeMacBook-Air:Downloads liwang$ docker commit `docker ps -a | grep mysql_master | awk '{print $1}'` generil_mysql

利用generil_mysql,将run slave

 liwangdeMacBook-Air:Downloads liwang$ docker run -i -t --name mysql_slave --net mynetwork --ip : -v /Users/liwang/docker/mysql_data_3307:/data generil_mysql /bin/bash

3.配置主从复制

1.主库配置

1.1 保证my.cnf中有log-bin

 [root@76ffc9a23bf6 /]# grep "log-bin" /etc/my.cnf
     log-bin = /data/mysql-bin

  mysql 检查是否开启

 mysql> show variables where variable_name like 'log_bin';
 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | log_bin       | ON    |
 +---------------+-------+
  row in set (0.00 sec)

为ON则开启,为OFF则为关闭

1.2 创建从库连接的复制用户

 mysql> grant replication slave on *.* to 'slave_copy'@'%' identified by 'mysql';
 Query OK,  rows affected,  warning (0.10 sec)

 mysql> show grants for 'slave_copy';
 +----------------------------------------------------+
 | Grants for slave_copy@%                            |
 +----------------------------------------------------+
 | GRANT REPLICATION SLAVE ON *.* TO 'slave_copy'@'%' |
 +----------------------------------------------------+
  row in set (0.00 sec)

 mysql> 

1.3查看目前主服务器的状态

 mysql> show master status;
 +------------------+----------+--------------+------------------+-------------------+
 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +------------------+----------+--------------+------------------+-------------------+
   |              |                  |                   |
 +------------------+----------+--------------+------------------+-------------------+
  row in set (0.00 sec)

 mysql> 

1.4 做主从复制前,最好将主数据库进行备份,可用mysql> flush table with read lock; 然后可备份,备份完毕后可利用mysql> unlock tables;恢复可写

2.从库配置

2.1 测试ping主服务器,以及利用mysql工具连接主服务器,测试没问题

 [root@f325480c1179 /]#
 PING () bytes of data.
  bytes from  ttl= time=0.105 ms
  bytes from  ttl= time=0.231 ms
  bytes from  ttl= time=0.120 ms
  bytes from  ttl= time=0.170 ms

 --- 172.18.0.2 ping statistics ---
  packets transmitted,  received, % packet loss, time 3120ms
 rtt min/avg/max/mdev = 0.105/0.156/0.231/0.050 ms
 [root@f325480c1179 /]# /soft/mysql--linux-glibc2.-x86_64/bin/mysql -ulw -h172. -pwl
 mysql: [Warning] Using a password on the command line interface can be insecure.
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection
 Server version: -log MySQL Community Server (GPL)

 Copyright (c) , , Oracle and/or its affiliates. All rights reserved.

 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.

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

 mysql> exit
 Bye
 [root@f325480c1179 /]# 

2.2 利用change master连接至主服务器

 mysql> change master to
     -> master_host='172.18.0.2',
     ,
     -> master_user='slave_copy',
     -> master_password='mysql',
     -> master_log_file='mysql-bin.000005',
     ;
 Query OK,  rows affected,  warnings (0.15 sec)

2.3 开启主从复制并且检查状态是否正常

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

运行mysql> show slave status; 可以查看状态信息是否OK,其Slave_IO_Running: Yes, Slave_SQL_Running: Yes,Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

则为OK,如果遇到从库两个线程为NO的情况下,可以重启一下master and slave服务器,再次check是否为YES,

4.测试

在主库上新增一个用户,返回从库时,同时新增了用户,则证明搭建OK。



docker 搭建 MYSQL并且完成主从复制的更多相关文章

  1. Docker搭建MySQL主从复制

    Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...

  2. MySQL(14)---Docker搭建MySQL主从复制(一主一从)

    Docker搭建MySQL主从复制(一主一从) 上一篇博客写了MYSQL主从复制原理 : MySQL(13)---MYSQL主从复制原理 这篇我们来写 Docker搭建MYSQL主从复制(一主一从) ...

  3. Docker搭建MySQL的PXC集群

    原文:Docker搭建MySQL的PXC集群 一.简介 PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galer ...

  4. 基于Docker搭建MySQL主从复制

    摘要: 本篇博文相对简单,因为是初次使用Docker,MySQL的主从复制之前也在Centos环境下搭建过,但是也忘的也差不多了,因此本次尝试在Docker中搭建. 本篇博文相对简单,因为是初次使用D ...

  5. Docker搭建 MySQL 主从复制

    为什么选 Docker 搭建主从复制需要两个以上的MySQL, 使用 Docker 非常方便.如果以前没用过,找个简单的文档看看,熟悉一下命令. 搭建过程 1.下载镜像 docker pull mys ...

  6. 基于 Docker 搭建 MySQL 主从复制

    本篇博文相对简单,因为是初次使用Docker,MySQL的主从复制之前也在Centos环境下搭建过,但是也忘的也差不多了,因此本次尝试在Docker中搭建. 根据网上教程走还是踩了一些坑,不过所幸最终 ...

  7. Docker搭建MySQL服务

    Docker开源镜像 前面我们已经安装好了Docker,也简单了解了Docker.那么我们可以尝试搭建一个MySQL服务. 要搭建服务就要启动服务容器,要创建容易就要有镜像,Docker提供了一个类似 ...

  8. Docker搭建Mysql容器

    转载自:http://blog.csdn.net/Mungo/article/details/78521832?locationNum=9&fps=1 本文介绍如何使用docker迅速搭建My ...

  9. 1021 docker搭建mysql、网络模式、grid

    1.搭建并连接mysql服务 1.1.mysql官方命令 https://hub.docker.com/_/mysql/ #下载mysql镜像: docker pull mysql #启动mysql: ...

随机推荐

  1. js sort

    排序算法 比较的过程必须通过函数抽象出来.通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关 ...

  2. PAT 1045 快速排序(25)(STL-set+思路+测试点分析)

    1045 快速排序(25)(25 分) 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分 ...

  3. CF Round #516 (Div. 2, by Moscow Team Olympiad)

    前言:依旧菜,\(A\)了\(4\)题,不过这次上蓝了挺开心的. A. Make a triangle! Description 给出\(3\)根木棍,希望用它们拼成三角形,可以将其中的某些木棍增长, ...

  4. UISwitch开关控件属性介绍以及获取开关状态并做出响应

    (1)UISwitch的大小也是固定的,不随我们frame设置的大小改变:也是裁剪成圆角的,设置背景就露马脚发现背景是矩形. (2)UISwitch的背景图片设置无效,即我们只能设置颜色,不能用图片当 ...

  5. imaplib.error: command: SEARCH => got more than 10000 bytes

    imaplib.error: command: SEARCH => got more than 10000 bytes 使用IMAPLIB进行标记邮件状态的时候,在 typ,data=M.sea ...

  6. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  7. APICloud开发

    2018-06-16 今天在看房角石APPIOS版本闪退的问题,后来定位到了 elements.find("video").attr("preload", &q ...

  8. Linux下安装启动多个Mysql

    网上找了N多资料,没有一个可以顺利成功的,郁闷,可能是水平有限吧...!本人经过不断的研究.测试,完整实现Linux下启动两台MySQL,而且对mysql有了更深入的了解...废话不多说,走着! 步骤 ...

  9. kbmmw 中JSON 中使用SQL 查询

    前面讲到了kbmmw 的JSON 对象操作,如何快速的查找JSON 中的值? 一种办法就是通过遍历的方法,其实在kbmmw 还有一种灵活的查询方式, 就是通过SQL 方式查询JSON 中的值.也就是说 ...

  10. GUI的优化操作/添加背景图片等

    一.背景图片的添加这是JAVA中添加背景图片的方式,基本思路先建立一个Label标签,然后建立一个层次的布局,将label标签添加到最下面去. ImageIcon image=new ImageIco ...