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

MySQL之主从复制

概述:

将主库的数据 变更同步到从库,从而保证主库和从库数据一致。

它的作用是 数据备份,失败迁移,读写分离,降低单库读写压力

原理:

主服务器上面的任何修改都会保存在二进制日志( Bin-log日志) 里面。 从服务器上面启动一个I/O线程, 连接到主服务器上面请求读取二进制(Bin-log)日志,然后把读取到的二进制日志写到本地的Realy-log(中继日志)里面。 从服务器上面同时开启一个SQL线程,读取Realy-log(中继日志),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。

搭建:

1.准备服务器

2.配置主库

3.配置从库

4.测试主从复制

实践

1.首先准备俩台安装MySQL的纯净服务器 

主库:192.168.231.153

从库:192.168.231.136  

关闭防火墙与selinux

在俩台服务器做域名解析

vim /etc/hosts

192.168.231.153  master

192.168.231.136  slave

俩台服务器都做如下操作:
同步时间,修改时区
#ntpdate time.windows.com
#timedatectl  set-timezero Asia/Shanghai修改主机名
#hostnamectl set-hostname  zhuku
#hostnamectl set-hostname   congku配置静态ip
# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
将dhcp改为static
IPADDR=本机ip
GATEWAY=192.168.231.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8

清理环境在安装MySQL之前

俩台服务器都需要做的操作
[root@slave ~]#yum -y erase `rpm -qa |  grep -E "mysql|mariadb"`
[root@slave ~]# rm -rf /etc/my*  /var/lib/mysql* /var/log/mysql*
#检查一下,环境清理干净没有
[root@slave ~]# [[ ! -f /etc/my.cnf ]] && [[ ! -d /var/lib/mysql ]] && [[ ! -f /usr/bin/mysql ]] && echo "数据库已清除" || echo "数据库未清理"

安装mysql

启动服务:
# systemctl start mysqld
寻找密码
grep password  /var/log/mysqld.log 
也可以
mysqladmin -p"`awk '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log`" password 'Qianfeng@123'
这条命令是直接登录MySQL,顺便将密码修改以后 可以登录也可以是,获取新的MySQL的密码
#  awk  '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log

2.配置主库:

创建日志目录并赋予权限

# mkdir /var/log/mysql
# chown  -R mysql.mysql /var/log/mysql

编辑主库服务器的配置文件 /etc/my.cnf

[mysqld]
log-bin=/var/log/mysql/mysql-bin       #启用二进制文件日志记录
server-id=1          # 服务id,保证整个集群环境唯一
read-only=0         #1是只读,0是读写

重启服务

# systemctl restart mysqld

在主库登录MySQL,创建用户

为了用户在从库中用来连接主库的账号


mysql>  grant replication slave on *.* to  '用户名'@'ip' identified by '密码';  
这是为用户分配主从复制的权限,并创建用户刷新:
mysql> flush  privileges;

查看二进制日志坐标

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      313 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

3.配置从库

编辑从库服务器的配置文件my.cnf

[mysqld]
server-id=2
read-only=1     #普通用户一般只有只读,可以不写

重启mysql服务

# systemctl restart mysqld

登录mysql

此处登录的是你从库mysql的root用户登录的账号与密码,不是在主库创建的用户

mysql>  change master to master_host='主库的ip',master_user='连接主库用户名',master_password='连接主库用户的密码',master_log_file='日志文件名',mastre_log_pos='日志位置';日志位置就是在主库show master status查出来那个数字   ----313+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      313 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

当你第一次记不住这么多命令时,可以直接

mysql > ? change master to出现下列,直接复制CHANGE MASTER TOMASTER_HOST='source2.example.com',MASTER_USER='replication',MASTER_PASSWORD='password',MASTER_PORT=3306,MASTER_LOG_FILE='source2-bin.001',MASTER_LOG_POS=4,MASTER_CONNECT_RETRY=10;然后: mysql > ?e
进入文本编辑器内,将复制的 内容进行修改 然后保存即可

启动:

mysql> start slave;

查看主从同步状态:

mysql> show slave status\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.231.153   -----主库的ipMaster_User: itcast     -----用来连接主库的用户名   Master_Port: 3306  ------端口Connect_Retry: 60Master_Log_File: mysql-bin.000001          -----二进制日志名字Read_Master_Log_Pos: 313Relay_Log_File: congku-relay-bin.000002   -----中继日志名字Relay_Log_Pos: 479Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: Yes         --------主要看俩个IO线程是否成功启动Slave_SQL_Running: Yes         --------看SQL线程是否成功启动Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: 

4.测试主从复制

