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

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


原创  2018年01月02日 14:06:55
  • 46

   1.安装镜像

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

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

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

2.安装docker

很简单,命令:
[plain]  view plain  copy
  1. yum install -y docker  


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


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

[plain]  view plain  copy
  1. yum -y install vim  



退出保存。

启动docker:

[html]  view plain  copy
  1. systemctl start docker //centos7及以后版本  
[html]  view plain  copy
  1.   

# service docker start   //centos6及之前的版本



查看镜像

[html]  view plain  copy
  1. docker images  



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

抓取镜像

[html]  view plain  copy
  1. docker pull registry.cn-hangzhou.aliyuncs.com/moensun/centos7  
从零开始,通过docker实现mysql 主从复制,图文并茂,保证可以实现!_第2张图片

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


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

[html]  view plain  copy
  1. docker run -tid 镜像ID/usr/sbin/init  //centos7版本。使用/usr/sbin/init解决systemctl报错不能使用的问题  
[html]  view plain  copy
  1.   

docker run -tid 镜像ID/bin/bash     //非centos7


查看容器列表

[html]  view plain  copy
  1. docker ps -a  


进入容器

[html]  view plain  copy
  1. docker exec -it 容器名称 /bin/bash  


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

退出容器的命令是:exit。

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



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

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

[html]  view plain  copy
  1. # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm  
  2. # rpm -ivh mysql-community-release-el7-5.noarch.rpm  
  3. # yum install mysql-community-server  

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

[html]  view plain  copy
  1. yum -y install wget  



再次执行:

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



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

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

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

4.开始搭建主从复制

  现在架构如下:

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


启动mysql

# systemctl start mysql

登陆mysql

mysql -uroot         //默认没有密码

设置mysql初始密码:

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

远程登陆授权

[html]  view plain  copy
  1. mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;  
  2. mysql> flush privileges;  
从零开始,通过docker实现mysql 主从复制,图文并茂,保证可以实现!_第6张图片


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


两个docker容器的mysql都改

[html]  view plain  copy
  1. 修改配置文件:vim  /etc/my.cnf  



[html]  view plain  copy
  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:

从零开始,通过docker实现mysql 主从复制,图文并茂,保证可以实现!_第7张图片从零开始,通过docker实现mysql 主从复制,图文并茂,保证可以实现!_第8张图片



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


[html]  view plain  copy
  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. #sysctemctl restart mysql  

登陆主机mysql

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

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


[html]  view plain  copy
  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;  

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


查看主机状态:

[html]  view plain  copy
  1. show master status;  

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


查看从机状态:

[html]  view plain  copy
  1. show slave status\G;  

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




5.大功靠成

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

在主机上创建数据库:

[html]  view plain  copy
  1. create database hdg;  

从零开始,通过docker实现mysql 主从复制,图文并茂,保证可以实现!_第13张图片从零开始,通过docker实现mysql 主从复制,图文并茂,保证可以实现!_第14张图片


从零开始,通过docker实现mysql 主从复制,图文并茂,保证可以实现!_第15张图片从零开始,通过docker实现mysql 主从复制,图文并茂,保证可以实现!_第16张图片



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

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

6.排错

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

在主库,执行:
[html]  view plain  copy
  1. show processlist;  
[html]  view plain  copy
  1. [root@ed434a1db697 mysql]# netstat -natp  

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

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

你可能感兴趣的:(从零开始,通过docker实现mysql 主从复制,图文并茂,保证可以实现!)