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

相关推荐
小猿姐4 小时前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
云技纵横15 小时前
Gap Lock 死锁实战:5 秒在本地复现 MySQL 间隙锁死锁
后端·mysql
无响应de神15 小时前
三、用户与权限管理
数据库·mysql
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工1 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智1 天前
ARP代理--工作原理
运维·网络·arp·arp代理
ApacheSeaTunnel1 天前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步