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

相关推荐
kfepiza15 分钟前
Nginx反向代理 笔记250203
运维·服务器·笔记·nginx
千夜啊2 小时前
k8s集群
运维
暮湫2 小时前
数据的添加、更新与删除
mysql
CodingCarrot2 小时前
自动化软件测试的基本流程
运维·自动化
时差freebright3 小时前
【Linux系统】信号:信号保存 / 信号处理、内核态 / 用户态、操作系统运行原理(中断)
linux·运维·信号处理
利明的博客3 小时前
【流媒体】搭建流媒体服务器
运维·服务器
成都被卷死的程序员3 小时前
从0开始,来看看怎么去linux排查Java程序故障
java·linux·运维·服务器
YIYONIKY3 小时前
MySQL5.5升级到MySQL5.7
mysql
山海青风4 小时前
OpenAI 实战进阶教程 - 第六节: OpenAI 与爬虫集成实现任务自动化
运维·人工智能·爬虫·python·自动化·nlp·beautifulsoup
学问小小谢4 小时前
第21节课:前端构建工具—自动化与模块化的利器
运维·前端·学习·计算机·自动化·电脑·硬件工程