从零开始,通过docker实现mysql 主从复制,主主复制,图文并茂,保证可以实现!

本文详细介绍如何利用Docker快速实现MySQL主从复制及主主复制,包括环境准备、镜像选择、容器配置等关键步骤,并附带实战案例。

从零开始,通过docker实现mysql 主从复制,主主复制,图文并茂,保证可以实现!

 

   1.安装镜像

         第一次实现docker实现mysql 主从复制的时候,各种百度,各种热折腾,用了业余几天时间才实现!!现在把实现的详细过程,全部写出来,希望参对大家有所帮助。首先,准备好环境,镜像:CentOS-7-x86_64-DVD-1503-01.iso。用虚拟机安装,我的VMware Workstation14版本,安装虚拟机的过程,我不再这里讨论了。安装好后,如下:

 通过ifconfig,不能查询得ip地址,得用ip addr

然后下载xshell,通过它连接虚拟机,方便复制粘贴操作,xshell输入ssh IP地址。

2.安装docker

很简单,命令:

yum install -y docker



接下来,修改镜像地址,编辑/etc/docker/daemon.json

 

 

vim 没装,其实vi 也可以用,但vim可以对关键字加亮,所以安装vim ,命令:

 

yum -y install vim

 

Rpm方式卸载旧docker

# rpm -qa | grep -i docker  //查找已经安装docker

# rpm -e [module1][module2][.....] //卸载docker

 

yum方式卸载docker

# yum -remove //另外一种卸载docker的方法


 

退出保存。

 

启动docker:

 

[html] view plain copy

  1. <code class="language-plain">systemctl start docker //centos7及以后版本</code>  
 

[html] view plain copy

  1. <code class="language-html"># service docker start   //centos6及之前的版本</code>  
 
 

 

 

 

查看镜像

[html] view plain copy

  1. <code class="language-html">docker images</code>  

 

此时没有镜像,抓取镜像:

抓取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/moensun/centos7


再查看镜像,此时已经有镜像了:

 

 

创建docker 容器(可以根据一个镜像创建多个容器)

 

docker run -tid 镜像ID/usr/sbin/init  //centos7版本。使用/usr/sbin/init解决systemctl报错不能使用的问题
 

 

[html] view plain copy

  1. <code class="language-html">docker run -tid 镜像ID/bin/bash     //非centos7</code>  

 

 

 

 

查看容器列表

docker ps -a
 

删除镜像

# docker rmi 镜像ID

# docker rmi c862fd4c865c

 

删除容器

# docker rm 容器名称

# docker rm 

 

Docker文件拷贝(容器<=>docker)

# docker cp 原路径 docker容器路径(系统=》docker)

# docker cpMySQL-server-5.6.38-1.el7.x86_64.rpm mysql_master2:/root/

# docker cp docker容器路径 原路径(docker=》系统)

 

退出容器

# exit

 

进入容器

 

[html] view plain copy

  1. <code class="language-html">docker exec -it 容器名称 /bin/bash</code>  

 

进入容器后,注意变化,之前是root@localhst,现在变成root@容器id,也就是容器ID,现在进入容器后,你可以理解成,一个全新的linux操作系统,就像我们wondow下安装VMware Workstation后,成功通过镜像安装一台linux的道理是样的!你在容器的干什么,装什么不会影响到宿主,两个操作系统是隔离的,独立的。

退出容器的命令是:exit。

接下来,按照这样步骤,再创建一台docker 容器。就是有一台宿主操作系统,然后通过docker,再创建两个docker容器

 

3.两个docker 容器,分别安装mysql

安装mysql就三个命令就装好了:

 

# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
 
  1.  
  2. # rpm -ivh mysql-community-release-el7-5.noarch.rpm

 
  1.  
  2. # yum install mysql-community-server


wget 没有安装,现在通过命令安装wget

 

 

yum -y install wget

 

 


再次执行:

 

如下遇到下图,直接输入:y

安装完成!linux  安装mysql,就三条命令就可以了,前提条件是得有网络,在无网络情况下linux 安装mysql很麻烦也挺困难的。

 

