数据库主从复制

一、主从复制概述

1、介绍:

主从复制是指将主数据库的 DDL 和 DML 操作写入到二进制日志中,将二进制日志传送到从库服务器,然后在从库上对这些日志重新执行(重做),从而使得从库和主库的数据保持同步。

MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库(链状复制)。

2、优点:

MySQL 复制的优点主要包含以下三个方面:

① 主库出现问题,可以快速切换到从库提供服务。

② 实现读写分离,降低主库的访问压力。

③ 可以在从库中执行备份,以避免备份期间影响主库服务。

3、原理:

① Master 主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中。

② 从库的IO线程读取主库Binlog日志中的事务,并写入到从库的中继日志Relay log中。

③ 从库的SQL线程读取中继日志Relay log中的事务,并在从库上执行,从而实现主从同步。

二、主从复制实现

1、环境准备:

准备好两台服务器之后,分别安装MySQL,关闭防火墙,并完成基础的初始化准备(安装、 密码配置等操作)工作。

master:10.1.1.10

slave:10.1.1.20

2、主库配置:

(1) 修改配置文件:

vim /etc/my.cnf

#mysq1 服务ID,用于在主从复制中标识服务器的唯一身份,保证整个集群环境中唯一。取值范围:1-2^32-1,默认为1

server-id=1

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

read-only=0

#忽略的数据,指不需要同步的数据库

#binlog-ignore-db=mysql

#指定同步的数据库

#binlog-do-db=db01

systemctl restart mysqld

(2) 创建远程连接账号并授权:

① 创建远程连接的用户名为itcast,密码为6666,可让任意主机连接。从库可通过此用户名和密码登录主库,获取binlog日志。

CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY'6666' ;

如果报这个错误:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

则要先修改mysql的密码策略:

set global validate_password.policy=0;

set global validate_password.length=4;

② 为'itcast'@'%'用户分配主从复制权限:

GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

(3) 查看二进制日志坐标:

show master status ;

file:事务写到了哪个文件

position:事务写到了文件的哪个位置

从库需要从binlog.000006的663之后开始主从复制。

3、从库配置:

(1) 修改配置文件:

vim /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可

server-id=2

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

read-only=1

systemctl restart mysqld

(2) 设置连接主库的信息:

CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.1.1.10', SOURCE_USER='itcast', SOURCE_PASSWORD='6666', SOURCE_LOG_FILE='binlog.000006', SOURCE_LOG_POS=663;

(3) 开启主从同步:

start replica ; #8.0.22之后

start slave ; #8.0.22之前

(4) 查看主从同步状态:

show replica status\G ; #8.0.22之后

show slave status\G ; #8.0.22之前

4、验证主从同步:

在主库上创建数据库、表,并插入数据:

create database itcast;

use itcast;

create table tb_user(

id int(11) not null,

name varchar(50) not null,

sex varchar(1),

primary key (id)

)engine=innodb default charset=utf8;

insert into tb_user(id,name,sex) values(1,'Tom','1');

insert into tb_user(id,name,sex) values(2,'Trigger','0');

insert into tb_user(id,name,sex) values(3,'Dawn','1');

验证从库是否同步数据:

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

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

相关文章

百面算法工程师 | 分类网络总结

欢迎大家订阅我的专栏一起学习共同进步,主要针对25届应届毕业生 祝大家早日拿到offer! lets go http://t.csdnimg.cn/dfcH3 目录 4. 经典分类网络与发展 4.1 AlexNet 4.2 VGGNet 4.3 GoogLeNet Inception 4.4 ResNet 4.5 DenseNet 4.6 MobileN…

C#中的浅拷贝(Shallow Copy)和深拷贝(Deep Copy),深拷贝的集中实现方式,浅拷贝深拷贝的案例

C#中的浅拷贝(Shallow Copy)和深拷贝(Deep Copy) 拷贝就是创建一个对象,这个对象有着原始对象数据(属性和字段)的一份精确拷贝(只针对Object和Array这样的引用数据类型)…

mysql面试题七(集群)

