1、什么是mysql的主从复制
从网上找了一张mysql主从复制的原理图,master会根据配置的相关的模式(有三种模式)把数据变化记录到二进制文件中。slave有两个线程:
- 一个I/O线程,去请求master的binlog,mster的log dump线程会给slave传binlog,I/O线程得到binlog后会拷贝到relay log(中继日志)文件中。
- 一个是SQL线程,读取relay log中的日志,重做其中的事件,实现数据重演(也就是将变化反映到自己的数据中)。
上面提到的记录二进制日志的三种模式:
- STATEMENT模式,记录每条会改变数据的sql语句,优点是 减少日志量,缺点是 可能会导致主从数据不一致,比如master中的一条记录是用new Date()函数生成的,那么slave也根据日志中的这条语句执行得到的结果肯定是不一致的。
- ROW模式,记录被改变的数据而不是sql,优点是解决了SBR模式的问题,缺点是产生大量日志。
- MIXED模式,混合模式,结合了SBR和RBR的优点,对基于sql无法复制的会使用记录数据的方法,可以使用sql复制的就用sql。建议使用。
2、docker拉取mysql镜像,配置master节点,创建master容器
拉取镜像前建议配置一下docker的国内镜像源,建议使用ustc的,可以参考上一篇文章 【Docker部署前后端分离项目】1。
Percona Server是一款独立的数据库产品,其可以完全与MySQL兼容,可以在不更改代码的情况了下将存储引擎更换成XtraDB 。在这里我们使用percona数据库&#