这篇文章只是让大家了解一下mysql的主从复制,并且实现了一个案例
但是这个案例不是典型的案例
后面会在写其他的配置方法
主从复制解决的问题
- 数据分布
- 负载均衡
- 备份
- 高可用和故障切换
在这个案例中,我们只实现了备份 。其他几个点,我们后边一个一个实现,就不写概念了
主从复制是如何工作的
这里写的只是简单的实现过程,具体细节是很麻烦的,建议大家都去了解了解
- 主库会把数据的更改记录在一个二进制文件
- 从库会把主库的二进制文件复制到复制到自己的中继日志上(MySQL的日志类型有6中,不清楚的可以看看这篇文章【MySQL】日志分类)
- 从库读取中继日志的时间,然后重新放到备库的数据库上
开始准备
这是使用docker安装MySQL的流程
这里我们假定大部分配置采用默认值即可,在主库和备库都是全新
安装并且拥有同样的数据时这样的假设是合理的。接下来我们将展示如何一步步配置复制:假设有服务
器server1(IP地址172.10.0.2)和服务器server2(IP地址172.10.0.3)
【Docker】安装MySQL8.0
在使用docker把MySQL8.0的主节点安装好后在创建俩个MySQL的从节点
分别执行下面语句,这俩个语句分别是创建mysql_slave 和 mysql_slave1的容器
docker run -itd --name mysql-slave -p 3307:3306 --net mynetwork --ip 172.10.0.3 -e MYSQL_ROOT_PASSWORD=123456 mysql docker run -itd --name mysql-slave1 -p 3308:3306 --net mynetwork --ip 172.10.0.4 -e MYSQL_ROOT_PASSWORD=123456 mysql
# 创建一个账号 CREATE USER 'master'@'172.10.0.%' IDENTIFIED WITH mysql_native_password BY '123456'; # 给予复制权限 GRANT REPLICATION SLAVE ON *.* TO 'master'@'172.10.0.%';
CHANGE MASTER TO MASTER_HOST='172.10.0.2', MASTER_USER='master', MASTER_PASSWORD='123456', MASTER_LOG_FILE='binlog.000002', MASTER_LOG_POS=0;