没有夸大标题哈,能够成功的,实测后发文
本文主要讲怎么用Docker部署Mysql的主从复制,看起来很长,实际非常简单的,看一遍,立马就能懂的。
直接CV也能搭建起来,莫慌。
我们一起加油!!!

地点:泰山日出
一、拉取镜像

相关命令:
- 查看镜像:
docker images
二、启动镜像
先启动mysql01容器:(即之后的主机)
1 |
docker run <span>-</span>d <span>-</span>p <span>3310</span><span>:</span><span>3306</span> <span>-</span>v <span>/</span>home<span>/</span>mysql<span>/</span>node<span>-</span><span>1</span><span>/</span>config<span>:</span><span>/</span>etc<span>/</span>mysql<span>/</span> <span>-</span>v<span>/</span>home<span>/</span>mysql<span>/</span>node<span>-</span><span>1</span><span>/</span>data<span>:</span><span>/</span><span>var</span><span>/</span>lib<span>/</span>mysql <span>-</span>e <span>MYSQL_ROOT_PASSWORD</span><span>=</span><span>123456</span> <span>--</span>name mysql01 mysql<span>:</span><span>5.7</span><span aria-hidden="true"><span></span></span> |

再启动mysql02容器:(即之后的从机)
1 |
docker run <span>-</span>d <span>-</span>p <span>3311</span><span>:</span><span>3306</span> <span>-</span>v <span>/</span>home<span>/</span>mysql<span>/</span>node<span>-</span><span>2</span><span>/</span>config<span>:</span><span>/</span>etc<span>/</span>mysql<span>/</span> <span>-</span>v<span>/</span>home<span>/</span>mysql<span>/</span>node<span>-</span><span>2</span><span>/</span>data<span>:</span><span>/</span><span>var</span><span>/</span>lib<span>/</span>mysql <span>-</span>e <span>MYSQL_ROOT_PASSWORD</span><span>=</span><span>123456</span> <span>--</span>name mysql02 mysql<span>:</span><span>5.7</span><span aria-hidden="true"><span></span></span> |

命令解释:
- -d: 后台运行容器,并返回容器ID
- -p 3311:3306 :将容器的3306端口映射到宿主机3310端口
- -e MYSQL_ROOT_PASSWORD=123456 :配置数据库连接密码
- -v /home/mysql/node-2/config:/etc/mysql/ :将配置文件夹挂载到宿主机
- –name mysql01(02):将容器命名为 mysql01(02)
相关命令:
1 |
docker ps <span>-</span>a #查看全部容器(运行中加未运行的)<span aria-hidden="true"><span></span></span> |

都已正常启动。
三、连接测试
搭建过程中,为了减少错误的产生,就多了这一步的测试。
我们可以直接拿Navicat
来进行连接测试。
注意事项
: 记得打开安全组,虚拟机的话记得处理好防火墙。(另外我这里是3310,可根据自己需要更改端口)

测试启动成功后,我们再来进行下一步。
四、编写主从复制配置文件
之前我们启动的时候写了这句-v /home/mysql/node-1/config:/etc/mysql/
,将mysql 的配置文件夹和宿主机的文件夹挂载起来的。
那么我们就可以直接在宿主机下的/home/mysql/node-1/config/
编写配置文件了。
4.1、编写主机配置文件
我们先编写主机上的配置文件:
回车之后是这样的:

先按insert
键,然后直接将下面主机的配置文件复制上去即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span>[</span>mysqld<span>]</span> #修改配置文件:vim <span>/</span>etc<span>/</span>my<span>.</span>cnf #主服务器唯一<span>ID</span> server<span>-</span>id<span>=</span><span>1</span> #启用二进制日志 log<span>-</span>bin<span>=</span>mysql<span>-</span>bin # <span>设置不要复制的数据库</span><span>(</span>可设置多个<span>)</span> binlog<span>-</span>ignore<span>-</span>db<span>=</span>mysql binlog<span>-</span>ignore<span>-</span>db<span>=</span>information_schema #设置需要复制的数据库 需要复制的主数据库名字 binlog<span>-</span><span>do</span><span>-</span>db<span>=</span>testdb #设置logbin格式 binlog_format<span>=</span><span>STATEMENT</span><span aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span> |
退出方式:
先按Esc
键–>再按Shift+:
键–>输入wq–保存退出。

4.2、编写从机配置文件
从机上的my.cnf也是同样的方式
1 2 3 4 5 |
<span>[</span>mysqld<span>]</span> #从服务器唯一<span>ID</span> server<span>-</span>id<span>=</span><span>2</span> #启用中继日志 relay<span>-</span>log<span>=</span>mysql<span>-</span>relay<span aria-hidden="true"><span></span><span></span><span></span><span></span><span></span></span> |
重新启动mysql容器
1 |
docker restart mysql01 mysql02 <span aria-hidden="true"><span></span></span> |


