docker部署MySQL5.7主从复制
前言
本文将以MySQL5.7版本来讲MySQL 主从复制的原理以及在Docker环境中如何实现主从复制。
Mysql复制的优点
如果主库出现问题,可以快速切换到从库提供服务
可以在从库执行查询操作,降低主库的访问压力。
可以在从库进行备份,以免备份期间影响主库的服务。
Mysql复制解决的问题
数据分布 (Data distribution )
负载平衡(load balancing)
数据备份(Backups) ,保证数据安全
高可用性和容错行(High availability and failover)
实现读写分离,缓解数据库压力
主从复制的模式:
mysql默认模式为异步模式:主库在更新完事务之后会立即把结果返回给从服务器,并不关心从库是否接收到以及从库是否处理成功。缺点:网络问题没有同步、防火墙的等因素导致同步失败。优点:快,效率高。
全同步模式:主库在更新完事务之后,立即把结果返回到从库,所有的从库执行完毕之后才能继续下一个同步。优点:安全。缺点:性能受到影响。
半同步模式:介乎于异步和全同步之间,主库更新完事务之后,也是同步到从库,同步完成之后有一个等待时间,等待时间是tcp/ip的往返时间,一般为5毫秒左右。即在一定程度上保证了效率,也在一定程度上保证了数据的完整性。
MySQL 主从复制的主要用途
①读写分离
在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。
② 数据实时备份
当系统中某个节点发生故障时,可以方便的故障切换(主从切换),提高数据安全-因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据;
③高可用(HA)
因为数据库服务器中的数据都是相同的,当Master挂掉后,可以指定一台Slave充当Master继续保证服务的运行,因为数据是一致性的(如果当插入时Master就挂掉,可能不一致,因为同步也需要时间)当然这种配置不是简单的把一台Slave充当Master,毕竟还要考虑后续的Slave的数据同步到Master。在主服务器上执行写入和更新,在从服务器上向外提供读功能,达到读写分离的效果,也可以动态地调整从服务器的数量,从而调整整个数据库的性能。在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能。
④架构扩展
随着系统中业务访问量的增大,如果是单机部署数据库,就会导致I/O访问频率过高。有了主从复制,增加多个数据存储节点,将负载分布在多个从节点上,降低单机磁盘I/O访问的频率,提高单个机器的I/O性能。
实验
Master节点配置
1、拉镜像
docker pull mysql:5.7.32
2、建目录
mkdir -p /opt/mysql-master/log/ opt/mysql-master/data /opt/mysql-master/conf
3、写配置文件
cd /opt/mysql-master/conf
查看mysql数据库密码
docker exec -it fa1d66741082 env
查看my.cnf文件是否映射到容器
docker exec -it fa1d66741082 /bin/bash
cd /etc/mysql/mysql.conf.d
cat mysqld.cnf
容器外文件位置
cat /etc/mysql/mysql.conf.d/my.cnf
Slave节点配置
1、建目录
mkdir -p /opt/mysql-slave/log/ opt/mysql-slave/data /opt/mysql-slave/conf
2、写配置文件
cd /opt/mysql-slave/conf
授权用户
测试通信
重启容器
slave节点配置
数据测试
查看数据正常复制,说明测试正常