mysql实现主从复制(docker环境)

原文链接:https://blog.csdn.net/fyihdg/article/details/78951357

本文是学习了以上链接文章之后,自己总结了一遍,便于以后查看。

一、拉取镜像、创建2个容器

1.拉取镜像centos7,作为安装运行mysql的环境。
docker pull registry.cn-hangzhou.aliyuncs.com/moensun/centos7
2.查询镜像ID
docker images
1210894-29edc2b7e9aedcf0.png
查询镜像ID
3.创建两个空容器

如果是centos7需要加上--privileged 和 /usr/sbin/init,解决systemctl报错不能使用的问题

docker run --privileged -itd --name 容器名称 镜像ID /usr/sbin/init

非centos7,使用命令如下

docker run -tid 镜像ID /bin/bash
1210894-83cc90a4957af58c.png
a.png

二、在容器中安装mysql

两个容器分别执行以下操作

1.进入容器
docker ps //查询容器信息
docker exec -it 容器ID或容器名称 /bin/bash  //进入容器命令
2.安装mysql

依此执行以下命令

yum -y install wget
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server

如遇到以下提示,输入y


1210894-dedb47b9ec417ad4.png
b.png

三、搭建主从复制

1210894-3515064847b97af0.png
架构图
1.启动mysql、登录设置mysql

这一个步骤,两个容器都需要执行

启动mysql、登录

systemctl start mysql
mysql -uroot

设置mysql密码,不想设置可以跳过这一步

mysql> set password = password(‘你的密码’)

远程登陆授权

mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
mysql> flush privileges;
2. 修改配置,实现主从复制
1)修改配置文件

两个容器都需要修改,但server-id两个容器不能设置相同数字

vi  /etc/my.cnf

添加以下配置

server-id=1
port=3306
log-bin=mysql-bin
1210894-b19feee6f080c698.png
/etc/my.cnf文件配置

重启mysql

systemctl restart mysql
2)查询两个容器ip
1210894-a1c3dbe17c7d82c2.png
g.png
3) 主机配置

主从复制过程(在主机上操作):

本例子中以容器名为mysql-master作为主机

    docker exec -it mysql-master /bin/bash //进入主机容器
    mysql //登录mysql
  1. 创建同步复制的用户

    mysql> create user 'hdg'@'172.17.0.%' identified by 'root';
    
  2. 给同步复制用户赋权

    mysql> grant replication slave on *.* to 'hdg'@'172.17.0.%' identified by 'root';
    
  3. 开启binlog

    mysql> flush privileges;
    

    配置时候注意几个坑:
    Replication-do-db的坑,如果多个库则使用多行Replication-do-db进行配置
    Replication-ignore-db的坑,如果忽略多个库则使用多行Replication-ignore-db进行配置

  4. 重启mysql

    systemctl restart mysql
    
1210894-430925750fe53fc5.png
e.png

登陆主机mysql
这个时候就产生binlog了,离成功不远了!


1210894-219a116cfb65bc3b.png
f.png
4)从机配置

本例子中以容器名为mysql-slave作为主机

    docker exec -it mysql-slave /bin/bash //进入主机容器
    mysql //登录mysql

从机操作
主从复制的最关键语句:

Stop slave;
Change master to
     Master_host='172.17.0.13', //主机的IP地址
     Master_user='hdg',
     Master_password='root',
     Master_log_file='mysql-bin.000001',
     Master_log_pos=120;
Start slave;
1210894-2f8df17d949d1169.png
查询主机状态

在主机中查看主机状态:

show master status;
1210894-3dfaade6d7812a1f.png
i.png

在从机中查看从机状态

show slave status\G;
1210894-d1cb54ae43ac87f3.png
查看从机状态
3.检测主从复制

验证:如果在从机上创建库,进行增删改操作,会同步到从机

在主机上创建新库hdg,可以看到从机上也自动创建了库hdg


1210894-6351b129e5ba4268.png
验证主从查询

在主机库hdg中添加表hdg,同时添加一条数据,可以看到从机上也自动更新


1210894-a7704ad081262e3c.png
验证主从复制

四、搭建主主复制

1.在之前的从机上进行主机操作
1210894-7021408b7fae4dc4.png
在从机上进行主机操作
1210894-a95995b5175453e5.png
查询新主机信息
2.在之前的主机上进行从机操作
1210894-e7dff3977e9a0a6f.png
在之前的主机上进行从机操作
3.检测如主从检测

五、 排错

可能有些小伙伴没有成功。这里写个检查错误的方法:

在主库,执行:

show processlist;
[root@ed434a1db697 mysql]# netstat -natp
1210894-59ed0bb499320cf4.png
p.png

猜你喜欢

转载自blog.csdn.net/weixin_34006468/article/details/87132594