接下来就是搭建主从复制了。
五、搭建主从复制
5.1、主机设置
1 2 |
docker exec <span>-</span>it mysql01 <span>/</span>bin<span>/</span>bash #进入容器 mysql <span>-</span>uroot <span>-</span>p123456 #连接mysql<span aria-hidden="true"><span></span><span></span></span> |

5.2、主机上建立帐户并授权 slave
给从机授权,为了让从机能够和主机连接起来。
1 |
<span>GRANT</span> <span>REPLICATION</span> <span>SLAVE</span> <span>ON</span> <span>*</span><span>.</span><span>*</span> <span>TO</span> <span>'slave'</span>@<span>'%'</span> <span>IDENTIFIED</span> <span>BY</span> <span>'123456'</span><span>;</span><span aria-hidden="true"><span></span></span> |

5.3、查询master状态
1 |
show master status<span>;</span> #查询master的状态<span aria-hidden="true"><span></span></span> |

把这里的File和Position
记下来哈,等下在从机上要用到。
1 2 |
<span>File</span><span>:</span> mysql<span>-</span>bin<span>.</span><span>000003</span> <span>Position</span><span>:</span> <span>438</span><span aria-hidden="true"><span></span><span></span></span> |
Binlog_Do_DB
:需要复制的数据库。
Binlog_Ignore_DB
:不需要复制的数据库。
注意:此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化
5.4、从机设置
进入mysql02
容器
1 2 |
docker exec <span>-</span>it mysql02 <span>/</span>bin<span>/</span>bash mysql <span>-</span>uroot <span>-</span>p123456<span aria-hidden="true"><span></span><span></span></span> |
复制主机的命令
1 2 3 4 5 6 7 8 9 10 11 |
<span>CHANGE</span> <span>MASTER</span> <span>TO</span> <span>MASTER_HOST</span><span>=</span><span>'主机的ip地址'</span><span>,</span> <span>MASTER_USER</span><span>=</span><span>'slave'</span><span>,</span> <span>MASTER_PASSWORD</span><span>=</span><span>'123456'</span><span>,</span> <span>MASTER_PORT</span><span>=</span><span>3310</span><span>,</span> <span>MASTER_LOG_FILE</span><span>=</span><span>'mysql-bin.000003'</span><span>,</span><span>MASTER_LOG_POS</span><span>=</span><span>438</span><span>;</span> #解释: # <span>CHANGE</span> <span>MASTER</span> <span>TO</span> <span>MASTER_HOST</span><span>=</span><span>'主机的IP地址'</span><span>,</span> # <span>MASTER_USER</span><span>=</span><span>'slave'</span><span>(</span>刚刚配置的用户名<span>)</span><span>,</span> # <span>MASTER_PASSWORD</span><span>=</span><span>'123456'</span><span>(</span>刚刚授权的密码<span>)</span><span>,</span> # master_port<span>=</span>主机开放的端口 我这里是<span>3310</span>端口<span>,</span> # <span>MASTER_LOG_FILE</span><span>=</span><span>'mysql-bin.具体数字'</span><span>,</span><span>MASTER_LOG_POS</span><span>=</span><span>具体值</span><span>(</span>之前的Position<span>)</span><span>;</span><span aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span> |

注意事项
:如果在这里出现错误,先重置。执行完下面两条命令。
1 2 |
stop slave<span>;</span> reset master<span>;</span><span aria-hidden="true"><span></span><span></span></span> |
启动从服务器复制功能

查看从服务器状态

#下面两个参数都是Yes,则说明主从配置成功!
1 2 |
<span>Slave_IO_Running</span><span>:</span> Yes <span>Slave_SQL_Running</span><span>:</span> Yes<span aria-hidden="true"><span></span><span></span></span> |
六、测试主从复制
6.1、主机新建库 -从机复制

在主机新建testdb
后,从机也随之就有了。(这里的命名是确定的,因为在配置文件中说明了复制testdb
数据库)。
6.1、新建表-从机复制

6.3、insert 记录-从机复制


当然这些还是有看不出到底有没有复制的话,咱们直接测试函数,就能知道啦。
1 |
insert into <span>my_table01</span><span>(</span>id<span>,</span>name<span>)</span> <span>VALUE</span><span>(</span><span>1</span><span>,</span>@@hostname<span>)</span><span>;</span><span aria-hidden="true"><span></span></span> |

这就可以看出主从复制确实是成功的,但是在使用函数上有数据不一致的问题。
七、重置配置主从
如何停止从服务复制功能
如何重新配置主从 (即清除之前的主从配置)
1 2 |
stop slave<span>;</span> reset master<span>;</span><span aria-hidden="true"><span></span><span></span></span> |
八、自言自语
下一篇打算讲一下mysql
的中间件mycat
实现读写分离,或者说点理论😀,咱们一步一步来哈😁。
你好,我是博主宁在春
,Java学习路上的一颗小小的种子,也希望有一天能扎根长成苍天大树。
最近在持续更新中,如果你觉得文章对你有所帮助,也感兴趣的话,关注我吧。
让我们一起学习,一起讨论吧。
希望与君共勉
😁
我们:待别时相见时,都已有所成。