主库!
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| company            |
| db1                |
| mysql              |
| performance_schema |
| school             |
| sys                |
| xian               |
+--------------------+
8 rows in set (0.00 sec)从库:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| xian               |
+--------------------+
5 rows in set (0.00 sec)

这是因为配置主从复制是在主库已经存在这些库以后配置的

!!!!在主库创建库,创建表,写入数据
mysql> create database db2;
mysql> create table db2.zhucong(id int,name varchar(50),age int);mysql> insert into zhucong(id,name,age) values(1,'aaa',18),values(2,'bbb',19) ,(3,'ccc',20);mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   18 |
|    2 | bbb  |   19 |
|    3 | ccc  |   20 |
+------+------+------+
3 rows in set (0.00 sec)!!!在从库查看
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db2                |
| mysql              |
| performance_schema |
| sys                |
| xian               |
+--------------------+mysql> use db2;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| zhucong       |
+---------------+
1 row in set (0.00 sec)mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   18 |
|    2 | bbb  |   19 |
|    3 | ccc  |   20 |
+------+------+------+

修改主库中的表数据,查看从库是否有变化

主库:
mysql> update zhucong set age=21;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   21 |
|    2 | bbb  |   21 |
|    3 | ccc  |   21 |
+------+------+------+
3 rows in set (0.00 sec)查看从库:
mysql> select * from zhucong;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | aaa  |   21 |
|    2 | bbb  |   21 |
|    3 | ccc  |   21 |
+------+------+------+
3 rows in set (0.00 sec)

配置好主从复制以后,从库记录的只是主库以后的日志文件,要想从库备份主库之前的可以,先将主库之前的数据库文件备份然后拷贝到从库,然后从库在进行恢复即可。

当从库所在的服务器关闭后,主库所执行操作,当从库服务器再次开启时,从库服务器会自动同步主库服务器

附加:

获取本机的uuid

[root@slave ~]# uuidgen 
b392cd4c-9e3d-4596-9a72-0805c2162c8f

修改本机的uuid

#  vim /var/lib/mysql/auto.cnf

base64加密与解密

[root@slave mysql]# echo “马龙” | base64 
4oCc6ams6b6Z4oCdCg==
[root@slave mysql]# echo "4oCc6ams6b6Z4oCdCg==" | base64 -d
“马龙”

相关文章:

MySQL之主从复制

