mysql在服务器中的主从复制Linux下

mysql在服务器中的主从复制Linux下

    • 为什么要进行主从复制
    • 主从复制的原理
    • 主从复制执行流程
      • 操作步骤
        • 主库创建
        • 从库创建
      • 测试

为什么要进行主从复制

  1. 在业务中通常会有情况,在sql执行时,将表锁住,导致不能进行查询,这样就会影响业务的正常运行,这个时候可以使用主从复制,用主库负责写,用从库进行读,这样即使出现锁表的情况也不影响正常的业务。
  2. 主从复制可以进行数据的热备份,主库宕机后,从库可以切换,保证业务的正常执行。
  3. 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘的I\O,提高单个库的性能。

主从复制的原理

  • 主数据库

    MySQL主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致。

    binlog:主库中保存所有更新事件日志的二进制文件。binlog是数据库服务启动的一刻起,保存数据库所有变更记录(数据库结构和内容)的文件。

  • 从数据库

    在从库中,当复制开始时,从库就会创建从库I/O线程和从库的SQL线程进行复制处理。
    从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。 从库I/O线程读取主库的binlog输出线程发送的更新并拷 贝这些更新到本地文件,其中包括relay log文件。

主从复制执行流程

  1. 主库db的更新事件(update、insert、delete)被写到binlog的日志中去
  2. 从库启动并发起连接,连接到主库
  3. 主库创建一个binlog dump thread,把binlog的内容发送到从库
  4. 从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
  5. 从库启动之后,创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db
    在这里插入图片描述
    在这里插入图片描述

此案例中规定主库端口号为3306,从库为3307

操作步骤

主库创建

在操作之前先安装docker(Linux中有);然后在docker中获取mysql8的镜像:

docker pull daocloud.io/library/mysql:8.0.16

查看mysql是否安装

docker images

在这里插入图片描述

创建环境目录

1、进入usr下的local下
cd /usr/local
2、创建mysql目录
mkdir mysql
3、进入mysql目录
cd mysql
4、创建master-data目录
mkdir ,aster-data

在这里插入图片描述

主mysql容器运行

mysql]# docker run --name  mysql-master  --privileged=true  -v /usr/local/mysql/master-data:/var/lib/mysql  -p 3306:3306  -e  MYSQL_ROOT_PASSWORD=root  -d  (docker image中的imageId)  --character-set-server=utf8 --server-id=1 --lower_case_table_names=1

参数:

–privileged指定了当前容器是否真正的具有root权限

-p表示宿主机上的某个端口映射到docker容器内的某个端口

-d参数指定了当前容器是在后台运行

–server-id 设置服务器的编号,主从复制的每一个服务的编号都不能相同

在这里插入图片描述

配置mysql权限账户

docker exec -it mysql-master /bin/bash

登录主服务器mysql

mysql -uroot -p
注:此时密码为root

在这里插入图片描述

修改密码和设置从服务器登录用户

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
CREATE USER 'slave_one'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave_one'@'%';

在这里插入图片描述
在这里插入图片描述

查看主mysql的master节点的binlog状态

show master status;

在这里插入图片描述

至此主服务器搭建完毕,下面开始搭建从服务器

从库创建

创建环境目录

cd /usr/local/mysql
mkdir slave_one-data

从mysql容器运行

docker run --name mysql-slave_one --privileged=true -v /usr/local/mysql/slave_one-data:/var/lib/mysql -p 3307:3306 --link mysql-master:master  -e MYSQL_ROOT_PASSWORD=root   -d df8662dadd4f --character-set-server=utf8 --server-id=2   --lower_case_table_names=1

在这里插入图片描述

配置mysql权限账户

docker exec -it mysql-slave_one /bin/bash

在这里插入图片描述

登录从服务器mysql

mysql -uroot -p
注:密码为root

在这里插入图片描述

修改密码登录用户

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

在这里插入图片描述

切换当前服务的状态,使其能够连接上master服务器,并且复制其数据

