MyCat01——如何实现MySQL中的主从复制

news2024/11/15 5:41:09

1 问题

数据对于我们来说是一项最重要的资产,因为数据丢失带来的损失,对于一家公司来说,有时也是毁灭性的。

那么如何确保数据安全,不因断电或系统故障带来数据丢失呢?

当用户增加,对数据库的访问量也随之升高,如何提高数据库性能,降低访问量增长对数据带来的压力呢?

主从复制无疑是其中一个比较好的选择,将主库的数据复制到多个从库中,如果主库挂掉,从库的数据也是完整的,能够继续为用户提供服务。

同时可以对数据库进行读写分离操作,主库用于数据的写入,而从库则用于数据的读取。

2 binlog 日志

2.1 什么是 binlog

是 MySQL 中最重要的一种日志,它记录了 MySQL 所有数据的变更,并以二进制的形式存储在磁盘上,这些变更包括了所有的表结构变更(CREATE、ALTER TABLE…)以及表数据变更(INSERT、UPDATE、DELETE…),不包括 SELECT 。

也是实现主从复制的数据来源。

binlog 日志有三种记录格式:

  • statement 每次数据变更的 sql 都会被记录;
  • row 仅记录被修改的数据;
  • mixed 上述两种方式混合使用,一般的语句修改采用 statement,当全表更新时则采用 row,但是这种模式下无法使用 @@host name 函数。

2.2 binlog 日志相关的命令

登录进入到mysql的命令行中:

查看日志位置

show variables like '%log_bin%';

查看日志格式,这里的格式是指三种记录日志的格式

show variables like '%format%';

查看当前使用的日志文件

show master status;

3 主从复制的原理

从数据库中开启两个线程:

一个用于监控主数据库 binlog 日志的变化,如果有更新,就将其读取出来并写入到从数据库的 relay log 中;

另一个线程用于监控本地的 relay log 日志的变化,如果有更新,就将更新内容在本地执行一遍,这样就保证了从数据库与主数据库数据的一致性。

4 搭建主从复制

4.1 安装MySQL数据库

这里默认已经安装了至少两个MySQL数据库,如果有不清楚怎么安装的,可以在网上进行搜索。

4.2 开启数据库的 Binlog 日志

在主数据库 MySQL 的配置文件中增加两项配置

在从数据库也增加同样的配置,server-id 不能相同,需要改为 102。

设置完成后,需要重新启动数据库。

4.3 配置用于读取主数据库的用户

4.3.1 主数据库中的操作

首先,需要在主数据库中创建 binlog 日志的读用户,允许从数据库使用 slave 这个用户访问主数据库。

查看数据库中日志文件状态

show master status;

记住其中的两项参数,下边将在从库中需要使用。

在主数据库的命令行中执行:

grant replication slave on *.* to 'slave'@'%' identified by '123456';

4.3.2 从数据库中的操作

在从库中配置主库连接信息

命令中的各项信息,需要和主库中查询到的内容一致。

  • master_host 主库的IP地址
  • master_user 主库的用户
  • master_password 主库的密码
  • master_log_file 主库当前正在使用的 binlog 文件
  • master_log_pos 主库当前 binlog 文件位置

change master to master_host='192.168.1.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=106;

查看从库状态

show slave status \G;

如果其中 Slave_IO_Running Slave_SQL_Running 参数都为YES时,表示同步正常。

否则需要查看是否是 防火墙的问题,或者是 数据库配置文件中 Server-id 相同导致的。

至此,只要在主库中做出修改数据的操作,从库中的数据将被自动刷新。

5 解除主从复制

进入到从库的命令行中,执行如下操作

mysql> stop slave;
Query OK, 0 rows affected (0.08 sec)

mysql> reset slave all;
Query OK, 0 rows affected (0.18 sec)

mysql> show slave status\G;
Empty set (0.00 sec)

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

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

相关文章

推荐一款好用的时序预测工具——Alibaba DChain Forecast

前言 绝大部分行业场景,尤其是互联网、量化行业,每天都会产生大量的数据。金融领域股票价格随时间的走势;电商行业每日的销售额;旅游行业随着节假日周期变化的机票酒店价格等。我们称这种不同时间收到的,描述一个或多…

Ajax技术的秘密揭秘:异步传输,高效交互

文章目录 I. 什么是AjaxAjax的定义和起源Ajax与传统的Web应用程序之间的区别 II. Ajax的工作原理Ajax的基本原理Ajax如何通过异步传输实现无需刷新页面 III. Ajax的应用场景在Web应用程序中应用Ajax的优势Ajax在哪些场景中使用 IV. Ajax的组成部分和APIXHR对象FormData对象Fetc…

用postman进行web端自动化测试

