MySQL主从复制(一主一从)

文章目录

  • MySQL主从复制(一主一从)
    • 什么是主从复制
    • 主从复制的原理
    • 主从复制的优点
    • 准备工作
    • 配置主数据库Master
    • 配置从数据库Slave
    • 测试

MySQL主从复制(一主一从)

什么是主从复制

MySQL主从复制是指数据可以从一个MySQL数据库服务器的主节点复制到一个或多个从节点。主节点记录了所有的写操作,并将这些写操作记录到二进制日志(binary log)中。从节点通过连接主节点,获取并应用这些二进制日志,从而实现数据的复制。

MySQL默认采用异步复制方式,这意味着主节点执行写操作后,并不会等待从节点应用这些操作,而是立即返回给客户端。从节点会异步地接收并应用主节点的二进制日志,以保持与主节点数据的一致性。

从节点可以复制主节点中的所有数据库,也可以选择复制特定的数据库或特定的表。通过配置主节点和从节点的参数,可以进行相应的设置。

主从复制的原理

image-20230714173923619

Master服务器会记录数据的改变,并将这些改变写入二进制binary log日志

Slave服务器会定期检查Master的二进制日志,如果发现改变,就会请求Master发送二进制事件Master会开启一个I/O线程,将二进制事件发送给Slave并保存到从节点本地的中继日志中

从节点会启动SQL线程,从中继日志中读取二进制日志并在本地重放,使从节点的数据和Master节点保持一致

最后,I/O 线程和SQL 线程会进入睡眠状态,等待下一次被唤醒

主从复制的优点

  • 提高可用性:当主节点发生故障时,可以快速切换到从节点,确保数据库的持续可用性

  • 负载均衡:将写的请求分发到主节点上,将读操作分发到从节点上,减轻主节点的负载,提高性能

  • 数据备份:从节点可以用作主节点的备份,以防止数据丢失

准备工作

准备好两台服务器,分别安装MySQL

IP类型
192.168.200.10主节点
192.168.200.20从节点

第一步:修改主机名

修改192.168.200.10的主机名为master

修改192.168.200.20的主机名为slave

[root@master ~]# hostname -I
192.168.200.10 
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# bash
[root@master ~]# [root@slave ~]# hostname -I
192.168.200.20 
[root@localhost ~]# hostnamectl set-hostname slave
[root@localhost ~]# bash
[root@slave ~]# 

第二步:下载rpm包

做这一步的时候你要确保你的虚拟机能连通外网,以及要下载wget

这里使用RPM安装MySQL

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
[root@master ~]# ls
anaconda-ks.cfg  mysql-community-release-el7-5.noarch.rpm
[root@slave ~]# ls
anaconda-ks.cfg  mysql-community-release-el7-5.noarch.rpm

第三步:安装