change master to master_host='master', master_user='slave_one', master_password='123456', master_port=3306, master_log_file='binlog.000002', master_log_pos=1409, master_connect_retry=30;解释:
change master to master_host='master', master_user='slave_one', master_password='123456', 
master_port=3306, master_log_file='master中binlog日志文件名', master_log_pos=master中binlog日志位置, 
master_connect_retry=30;

启动日志同步

start slave;

查看状态

show slave status\G;

在这里插入图片描述

测试

在测试之前首先要保证服务器中的3306he3307的两个端口号防火墙开启

在这里插入图片描述

连接两个数据库

主数据库连接

在这里插入图片描述

从数据库连接

在这里插入图片描述

主库中的数据
在这里插入图片描述

从库不做任何库、表、数据的操作,刷新后有相同的数据

在这里插入图片描述
测试成功。

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

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

相关文章

DS:栈和队列的相互实现

创作不易,感谢友友们三连!! 一、前言 栈和队列的相互实现是用两个栈去实现队列或者是用两个队列去实现栈,这样其实是把问题复杂化的,实际中没有什么应用价值,但是通过他们的相互实现可以让我们更加深入地理…

vue的十大面试题详情

1 v-show与v-if区别 v-if与v-show可以根据条件的结果,来决定是否显示指定内容&#xff1a; v-if: 条件不满足时, 元素不会存在. v-show: 条件不满足时, 元素不会显示(但仍然存在). <div id"app"><button click"show !show">点我</but…

(2024,提示优化,监督微调,强化学习,近端策略优化)用于安全生成文本到图像的通用提示优化器

Universal Prompt Optimizer for Safe Text-to-Image Generation 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 相关工作 3. 提议的框架 4. 实验 0. 摘要 文本-图像&a…

软件实例分享,酒店酒水寄存管理系统软件教程

软件实例分享&#xff0c;酒店酒水寄存管理系统软件教程 一、前言 以下软件教程以 佳易王酒水寄存管理系统软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、寄存的商品名称可以预先设置 2、寄存人可以使用手.机号识别 3、会员充值…

详解4大C语言内存函数【超详细建议点赞收藏】

目录 1. memcpy----内存拷贝1.1 函数介绍1.2 函数使用1.3 模拟实现 2. memmove----重叠内存的数据拷贝2.1 函数介绍2.2 函数使用2.3 模拟实现 3. memcmp----内存比较3.1 函数介绍3.2 函数使用 4.memset----内存设置4.1 函数介绍4.2 函数使用 注意&#xff1a;以下4个内存函数在…

Springboot医院信息管理系统源码 带电子病历和LIS Saas应用+前后端分离+B/S架构

目录 系统特点 技术架构 系统功能 1、 标准数据维护 2、 收费&#xff08;门诊/住院&#xff09;系统 3、 药剂管理系统 4、 医生工作站系统 5、 护士工作站系统 6、电子病历系统 系统优点 云HIS系统简介 云HIS系统功能模块 门急诊挂号管理 门诊收费管理 门诊医…

ansible剧本中的角色

1 roles角色 1.1 roles角色的作用&#xff1f; 可以把playbook剧本里的各个play看作为一个角色&#xff0c;将各个角色打的tasks任务、vars变量、template模版和copy、script模块使用的相关文件等内容放置在指定角色的目录里统一管理&#xff0c;在需要的时候可在playbook中使…

通过Nginx实现在浏览器查看Linux服务器日志

