运维高级学习---MySQL主从复制

MySQL内建的复制功能是构建大型,高性能应用程序的基础

通过将MySQL的某一台主机 (master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器

为什么要做主从复制

1.灾备

2.数据分布

3.负载平衡

4.读写分离

5.提高并发能力

1.主从复制的原理

主节点(Master):主节点是数据库的源,其中包含要被复制到从节点的数据。

从节点(Slave):从节点是主节点的副本,它通过复制主节点的数据来实现数据同步。从节点可以用于读取数据、备份和负载均衡。

MySQL主从复制是基于二进制日志实现的,主要包括三个线程,包括两个I/O线程和一个SQL线程。

  1. 主节点将数据变化记录在二进制日志中
  2. 从节点将二进制日志拷贝到从节点的中继日志中
  3. 从节点将中继日志的事件再做一次,将数据变化反应到自身的数据库中

2.完成MySQL主从复制

主要步骤:

sql 复制代码
主节点:

 - 启用二进制日志 
  
 - 选择唯一的server_Id   
 - 创建具有复制权限的用户

从节点:

 - 启用中继日志(可启用也可不起用)
 - 选择唯一的server_id
 - 连接至主节点,开始复制

MySQL主从复制----一主一从

环境准备:两台虚拟机、主节点ip:192.168.1.140,从节点ip:192.168.1.141

主节点配置:

sql 复制代码
#开启二进制日志,设置唯一的server_id
vim /etc/my.cnf
	[mysqld]
	log_bin=mysql-bin
	server_id=140
#重启mysql服务
systemctl restart mysqld
#进入mysql
mysql -uroot -p123456 
#创建用户并赋予复制权限
mysql> grant replication slave on *.* to 'rep'@'192.168.1.%' identified by '123456';
#锁表设置只读
mysql> flush tables with read lock;
mysql> show variables like '%timeout%';
#查看主库状态,主要看当前日志文件名以及二进制日志偏移量
mysql> show master status;
#备份数据库数据
mysqldump -uroot -p -A -B |gzip > /backup/mysql_bak.$(date +%F).sql.gz
#解锁
mysql>unlock tables;
#将备份后的数据库文件传到从节点上,传输的位置可以自己更改
scp /backup/mysql_bak.2023-07-23.sql.gz 192.168.1.141:/opt

从节点配置:

sql 复制代码
#设置唯一的server_id
vim /etc/my.cnf
	[mysqld]
	server_id=141
#重启数据库服务
systemctl restart mysqld
#还原从主库备份的数据
cd /opt
gzip -d mysql_bak.2023-07-23.sql.gz
mysql -uroot -p123456 < mysql_bak.2023-07-23.sql
#检查是否还原:
mysql -uroot -p123456 -e 'show databases;'
#进入mysql数据库并设置从主库同步
mysql>change master to
	 >master_host='192.168.1.140'
	 >master_user='root'
	 >master_password='123456'
	 >master_log_file='mysql-bin.000002'
	 >master_log_pos=446;
#如果没指定端口号,那默认是3306
#启动从库同步开关
mysql>start slave;
#检查状态
mysql>show slave status\G	 

检查slave状态,当I/O线程与SQL线程都打开时,即成功,如下图:

需要注意的是,如果克隆了一台虚拟机的话,两台虚拟机的uuid不能相同。
修改uuid需要到auto.cnf文件中修改,可以先用find / -iname 'auto.cnf'找到文件后再用vim编辑器进行修改。
另外,在主从复制前,应先关闭防火墙,systemctl stop firewalld

总结

MySQL主从复制有主从类型、主主类型以及级联类型,本文只介绍了一主一从的方式,但掌握了一主一从,那么剩下的几种掌握起来也没有太大的困难了。

相关推荐
.小小陈.1 小时前
Linux高频基础实用指南:从文件操作到日志
linux·运维·服务器
Java.熵减码农7 小时前
解决Linux修改环境变量后导致登录循环进不去系统的问题
linux·运维·服务器
明天好,会的8 小时前
分形生成实验(五):人机协同破局--30万token揭示Actix-web状态管理的微妙边界
运维·服务器·前端
猫头虎8 小时前
如何在浏览器里体验 Windows在线模拟器:2026最新在线windows模拟器资源合集与技术揭秘
运维·网络·windows·系统架构·开源·运维开发·开源软件
C_心欲无痕8 小时前
nginx - alias 和 root 的区别详解
运维·前端·nginx
HIT_Weston9 小时前
95、【Ubuntu】【Hugo】搭建私人博客:_default&partials
linux·运维·ubuntu
实心儿儿10 小时前
Linux —— 基础开发工具5
linux·运维·算法
oMcLin10 小时前
如何在SUSE Linux Enterprise Server 15 SP4上通过配置并优化ZFS存储池,提升文件存储与数据备份的效率?
java·linux·运维
SelectDB10 小时前
驾驭 CPU 与编译器:Apache Doris 实现极致性能的底层逻辑
运维·数据库·apache