[root@master ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm 
[root@slave ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm 
[root@master ~]# yum install -y mysql-server
[root@slave ~]# yum install -y mysql-server

第四步:开启mysql服务并设置开机自启

[root@master ~]# systemctl enable mysqld --now
[root@slave ~]# systemctl enable mysqld --now
# 查看状态
[root@master ~]# systemctl status mysqld  
[root@slave ~]# systemctl status mysqld

第五步:查看是否暴露了端口

[root@master ~]# netstat -tlnp |grep 3306
tcp6       0      0 :::3306          :::*         LISTEN      12093/mysqld  [root@slave ~]# netstat -tlnp |grep 3306
tcp6       0      0 :::3306         :::*         LISTEN      11574/mysqld

第六步:设置密码并测试登录

[root@master ~]# mysqladmin -u root password "000000"
[root@slave ~]# mysqladmin -u root password "000000"
[root@master ~]# mysql -uroot -p000000
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '000000';flush privileges;
# root 用户授予所有数据库的所有权限,并设置密码为 '000000'
[root@master ~]# exit;
[root@slave ~]# mysql -uroot -p000000
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '000000';flush privileges;
[root@slave ~]# exit;

第七步:防火墙放行3306端口

[root@master ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[root@master ~]# firewall-cmd --reload
success[root@slave ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[root@slave ~]# firewall-cmd --reload
success

在SQLyog连接

image-20230714182151902

image-20230714182158683

配置主数据库Master

修改MySQL数据库的配置文件

[root@master ~]# vim /etc/my.cnf
[mysqld]
# 添加如下两行信息
server-id=10
log_bin

重启mysql服务

[root@master ~]# systemctl restart mysqld

登录mysql

显示主节点上的二进制日志文件列表

记住下面的Log_name 和File_size,配置从数据库要用

mysql> show master logs;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| mysqld-bin.000001 |       120 |
+-------------------+-----------+
# Log_name 列显示二进制日志文件的名称
# File_size 列显示二进制日志文件的大小

创建用于复制的账户并授权

授权从节点进行主从复制。执行该命令后,从节点用户 csq 将被授予复制权限,并可以使用密码 000000 连接到主节点进行复制。

mysql> grant replication slave on *.* to 'csq'@'192.168.200.%' identified by '000000';

配置从数据库Slave

修改mysql数据库配置文件

[root@slave ~]# vim /etc/my.cnf
[mysqld]
# 添加如下信息
server-id=20

重启mysql服务

[root@slave ~]# systemctl restart mysqld

登录mysql

配置连接主数据库的信息

# 因为配置主数据库的信息参数有很多当你忘记的时候可以查看如下命令
mysql> help change master to;

image-20230714190102613

我们可以复制稍微修改一下

这里要设置刚刚创建的用户账号信息,以及主数据库的IP

mysql> CHANGE MASTER TO->   MASTER_HOST='192.168.200.10',->   MASTER_USER='csq',->   MASTER_PASSWORD='000000',->   MASTER_PORT=3306,->   MASTER_LOG_FILE='mysqld-bin.000001',->   MASTER_LOG_POS=120;
# MASTER_LOG_FILE 和  MASTER_LOG_POS 
# 这两个参数就是指定主数据库的二进制日志文件名称和位置
# 从节点可以确定从哪个位置开始复制数据

启动从节点的主从复制过程。

mysql> start slave;
# 执行该命令后,从节点将开始连接主节点,并开始复制主节点上的二进制日志

查看从数据库的状态

mysql> show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send event # 表示等待主节点发送事件Master_Host: 192.168.200.10Master_User: csqMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysqld-bin.000001Read_Master_Log_Pos: 408Relay_Log_File: mysqld-relay-bin.000002Relay_Log_Pos: 572Relay_Master_Log_File: mysqld-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 408Relay_Log_Space: 746Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 10Master_UUID: f6f20d76-222c-11ee-9c60-000c29053974Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update itMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0

测试

主数据库创建一个数据库CSQ

mysql> create database CSQ;

从数据库查看

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| CSQ                |
| mysql              |
| performance_schema |
+--------------------+

SQLyog查看

image-20230714191624035

image-20230714191646058

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22438.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H3C-Cloud Lab实验-RIP实验

实验拓扑图: 实验需求: 1. 按照图示配置 IP 地址 2. 配置 RIP 实现全网路由互通 3. 路由器之间需要开启接口身份验证来保证协议安全性,密钥为 123456 实验步骤: 1. 配置R1的IP地址 2. 配置R2的IP地址 3. 配置R3的IP地址 4. 在…

软件测试真实企业测试流程

最近收到不少准备转行软件测试的小伙伴私信问真实企业里面软件测试流程是什么样子的? 对于这个问题,在面试的时候也是经常会被问到。 关于测试流程,100家公司可能有100套测试流程,但是基本上都是大同小异,完全可以将测…

css 绘制直角梯形 和 平行四边形

<div:class"{isFirst: index 0,tab_item: index ! 0,}":style"{width: item?.label?.length > 4 ? 206px : 137px,}"><div>{{ item.label }}</div></div> isFirst是直角梯形 tab_item是平行四边形 直角梯形 .isFirstcur…

Linux的locale本地化配置

Linux的locale本地化配置 locale简介localectl常用操作语言环境键盘布局 常见问题:配置语言环境报错Linux系统locale(UTF-8)报错最小化自动安装的Centos7修改完整中文显示 locale简介 参考: http://m.blog.chinaunix.net/uid-20621049-id-3427444.html locale把按照所涉及到的…

Maven 项目构建生命周期

Maven 项目构建生命周期 一句话: Maven 构建生命周期描述的是一次构建过程经历了多少个事件 生命周期的3 大阶段 clean 清理工作 default 核心工作&#xff0c;例如编译&#xff0c;测试&#xff0c;打包&#xff0c;部署等 site 产生报告&#xff0c;发布站点等 生命周期…

Win11 锁屏、开机画面使用window聚焦 壁纸失效解决方案

1、设置>个性化>锁屏界面>个性化锁屏界面 切换为图片。 2、打开文件资源管理器&#xff0c;导航栏中点击查看>显示>勾选隐藏的项目。 3、打开C&#xff1a;\用户\你的用户\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_xxxxxxx\LocalSta…

【网络编程】传输层协议——UDP协议

文章目录 一、传输层的意义二、端口号2.1 五元组标识一个通信2.2 端口号范围划分2.3 知名端口号2.4 绑定端口号数目问题2.5 pidof & netstat命令 三、UDP协议3.1 UDP协议格式3.2 如何理解报头&#xff1f;3.3 UDP协议的特点3.4 UDP缓冲区3.5 UDP传输最大长度 一、传输层的意…

前端vue入门(纯代码)33_缓存路由组件

如果我一贫如洗&#xff0c;你将会是我最后一件行李。 【31.Vue Router--缓存路由组件】 背景&#xff1a;在Cartoon组件的input框&#xff0c;输入了一些数据的时候&#xff0c;但是&#xff0c;当我切换到Stars组件的时候&#xff0c;那么Cartoon组件就会被销毁&#xff0c…

基于PyQt5的图形化界面开发——打砖块

目录 0. 前言1. 砖块类定义2. 挡板类定义3. 碰撞检测4. 小球和游戏初始化5. 完整代码6. 运行效果演示7. Pyinstaller 编译exe程序PyQt5 0. 前言 本文使用 PyQt5实现一个打砖块小游戏 操作系统&#xff1a;Windows10 专业版 开发环境&#xff1a;Pycahrm Comunity 2022.3 Pyt…

走进Linux世界【三、Linux文件与路径】

第三章 Linux文件与路径 1、文件结构 ​ Windows和Linux文件系统区别 ​ 在windows平台下&#xff0c;打开“此电脑”&#xff0c;我们可以看到盘符分区 ​ 每个驱动器都有自己的根目录结构&#xff0c;这样形成了多个树并列的情形 ​ 但是在 Linux 下&#xff0c;我们是看…

STM32 Proteus仿真ili9341 TFT2048小游戏 -0067

STM32 Proteus仿真ili9341 TFT2048小游戏 -0067 Proteus仿真小实验&#xff1a; STM32 Proteus仿真ili9341 TFT2048小游戏 -0067 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 ili9341 TFT显示器上下左右方向键赢了按键输了按键 1.标准2048经典游戏玩法&#…

FFmpeg5.0源码阅读—— av_read_frame

摘要&#xff1a;本文主要描述了FFmpeg中用于打开编解码器接口av_read_frame的具体调用流程&#xff0c;详细描述了该接口被调用时所作的具体工作。   关键字&#xff1a;ffmpeg、av_read_frame   读者须知&#xff1a;读者需要了解FFmpeg的基本使用流程&#xff0c;以及一…