4.开始搭建主从复制

  现在架构如下:

 

 

 

启动mysql

# systemctl start mysql

登陆mysql

mysql -uroot         //默认没有密码

设置mysql初始密码:

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

远程登陆授权

 
  1. mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

  2. mysql> flush privileges;


 

主从复制原理,是通过binlog实现的,如下图

两个docker容器的mysql都改

 

修改配置文件:vim  /etc/my.cnf

 

 

 

 

 
  1. [mysqld]

  2. server-id = 2

  3. port = 3306

  4. datadir = /var/lib/mysql

  5. socket = /var/lib/mysql/mysql.sock

  6. default-storage-engine = InnoDB

  7. log-bin = mysql-bin

  8. log-bin-index = mysql-bin.index

  9. relay-log = mysql-relay

  10. relay-log-index = mysql-relay.index

  11. expire-logs-days = 10

  12. max-binlog-size = 100M

  13. max_binlog_cache_size = 8M

  14. log-slave-updates = 1

  15. binlog_cache_size = 4M

  16.  
  17. # use MIXED binlog

  18. binlog_format = MIXED

  19. #binlog_format = ROW

  20.  
  21. #replicate-do-db = db%.%

  22. #replicate-ignore-db = mysql.%

  23.  
  24. # ignore tables

  25. replicate-wild-ignore-table = mysql.%

  26. sync_binlog = 1

  27. relay_log_recovery = 1

  28. log_slave_updates = 1

  29. skip-name-resolve

  30.  
  31. sql_mode=STRICT_TRANS_TABLES

  32.  
  33. [mysqldump]

  34. quick

  35. max_allowed_packet = 32M

 

server-id  这个千万不能跟别的mysql的配置一样,无论主机还是从机server-id不能相同

主要server-id = 2和log-bin = mysql-bin,一定要配置,其它的可以没有

查看容器IP:

 

我以mad_euclid为主机,distracted_wright为从机。

 

 

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

  2. 1. 创建同步复制的用户

  3. mysql> create user 'hdg'@'172.17.0.%' identified by 'root';

  4. 2. 给同步复制用户赋权

  5. mysql> grant replication slave on *.* to 'hdg'@'172.17.0.%' identified by 'root';

  6. mysql> flush privileges;

  7. 3. 开启binlog

  8. 配置时候注意几个坑:

  9. Replication-do-db的坑,如果多个库则使用多行Replication-do-db进行配置

  10. Replication-ignore-db的坑,如果忽略多个库则使用多行Replication-ignore-db进行配置

  11. 4. 重启mysql

  12. #systemctl restart mysql


登陆主机mysql

 

这个时候就产生binlog了,离成功不远了!

 

 
  1. 从机操作

  2. 1. Stop slave;

  3. 主从复制的最关键语句:

  4. 2. Change master to

  5. Master_host=’172.17.0.3’, //主机的IP地址

  6. Master_user=’hdg’,

  7. Master_password=’root’,

  8. Master_log_file=’mysql-bin.000001’,

  9. Master_log_pos=120;

  10. 3. Start slave;


 

 

查看主机状态:

show master status;

 

 

 

查看从机状态:

show slave status\G;

 

 

 

5.主从复制成功实现

验证,在主机上创建数据库,然后创建表,进行增删改查,会自动同步到从机上,从而实现主从复制!!哈哈,以后出去面试,可以吹牛逼了。现在互联网项目,都是读写分离,高并发解决方案之一。

在主机上创建数据库:

create database hdg;

 

 

 

至此,主从复制功能,全部实现!!!!!

主从复制实现了,主主复制也是一样的,反过来就行可以。

6.主主复制

   在之前的从机上操作:

 

 

 

在之前的主机主机上操作:

 

这样就实现主主复制了。挺简单的

7.排错

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

 

在主库,执行:

show processlist;
[root@ed434a1db697 mysql]# netstat -natp


 

昨天截图没有提交成功,今天找图补上,可能镜像ID不一样。

 

如果觉得我的文章或者代码对您有帮助,可以请我喝杯咖啡
您的支持将鼓励我继续创作!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值