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

相关推荐
Raina测试28 分钟前
Maestro实现IOSUI自动化
运维·自动化
不像程序员的程序媛7 小时前
系统cpu内存负载资源分析
运维·服务器·数据库
我叫黑大帅9 小时前
MySQL 并发插入竞态问题:原子写入实践指南
后端·mysql·面试
我会尽全力 乐观而坚强10 小时前
MySQL零基础入门(二)
数据库·mysql·adb
Asuicao10 小时前
centos7.9版本升级ssh OpenSSH 9.8p1 源码 OpenSSL 1.1.1w 源码包以及安装升级回滚文档
运维·ssh
志栋智能11 小时前
超自动化安全中的威胁狩猎
运维·安全·自动化
↘"LYong11 小时前
旧版 CentOS 安装 Docker 完整指南(附国内镜像加速)
linux·运维·docker
Elastic 中国社区官方博客12 小时前
Elastic 在 Everest Group 企业搜索产品 PEAK Matrix® 评估 2026 中被评为领导者
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
程序员在囧途12 小时前
likeadmin-api API 中转站怎么做统一报价?从 /pricing、/user/balance 到 task_id 回执的落地方法
运维·服务器·数据库·likeadmin-api·api中转站·token计费
龙石数据12 小时前
MySQL 全量同步到 Hive 怎么做?三步配置教程
数据库·hive·mysql·数据治理·数据中台