当前位置: 首页 > news >正文

Mysql DBA学习笔记(主从复制)

一、核心概念

主从复制指:将主数据库的DDL和DML语句通过二进制日志(Binlog)传到从库服务器中,然后在从库上面对这些日志再重新执行一遍,从而使从库和主库的数据保持同步,从而实现数据转移读写分离数据备份

Mysql的主从复制是一个异步的复制过程。

mysql中,支持一台主库同时向多台从库进行复制,从库也可以同时作为其他从服务器的主库,从而实现链状复制。

二、原理

步骤:
1、2)主库进行增删改操作 / 执行DDL语句时,将所有数据变更记录到二进制日志中。
3)从库的IO线程发出请求读取主库的binlog日志。
4、5)从库的IO线程会将主库的binlog日志写到从库自己的relay log中继日志中。
6、7)从库的另一个sql thread线程读取relay log日志中记录的数据变化,并同步到从库自己数据库的数据变化。

注:二进制日志不记录select这种查询语句,二进制日志默认的ROW日志格式记录的是每行的数据变更。

三、主从复制的搭建

1)服务器准备

  • 主库:192.168.200.200
  • 从库:192.168.200.201
  • Mysql版本:8.0及以上版本

两台服务器都开放指定3306端口号:

firewall-cmd --zone=public --add-port=3306/tcp -permanent

firewall-cmd -reload

2)主库配置

  • 修改主库配置文件

vim /etc/my.cnf

# mysql 服务ID,保证在整个集群环境中它是唯一,默认为1

server-id=1

# 是否只读,1 代表只读,0 代表读写

read-only=0

# 开启二进制日志

log-bin=mysql-bin

-- 二选一

# 设置需要同步的数据库

binlog-do-db=db01

# 设置不需要同步的数据库

binlog-ignore-db=mysql(忽略系统库)

  • 重启mysql服务

systemctl restart mysqld

  • 创建复制用户

# 创建账户,作用:授予从库连接主库并读取二进制日志

# 创建用户和密码,使用户能从任意主机上连接mysql服务

create user 'user1'@'%' identified by 'password'(这里'%'代表任意主机,也可以指定特定主机'192.168....‘’)

# 给用户分配主从复制权限

grant replication slave on *.* to 'user1'@'%'

# 查看主库状态

show master status

File :最终写入哪个二进制日志文件
Position :写入位置

3)从库配置

  • 修改从库配置文件

vim /etc/my.cnf

# mysql 服务ID,保证在整个集群环境中它是唯一,默认为1,从库与主库不一样即可

server-id=2

# 是否只读,1 代表只读,0 代表读写,从库只需要查询不需要写入

read-only=1

# 开启relay log中继日志

relay-log=mysql-relay

  • 重启mysql服务

systemctl restart mysqld

  • 配置主从关系

change replication source to
        source_host='xxx.xxx',
        source_user='xxx',
        source_password='xxx',
        source_log_file='xxx',
        source_log_pos=xxx;

8.0.23之前的版本:

change master to 
        master_host='192.168.200.200',

        master_user='user1',

        master_password='password',

        master_log_file='xxx',     -- 使用show master status 查看到"File"对应的值

        master_log_pos=xxx;     -- 使用show master status 查看到"Position"对应的值

  • 开启同步

start replica;  -- 8.0.22之后

start slave;    -- 8.0.22之前

  • 查看主从同步状态

show replica status\G;   -- 8.0.22之后

show slave status\G;     -- 8.0.22之前

(其中 "\G" 表示将数据列转化为行显示)

  • 验证主从同步

主要看:

Replica_IO_Running

Replica_SQL_Running

是否都正常

4)同步失败处理

-- 查看错误信息

show slave status\G

-- 解决方案

1. 跳过错误

set global SQL_SLAVE_SKIP_COUNTER = 1;

start slave;

2. 重置从库

stop slave;

reset slave;

start slave;

参考作者/文章:
黑马程序员 - Mysql数据库从入门到精通
博客园 - https://www.cnblogs.com/it-feiyu/p/18630316

http://www.dtcms.com/a/418221.html

相关文章:

  • 网站开发的交付文档企业策划是什么意思
  • 个人网站主机选择上海品牌全案设计公司
  • 布谷娱乐直播系统源码开发实用功能:技术驱动更迭的创新体验
  • ArcGIS JSAPI 高级教程 - 高亮效果优化之开启使用多高亮样式
  • 元宇宙的搜索引擎:如何在虚拟世界中查找信息
  • Unity-AB包
  • Rust开发环境配置
  • 【mdBook】5.2.1 通用配置
  • Rust自定义函数引用
  • Java 集合体系 —— List 篇
  • 操作系统应用开发(十一)RustDesk在线编译自己客户端——东方仙盟筑基期
  • 【mdBook】5.2 配置
  • 网站建设难么让网站快速收录
  • h5游戏网站建设游戏软件开发培训学校
  • 扩散模型-图像编辑【An Edit Friendly DDPM Noise Space: Inversion and Manipulations】
  • 开源 C# 快速开发(九)通讯--Tcp客户端
  • 大黄蜂云课堂vep格式加密视频录屏截图翻录转换为mp4
  • 【Python办公】批量图片转PDF工具
  • Python爬虫实战:获取北京市交管局最新车检信息与数据分析
  • ubuntu24.04 实现DLNA音频推送
  • 企业网站的建设规划网站建站前期准备工作
  • Docker搭建ESPIDF环境,程序下载
  • MQTT-物联网轻量级通信
  • eclipse复制项目后原项目名依然伴随值所复制的项目名
  • 微服务架构:从单机到分布式的革命性升级
  • 【ROS2学习笔记】话题通信篇:python话题订阅与发布
  • 【碎片化学习】SpringBoot服务的启动过程
  • 儿童网站模板 html做百度快照要先有网站吗
  • Games101 第六章 Shading(着色)
  • 电子电气架构 --- 智能座舱域环境感知和人机交互系统