概述: 将主库的数据 变更同步到从库,从而保证主库和从库数据一致。 它的作用是 数据备份,失败迁移,读写分离,降低单库读写压力 原理: 主服务器上面的任何修改都会保存在二进制日志( Bin-log日志…...

[leetcode 单调栈] 901. 股票价格跨度 M

设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。 例如,如果未来 7 天股票的价格是 [100…...

Java线程池:并发编程的利器

Java线程池:并发编程的利器 在多任务、高并发的时代,Java并发编程显得尤为重要。其中,Java线程池是一种高效的管理线程的工具,能够提高应用程序的性能和响应速度。本文将深入探讨Java线程池的工作原理、应用场景以及简单示例&…...

ARM硬件断点

hw_breakpoint 是由处理器提供专门断点寄存器来保存一个地址,是需要处理器支持的。处理器在执行过程中会不断去匹配,当匹配上后则会产生中断。 内核自带了硬件断点的样例linux-3.16\samples\hw_breakpoint\data_breakpoint.c static void sample_hbp_h…...

Java使用WebSocket(基础)

准备一个html页面 <!DOCTYPE HTML> <html> <head><meta charset"UTF-8"><title>WebSocket Demo</title> </head> <body><input id"text" type"text" /><button onclick"send()&…...

图像处理与计算机视觉--第五章-图像分割-自适应阈值分割

文章目录 1.自适应阈值分割介绍2.自适应阈值函数参数解析3.高斯概率函数介绍4.自适应阈值分割核心代码5.自适应阈值分割效果展示6.参考文章及致谢 1.自适应阈值分割介绍 在图片处理过程中&#xff0c;针对铺前进行二值化等操作的时候&#xff0c;我们希望能够将图片相应区域内所…...

记一次问题排查

1785年&#xff0c;卡文迪许在实验中发现&#xff0c;把不含水蒸气、二氧化碳的空气除去氧气和氮气后&#xff0c;仍有很少量的残余气体存在。这种现象在当时并没有引起化学家的重视。 一百多年后&#xff0c;英国物理学家瑞利测定氮气的密度时&#xff0c;发现从空气里分离出来…...

【Spring Boot】创建一个 Spring Boot 项目

创建一个 Spring Boot 项目 1. 安装插件2. 创建 Spring Boot 项目3. 项目目录介绍和运行注意事项 1. 安装插件 IDEA 中安装 Spring Boot Helper / Spring Assistant / Spring Initializr and Assistant插件才能创建 Spring Boot 项⽬ &#xff08;有时候不用安装&#xff0c;直…...

flutter中使用缓存

前言 在flutter项目中使用ListView或者PageView等有滚动条组件的时候&#xff0c;切换页面的时候&#xff0c;再切换回来会丢失之前的滑动状态&#xff0c;这个时候就需要需要使用缓存功能 缓存类 import package:flutter/material.dart;class KeepAliveWrapper extends Sta…...

京东数据分析平台:9月中上旬白酒消费市场数据分析

9月份&#xff0c;围绕白酒的热点不断。9月5日&#xff0c;瑞幸咖啡官微发布消息称&#xff0c;瑞幸与贵州茅台跨界合作推出的酱香拿铁刷新单品纪录&#xff0c;首日销量突破542万杯&#xff0c;销售额破1亿元。9月14日&#xff0c;贵州茅台官微发布消息称与德芙推出联名产品“…...

Linux安装 spark 教程详解

目录 一 准备安装包 二 安装 scala 三 修改配置文件 1&#xff09;修改 workers 文件 2&#xff09;修改 spark-env.sh文件 四 进入 spark 交互式平台 一 准备安装包 可以自行去 spark 官网下载想要的版本 这里准备了 spark3.1.2的网盘资源 链接: https://pan.baidu.com…...

动态内存管理函数(malloc,calloc,realloc,free)

动态内存函数 1.1malloc和free C语言提供了一个动态内存开辟的函数&#xff1a; void* malloc (size_t size); 这个函数向内存申请一块连续可用的空间&#xff0c;并返回指向这块空间的指针。 如果开辟成功&#xff0c;则返回一个指向开辟好空间的指针。如果开辟失败&#…...

云表|都有生产管理模块,MES和ERP有什么不同,该如何选择

MES和ERP是生产制造领域的两大知名系统&#xff0c;虽然早已声名鹊起&#xff0c;但仍有不少人难以明确区分两者的差异。下面将详细阐述这两个系统的不同之处。首先&#xff0c;要了解MES和ERP的定义。 MES系统&#xff1a;全称制造执行系统&#xff08;Manufacturing Executio…...

C语言 - 数组

目录 1. 一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 3. 数组越界 4. 数组作为函数参数 4.1…...

Vue 中的插槽(Slot),有什么用,不同插槽的区别?

Vue 中的插槽&#xff08;Slot案例详解&#xff09; 是一种非常有用的功能&#xff0c;用于组件之间的内容分发和复用。以下是关于插槽的一些重要概念&#xff1a; 插槽的作用: 插槽允许你将组件的内容分发到其子组件中&#xff0c;以实现灵活的组件复用和自定义布局。通过插槽…...

Linux登录自动执行脚本

一、所有用户每次登录时自动执行。 1、在/etc/profile文件末尾添加。 将启动命令添加到/etc/profile文件末尾。 2、在/etc/profile.d/目录下添加sh脚本。 在/etc/profile.d/目录下新建sh脚本&#xff0c;设置每次登录自动执行脚本。有用户登录时&#xff0c;/etc/profile会遍…...

架构方法、模型、范式、治理

从架构方法、模型、范式、治理等四个方面介绍架构的概念和方法论、典型业务场景下的架构范式、不同架构的治理特点这3个方面的内容...

Linux 安全 - 内核提权

文章目录 前言一、简介1.1 prepare_creds1.2 commit_creds 二、demo参考资料 前言 在这篇文章&#xff1a;Linux 安全 - Credentials 介绍了 Task Credentials 相关的知识点&#xff0c;接下来给出一个内核编程提权的例程。 一、简介 内核模块提权主要借助于 prepare_creds …...

数字三角形加强版题解(组合计数+快速幂+逆元)

Description 一个无限行的数字三角形&#xff0c;第 i 行有 i 个数。第一行的第一个数是 1 &#xff0c;其他的数满足如下关系&#xff1a;如果用 F[i][j] 表示第 i 行的第 j 个数&#xff0c;那么 F[i][j]A∗F[i−1][j]B∗F[i−1][j−1] &#xff08;不合法的下标的数为 0 &a…...

MySQL:主从复制-基础复制(6)

环境 主服务器 192.168.254.1 从服务器&#xff08;1&#xff09;192.168.254.2 从服务器&#xff08;2&#xff09;192.168.253.3 我在主服务器上执行的操作会同步至从服务器 主服务器 yum -y install ntp 我们去配置ntp是需要让从服务器和我们主服务器时间同步 sed -i /…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...