一、在nginx配置文件的server标签内加入以下标签和内容 location /logs {alias /data/nginx/logs;#nginx日志目录autoindex on;#打开目录浏览功能autoindex_exact_size off;#默认为on,显示出文件的确切大小,单位是bytes#显示出文件的大概大小,单位是kb或者mb或者gbautoinde…

直接选择排序算法

​​​​​​目录 选择排序 SelectSort直接选择排序 整体思路 图解分析 ​ 代码实现 时间复杂度 选择排序 基本思想&#xff1a; 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排…

【SV的面向对象 SV的类_2024.01.02】

OOP术语 OOP&#xff1a;object oriented programming Class类&#xff1a;包含变量和子程序的基本构建块 Object对象&#xff1a;类的一个实例 Handle句柄&#xff1a;指向对象的指针 Property属性&#xff1a;存储数据的变量&#xff1b;在V中&#xff0c;可以是wire或reg类…

java-场景题

1、超时关单 delayQueue 延迟队列不支持分布式RocketMQ 延迟投递Redis 设置过期时间监听过期事件定时任务&#xff08;阿里&#xff09; 定时任务搂数据库&#xff08;对数据库有压力&#xff09;超时中心 2、分布分表如何进行分页查询 采用es&#xff0c;由es完成分页查询&…

NOTA-马来酰亚胺,1295584-83-6,可作为过渡金属离子的配体

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;NOTA-马来酰亚胺&#xff0c;NOTA Maleimide &#xff0c;NOTA-Mal&#xff0c;1295584-83-6 一、基本信息 产品简介&#xff1a;NOTA Maleimide, also known as NOTA maleimide, is a novel bifunctional integrat…

【LeetCode每日一题】单调栈 402 移掉k位数字

402. 移掉 K 位数字 给你一个以字符串表示的非负整数 num 和一个整数 k &#xff0c;移除这个数中的 k **位数字&#xff0c;使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 &#xff1a; 输入&#xff1a;num "1432219", k 3 输出&#xff…

Sora不懂物理世界,翻车神图全网爆笑!LeCun马斯克DeepMind大佬激辩世界模型

大火的Sora&#xff0c;让许多动画、影视行业的人大为恐慌。 不过&#xff0c;今天网上广为流传的这张图&#xff0c;让大家倒是放心了不少。 可以看到&#xff0c;在这个视频中&#xff0c;玻璃杯碎裂的方式十分诡异—— 它被抬到半空中时&#xff0c;桌子上就忽然出现了一滩…

PWM功能介绍 和配置

泰山派默认提供了3组PWM的GPIO &#xff0c; 为了检测PWM的输出&#xff0c;我们可以配合逻辑分析仪来查看效果&#xff0c;或者搭配STC8的LED灯 PWM 测试 列举所有的PWM设备&#xff1a; # 查找所有有pwm名称的文件 find / -name "pwm" # pwm4: pwmfe6e0000 edp屏幕…

Vue2:Vuex中使用mapMutations和mapActions

一、情景说明 上一节&#xff0c;我们学会在vc的computed模块中&#xff0c;使用mapState和mapGetters来简化代码 这一节&#xff0c;我们学习在vc的methods模块中&#xff0c;使用mapMutations和mapActions来简化代码 在vc的methods中&#xff0c;我们会使用到store的dispat…

控制与状态机算法

控制与状态机算法是计算机科学、电子工程和自动化领域中常用的一种设计工具,它用来描述一个系统的行为,该系统在不同时间点可以处于不同的状态,并且其行为取决于当前状态以及输入的信号或事件。状态机算法的核心概念包括: 状态(State):系统的任何可能配置。每个状态代表…

【图像分割 2023 WACV】HiFormer

【图像分割 2023 WACV】HiFormer 论文题目&#xff1a;HiFormer: Hierarchical Multi-scale Representations Using Transformers for Medical Image Segmentation 中文题目&#xff1a;HiFormer:基于Transformer的分层多尺度表示医学图像分割 论文链接&#xff1a; 论文代码&a…

解决updatexml和extractvalue查询显示不全

报错注入是一种常见的SQL 注入方式&#xff0c;通过注入代码&#xff0c;触发数据库的错误响应&#xff0c;并从错误信息中获取有用的信息。 updatexml和extractvalue updatexml和extractvalue 是常用的两个报错注入函数 http://localhost/sqli/Less-5/?id1%27and%20updat…

【使用QT遇到的小问题】

使用QT遇到的小问题 error: cannot open output file debug_0219homework.exe: Permission denied 应该是由于没关多次ctrl r 运行项目导致的&#xff0c;解决办法&#xff0c;把项目关了&#xff0c;重新开下。 0.0醉了。