运维高级学习---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主从复制有主从类型、主主类型以及级联类型,本文只介绍了一主一从的方式,但掌握了一主一从,那么剩下的几种掌握起来也没有太大的困难了。

相关推荐
Wezzer41 分钟前
企业级部署 (基于tomcat与nginx)
linux·运维·服务器
Teamhelper_AR1 小时前
AR智能巡检:制造业运维效率提升的关键
运维·ar
看星星的小王子1 小时前
Linux基础(三)——Bash基础
linux·运维·bash
__風__2 小时前
从本地 Docker 部署的 Dify 中导出知识库内容(1.6版本亲测有效)
人工智能·python·mysql·语言模型
Gss7772 小时前
Linux 进程管理与计划任务详解
linux·运维·服务器
潜心专研的小张同学2 小时前
京东云轻量云服务器与腾讯云域名结合配置网站及申请SSL证书流程详解
运维·服务器·前端
Aeside12 小时前
从订单ID说起:揭秘MySQL索引结构 & 设计
mysql
one day3213 小时前
Linux和shell
linux·运维·服务器
知其然亦知其所以然4 小时前
MySQL社招面试题:索引有哪几种类型?我讲给你听的不只是答案!
后端·mysql·面试
鹏大师运维4 小时前
银河麒麟桌面操作系统:自定义截图快捷键操作指南
linux·运维·快捷键·国产操作系统·截图·麒麟kylinos·桌面操作系统