目录 1.mySQL 中有哪些常见日志 错误日志(Error Log) 二进制日志(Binary Log, Binlog) 重做日志(Redo Log) 回滚日志(Undo Log) 慢查询日志(Slow Query Log&#xf…

截断堆积柱状图

本教程原文链接:截断堆积柱状图绘制教程 欢迎大家转载!!!! 本期教程 写在前面 堆积柱状图是柱状图的常见类型之一,也是平时使用概率较高的图形之一。我们前期发布了很多个柱状图的绘制教程,若你…

java学习笔记4

7. 二维数组 7.1 定义 二维数组及就是数组的嵌套,数组的元素还是数组; 二维数组是一个 元素为一维数组 的一维数组; 语法上Java支持多维数组,但从内存分配原理的角度看,Java中只有一维数组,没有多维数组; 7.2 二维数组的初始化和赋值 7.2.1 长度已知 数据类型[][] 数…

【工厂模式】简单工厂模式-简单例子

目录 一、简单介绍 二、未使用工厂模式之前 三、简单工厂模式 初始 优化 总结 一、简单介绍 工厂模式是一种软件设计模式,用于创建对象的方法。在工厂模式中,创建对象的逻辑被封装在一个单独的类中,该类负责根据特定条件或参数创建合适…

windows下使用命令uvicorn启动fastapi程序有乱码,方框形状奇怪字符

问题简述 执行命令uvicorn main:app --reload后出现的问题如图所示 这个问题非常容易解决! 原因是windows控制台 默认未开启 ANSI颜色的支持 那么我们只需要开启就可以了 轻松解决 1 按下winR 打开运行 2 输入regedit 点击确定编辑注册表 3 新建值 值的名称为…

探索PostCSS:打造定制化、前瞻性的现代CSS开发工作流

PostCSS,作为一个高度可扩展的CSS处理器,以其强大的插件系统和对CSS未来特性的前瞻支持,已经成为现代前端开发中的重要工具。本篇文章将深入探讨PostCSS的核心概念、工作原理、主要优势,以及如何利用它来提升CSS开发效率与代码质量…

vue3组件封装系列-表单请求

我们在开发一些后台管理系统时,总是会写很多的列表查询页面,如果不封装组件,就会无限的复制粘贴,而且页面很冗余,正常情况下,我们都是要把组件进行二次封装,来达到我们想要效果。这里我分享一下…

《中学科技》是什么级别的刊物?如何投稿?

《中学科技》是什么级别的刊物?如何投稿? 《中学科技》创刊于1976年,由上海世纪出版(集团)有限公司主管,上海科技教育出版社有限公司主办的省级学术期刊,《中学科技》以传播科技知识、启迪智慧…

Centos安装软件失败There are no enabled repos.

这个错出现的原因可能是:没有先安装wget源,就把源给备份了 解决方案: 下载对应版本repo文件, 放入/etc/yum.repos.d/里,下载地址:CentOS镜像使用帮助 查看自己CentOS的版本,下载对应的repo文件&#xff…

spring boot中的标注@Component、@Service等

让我告诉你什么叫水货。 一、水货横行 一直以来,我对Spring Boot项目中的标注,像Component啦、Service啦、Configuration啦,甚至Autowired啦,等等,都似懂非懂。Autowired与Resource有什么区别也不清楚。 个中原因&a…

LearnOpenGL(三)之GLSL

一、GLSL 着色器是使用一种叫GLSL的类C语言写成的。 着色器的开头总是要声明版本,接着是输入和输出变量、uniform 和main函数。每个着色器的入口点都是main函数,在这个函数中 我们处理所有的输入变量,并将结果输出到输出变量中。 二、数据…

XiaodiSec day026 Learn Note 小迪渗透学习笔记

XiaodiSec day026 Learn Note 小迪渗透学习笔记 记录得比较凌乱,不尽详细 day26 sql 注入 知识点 oracle & Mongodb 相关手动注入 开始 sqlmap 不支持 nosql –purge 清除缓存 –current-db 查看当前数据库 –dump -r 直接使用数据包访问,在…

2-Embedding例子:简单NN网络、迁移学习例子(glove语料预训练)

一、简单例子:构造简单NN网络生成Embedding 1、pytorch例子 2、tensorflow例子 # 1导入模块 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Embedding import numpy as np# 2构建语料库 corpus[[…

4.15 day6 ARM

uart.c #include "uart4.h" void uart4_config() {RCC->MP_AHB4ENSETR | (0X1 << 6);//&#xff27;RCC->MP_AHB4ENSETR | (0X1 << 1);//BRCC->MP_APB1ENSETR | (0X1 << 16);//UART4 //管脚复用GPIOG->MODER & (~(0X3 << …

Linux命令接着学习

which命令&#xff0c;找到各种命令程序所处在的位置 语法&#xff1a;which查找的命令 那么对于我们想查找其他类型文件所在的位置&#xff0c;我们可以用到find命令 find命令 选项为-name&#xff0c;表示按照文件名进行查找 find命令中通配符 find命令和前面rm命令一样&…

MT3023 歌词中找单词

1.暴力 10/12 #include <bits/stdc.h> using namespace std; int n; string a[10005]; int main() {cin >> n;for (int i 0; i < n; i)cin >> a[i];string ll;cin >> ll;for (int i 0; i < n; i){string u a[i];int num 0;int j 0;for (in…

解线性方程组——追赶法解三对角方程组 | 北太天元

一、问题描述 对于线性方程组 A x b , A ( b 1 c 1 a 2 b 2 c 2 ⋱ ⋱ ⋱ ⋱ ⋱ ⋱ a n − 1 b n − 1 c n − 1 a n b n ) , b ( f 1 f 2 ⋮ f n ) Axb,\quad A\begin{pmatrix}b_1&c_1&&&&\\a_2&b_2&c_2&&&\\&\ddots&\d…

CentOS 7安装、卸载MySQL数据库(一)

说明&#xff1a;本文介绍如何在CentOS 7操作系统下使用yum方式安装MySQL数据库&#xff0c;及卸载&#xff1b; 安装 Step1&#xff1a;卸载mariadb 敲下面的命令&#xff0c;查看系统mariadb软件包 rpm -qa|grep mariadb跳出mariadb软件包信息后&#xff0c;敲下面的命令…