目录 前言 一、抓包(使用Charles抓包工具) 二、选择请求方法 三、填写url地址 四、填写Header 五、填写body 六、断言(Tests页) 七、获取动态参数——例如token 八、设置静态参数(请求地址、账号密码等&#x…

【Django-功能优化】存储、循环、操作选择对代码性能的影响

功能开发背景 港口货轮需要进行集装箱的装卸任务: 船上的每一个集装箱,可以用三个维度的坐标来唯一定位:(bay, column, layer),这三个维度结合其他一些固有信息,构成了一个箱子的字段属性,存储在箱子数据表…

百度的人脸识别的技术

百度的人脸识别的技术 1.基本概念 分组:分组ID(group_id):分组ID用于对一组相关的人脸进行分组和管理。你可以根据自己的需求,将不同的人脸数据分配到不同的分组中。例如, 你可以根据人员的职位、部门或其…

Nginx优化安全防盗链

1.Nginx的页面优化 1.1 Nginx的网页压缩 在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改,就能实现Nginx页面的压缩,达到节约带宽,提升用户访问速度 1.2 配置Nginx的图片缓存 当Nginx将网页数据返回给…

阿里云企业邮箱免费版、标准版、集团版和尊享版区别

阿里云企业邮箱版本分为免费版、标准版、集团版和尊享版,除了价格区别,功能方面有什么差异?如何选择企业邮箱版本?免费版0元适合初创型企业,标准版适合大、中、小型企业使用,涉及子公司之间邮箱通讯可以选择…

jQuery学习

原生实现计数器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

getopt_long 函数的使用

getopt_long 函数的使用网上已经有很多了&#xff0c;这里只是记录一下方便自己后续查找。首先函数原型声明&#xff1a; #include <getopt.h>int getopt_long(int argc, char *argv[],const char *optstring,const struct option *longopts, int *longindex); 函数是用…

Navicat使用导入向导批量插入数据到数据库

Mybatis,"可持久层数据库框架" Html,"超文本标记语言" Css,"网页外设计语言" JavaScript,"用户行为交互" Jquery,"提升网页开发效率的一种框架" Vue,"前端开发框架" Vant,"前开发预装组件库" git,"…

SM2算法对比RSA算法,有哪些优势?

SM2算法和RSA算法都是公钥密码算法&#xff0c;SM2算法是一种更先进安全的算法&#xff0c;在安全性能、速度性能等方面都优于RSA算法&#xff0c;在我国商用密码体系中被用来替换RSA算法。国家密码管理局于2010年12月17日发布了SM2算法&#xff0c;并要求现有的基于RSA算法的电…

《面试1v1》Redis基础

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

Golang/Python 调用 openAI 的API 详解

学习目标&#xff1a; OpenAI API介绍 学习如何通过 Golang 使用 OpenAI 的 API OpenAI 的常用的参数及其说明 了解OpenAI API 中令牌&#xff08;tokens) OpenAI API 提供了几个不同的终端点&#xff08;endpoints&#xff09;和模式&#xff08;modes&#xff09; 复杂和…

【已解决】Java 中导入excel时使用 trim() 无法去除空格的解决方法

使用trim无法去除空格的解决方法 一、问题描述二、原因分析三、解决方案方案一&#xff1a;使用正则表达式方案二&#xff1a;使用String.strip()方案三&#xff1a;使用 hutool的 StrUtil.trim()方法 四、总结 一、问题描述 在excel导入操作时&#xff0c;读取cell中的字符串…

自学Python 69 Selenium八大元素定位方法(新版BY方法)

Python Selenium八大元素定位方法(新版BY方法) 文章目录 Python Selenium八大元素定位方法(新版BY方法)前言一、常用的八种定位方法&#xff08;新旧对比&#xff09;二、查看网页元素三、八大元素定位示例1、id定位2、name定位3、class定位4、tag定位5、link定位6、partial_li…

MySQL - 第9节 - MySQL内外连接

目录 1.内连接 2.外连接 2.1.左外连接 2.2.右外连接 3.简单案例 1.内连接 • 表的连接分为内连接和外连接。 • 内连接实际上就是利用where 子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们前面学习的查询都是内连接&#xff0c;也是在开发过程中使用的最多的连接查…

【C++】模板初级内容(函数模板,类模板)

文章目录 前言一、函数模板1.1 函数模板概念1.2函数模板格式1.3模板的原理&#xff1a;1.4函数模板的实例化 二、类模板2.1 类模板的定义格式2.2定义与声明分离要注意的点 前言 告诉编译器一个模子&#xff0c;让编译器根据不同的类型利用该模子来生成代码 模板分为函数模板与类…

MES系统常用的数据采集网关

随着制造业的数字化转型&#xff0c;MES&#xff08;制造执行系统&#xff09;在生产过程中的重要性日益凸显。MES系统作为连接企业资源和生产现场的桥梁&#xff0c;需要实时、准确地采集和整合工业设备的数据&#xff0c;以支持生产调度、质量管理、库存控制等关键业务。为了…

探索Gradio Audio模块的change、clear和play方法

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

C#常见技能_封装

大家好&#xff0c;我是华山自控编程朱老师 前几天一个学员在学习C#与封装交互时,也不知道封装可以用来做什么 。下面我们就详细讲讲C# 和封装交互的相关知识。 C#是一种面向对象的编程语言&#xff0c;封装是面向对象编程中的一个重要概念&#xff0c;通过封装可以将数据和操…