1需求:
实现mysql数据库主从同步
=============================
分析:实现主从同步需要两个数据库,这两个数据库一般放在不同的机器上(服务器上/个人PC上),我自己只有一个PC,也没有购买个人服务器,所以需要使用虚拟机。vmware用起来太繁杂了,docker比较轻便【可以了解一下两者的区别】。docker上部署一个mysql,创建从库。自己的PC的mysql创建主库。
注意:
1两者mysql的版本保持一致
2主从配置好之后要,如果要处理历史数据的话需要手动维护主从数据库的数据结构和数据一致【因为主从同步是通过日志来同步的,历史数据的日志不可能保持那么完整,必须要手动维护】。如果是新创建的,只要出现下图的两个yes就能直接在写库中操作,所有的操作都会同步到从库
==============================
2环境:
Windows10 win环境下已经安装好的docker desktop win环境下的已经安装好的navicat win环境下的已经安装好的mysql最新版本
3过程:
方式一:失败
使用docker中的两个mysql实例分别作为主从-----即主从数据库都使用docker中虚拟的
遇到的问题:
1 docker 我使用两个mysql实例都创建在docker中,使用不同的端口,也就相当于开辟了两台新机子,但是到最后一步的时候slave_io_running
一直是connectting。排查问题是我这两个实例都是docker中的这两个ip并不一定通,因为分配在了不同的
-》延伸出问题 :宿主机与容器的通信,我网络了解的太少,解决方式是让不同容器互相通信即可,在最初始配置主从数据库的时候添加--link
,主从都配置在docker中,让容器互通但是我实验两次没成功,然后还有说进入容器中配置两个容器的网桥,让其通信docker中容器的通信,我没实验
=============================
解决:使用
2 docker 命令行中出现command can not foud
,前面的也不是#
,而是sh-4
使用这些命令可以回到容器中 但是执行apt-get update
还是不行-》延伸出我是不是docker没装好->但是我环境变量都配置了,直接cmd在dos下执行 docker --version
也是正常的
==========================
解决:
我创建容器的时候使用mysql:latest进入docker中就是#
,也能正常执行apt-get update
然后进入编辑器中修改虚拟的mysql的配置成功
疑问:唯一的区别是出现问题的那个是因为我创建容器的时候使用的是mysql:8.0.35指定版本,其他的配置没有什么不同。我不知道具体的原因是什么,,,,害
==========================
方式二:成功
使用本地的mysql作为主库,docker中创建mysql的另外一个实例作为mysql的从库----即一个使用本机可以使用的mysql,另外一个使用docker中虚拟的【其实如果你购买有自己的服务器,完全可以在实际服务器上部署尝试使用】
具体的命令按照自己的配置来使用-》如端口和ip要按照自己的实际情况执行命令,具体的命令可以看这篇博客试验过成功了
4总结:
1主从同步一般与读写分离一起搭配使用,一般场景下读的操作比写多,所以在配置服务器资源的时候可以适当给作为读的那台服务器多分配资源
2一般主从同步还要设置事务回滚使用
2还是得多尝试,多请教