Linux数据库主从复制(单主单从)

MySQL主从复制的优点包括:

1、横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可以在一个或多个从设备上进行。该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。

2、数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。

3、分析 - 可以在主服务器上创建实时数据,而信息分析可以在从服务器上进行,而不会影响主服务器的性能。

4、备份 - 可以使用从服务器数据进行备份,减轻主服务器的压力。

Replication的原理

原理 主服务器上面的任何修改都会保存在二进制日志( Bin-log日志) 里面。
1、从库上面启动一个I/O线程,(5.5以后多线程)连接到主服务器上面请求读取二进制(Bin-log)日志文件

2、把读取到的二进制日志写到本地的Realy-log(中继日志)里面

3、从服务器上面同时开启一个SQL线程,读取Realy-log(中继日志),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。
注:前提是作为主服务器角色的数据库服务器必须开启二进制(binlog)日志

主库机无数据配置主从

主从同时操作

1.准备环境

#防火墙 selinux
[root@m ~]# systemctl stop firewalld --now && setenforce 0

# 修改主机名
[root@m ~]# hostnamectl set-hostname master

# 固定IP
[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static                #静态ip          
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes                              #网卡开机自启
IPADDR=110.12.155.112              #需要固定的ip地址
PREFIX=24                                   #子网掩码
GATEWAY=10.12.155.250           #网关
DNS1=223.5.5.5
DNS2=223.6.6.6

保存退出后重启网卡
[root@master ~]# systemctl restart network

注:为防止配对成功以后ip地址改变出现连接问题

2.主机名解析

主机名解析
[root@master ~]# vim /etc/hosts #添加以下内容

10.12.155.112 master    #主库机ip和主机名
10.12.155.113 slave     #从库机ip和主机名

3.清理环境

# 清理系统数据库
[root@master ~]# yum -y erase `rpm -qa | egrep "mysql|mariadb"`

[root@master ~]# rm -rf /etc/my* && rm -rf /var/lib/mysql && rm -rf /usr/bin/mysql

# 检查一下
[[ ! -f /etc/my.cnf ]] && [[ ! -d /var/lib/mysql ]] && [[ ! -f /usr/bin/mysql ]] && echo "环境已经清理完成" || echo "环境未清理"

4.安装数据库

#1、yum安装
(安装数据库步骤请看博主前面的文章)
https://blog.csdn.net/yz2322944912/article/details/135071777?spm=1001.2014.3001.5502

#2、启动数据库
[root@master ~]# systemctl start msyqld

#3、修改密码
[root@master ~]# mysqladmin -uroot -p"`awk '/temporary password/{p=$NF}END{print p}' /var/log/mysqld.log`" password '新密码'

配置主库[master]

#开启binlog
[root@master ~]# mkdir -pv /data/                          # 创建二进制日志文件的存储目录

[root@master ~]# chown mysql.mysql /data         #改属主属组为mysql

[root@master ~]# vim /etc/my.cnf                           #编辑mysql配置文件添加以下内容
server-id=328                                 #id号可自定义
log-bin=/data/mysql-bin               #日志文件名可自定义

# 重启数据库
[root@master ~]# systemctl restart msyqld

# 创建并授权一个账号
mysql> grant replication slave on *.* to '账号名'@'授权网段或ip' identified by '账号的密码';

mysql> flush privileges;

# 查看当前binlog日志文件以及pos位置点
mysql> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000001
        Position: 606
    Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

配置从库[slave]

#编辑mysql配置文件添加server-id
[root@slavr ~]# vim /etc/my.cnf
server-id=329

# 重启数据库
[root@slavr ~]# systemctl restart msyqld
#登录数据库​后执行
mysql> ? change master to               #查找需要插入的配置主从信息模板

#模板如下 修改配置信息后并执行
mysql> CHANGE MASTER TO
  MASTER_HOST='master',
  MASTER_USER='账号名',
  MASTER_PASSWORD='账号的密码',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=606,
  MASTER_CONNECT_RETRY=10;
默认为图

 
# 启动slave
mysql> start slave;

# 查看主从状态
mysql> show slave status\G

主从状态显示

mysql> show slave status\G 
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: masterMaster_User: relicationMaster_Port: 3306Connect_Retry: 10Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 154Relay_Log_File: slave-relay-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-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: 154Relay_Log_Space: 527Until_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: 203Master_UUID: 6f6d0551-a073-11ee-9f28-000c298a6e96Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_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: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 
1 row in set (0.00 sec)

需注意

## 14 15行 :两个YES表示主从成功

## 关注39-42的信息

## 38行表示主从复制延迟时间

## 46行主库mysqlUUID要和从库mysql的UUID不一致

如有问题要重新配置主从

#首先关闭线程服务
mysql>stop slave;
#重新修改配置主从信息
mysql> reset slave;
mysql>CHANGE MASTER TO
  MASTER_HOST='master',
  MASTER_USER='relication',
  MASTER_PASSWORD='Qianfeng@123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154,
  MASTER_CONNECT_RETRY=10;
 
# 启动slave
mysql>start slave;

#继续查看主从状态 直到成功
mysql> show slave status\G

主库机有数据配置主从

配置主库[master]

#创建授权账号
mysql> grant replication slave on *.* to '账号名'@'授权网段或ip' identified by '账号的密码';
#刷新数据库生效
mysql>flush privileges;

# 创建必要目录
[root@master ~]# mkdir /data
[root@master ~]# chown mysql.mysql /data

# 修改配置文件
[root@master ~]# vim /etc/my.cnf
server-id = 328
log-bin = /data/mysql-bin

# 重启数据库
[root@master ~]# systemctl restart mysqld

进入数据库并且锁表备份(重点)

锁表备份
mysql>flush tables with read lock;

#新开一个终端备份全库
[root@master ~]# mysqldump -uroot -p密码 -A | gzip > all.sql.gz

#将备份好的全库文件压缩包远程拷贝至从库
[root@master ~]# scp  all.sql.gz slave:需要存放的位置

#返回登录mysql的终端查看二进制日志文件以及位置点信息
mysql>show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000001
        Position: 1205
    Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

配置从库[slave]

#导入主库备份的数据全库
[root@slave ~]# mysql -uroot -p密码 < all.sql

#配置主从
[root@slave ~]# vim /etc/my.cnf
server-id = 329

# 重启数据库
[root@slave ~]# systemctl restart mysqld

修改主从配置信息并执行
mysql>change master to
master_host='master',
master_user='replication',
master_password='Aa@123456',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=1250;

#启动slave
mysql>start slave;

# 查看主从状态
mysql> show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: masterMaster_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 154Relay_Log_File: slave-relay-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-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: 154Relay_Log_Space: 527Until_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: 203Master_UUID: 5aad69d6-a09e-11ee-b909-000c298a6e96Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_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: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 

主库解锁

mysql> unlock tables; 或者 直接退出mysql数据库自动解锁

还可以通过打开gtid配置主从,但是太鸡肋了不建议使用

感谢观看!希望能够帮助到大家!

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

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

相关文章

【接口测试】如何定位BUG的产生原因

我们从在日常功能测试过程中对UI的每一次操作说白了就是对一个或者多个接口的一次调用&#xff0c;接口的返回的内容(移动端一般为json)经过前端代码的处理最终展示在页面上。http接口是离我们最近的一层接口&#xff0c;web端和移动端所展示的数据就来自于这层&#xff0c;那么…

用C爬取人人文库并分析实现免积分下载资料

最近有个学妹学习遇到问题&#xff0c;想要的学习资料都在文库中&#xff0c;因为资料太多太杂&#xff0c;想要一篇篇找太难了&#xff0c;主要是太浪费精力了。因此&#xff0c;听说这个事情我能解决&#xff0c;立马找到我&#xff0c;给我一杯奶茶就把我收买了&#xff0c;…

【Seata源码学习 】 扫描@GlobalTransaction注解 篇一

1. SeataAutoConfiguration 自动配置类的加载 基于SpringBoot的starter机制&#xff0c;在应用上下文启动时&#xff0c;会加载SeataAutoConfiguration自动配置类 # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfigurationio.seata.spring.boot.aut…

DPDK单步跟踪(3)-如何利用visual studio 2019和visual gdb来单步调试dpdk

准备工作 因为时间的关系&#xff0c;我想到哪说到哪&#xff0c;可能没那么高的完成度。 但其实有心的人&#xff0c;看到这个标题&#xff0c;就关了本文自己能做了。 why和how to build debug version DPDK,见前两篇。这里我们准备开始。 首先&#xff0c;你有一台linux机…

算法题系列7·获得数组中多数元素

目录 题目描述 实现 提交结果 题目描述 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;…

第11章 GUI Page400~402 步骤二 画直线

运行效果&#xff1a; 源代码&#xff1a; /**************************************************************** Name: wxMyPainterApp.h* Purpose: Defines Application Class* Author: yanzhenxi (3065598272qq.com)* Created: 2023-12-21* Copyright: yanzhen…

黑芝麻智能与亿咖通科技签署战略合作协议,深化协同助力智能驾驶量产落地

12月22日&#xff0c;全球智能汽车计算芯片引领者黑芝麻智能与全球出行科技企业亿咖通科技共同签署战略合作协议&#xff0c;通过深化合作&#xff0c;整合双方研发、产品和技术资源&#xff0c;联手打造领先智能驾驶系统解决方案&#xff0c;合力推进商业拓展和市场应用&#…

微前端样式隔离、sessionStorage、localStorage隔离

1、样式隔离 前端样式不隔离&#xff0c;会产生样式冲突的问题&#xff0c;这个点在qiankun也存在 子应用1修改一个样式 button {background: red&#xff01;important&#xff1b; }其它应用也会受到影响 qiankun的css隔离方案&#xff08;shadow dom&#xff09; shadow …

Hive-high Avaliabl

hive—high Avaliable ​ hive的搭建方式有三种&#xff0c;分别是 ​ 1、Local/Embedded Metastore Database (Derby) ​ 2、Remote Metastore Database ​ 3、Remote Metastore Server ​ 一般情况下&#xff0c;我们在学习的时候直接使用hive –service metastore的方式…

FreeRTOS之二值信号量(实践)

信号量相当于一个标志&#xff0c;实现对资源多少的管理。 比如停车场空位的数量。 这里使用的是二值信号量&#xff0c;其队列长度为1&#xff0c;只有空或满两种状态。 1、步骤&#xff1a; 1.1、创建信号量 1.2、释放信号量 1.3、获取信号量 注&#xff1a;若想深入还…

《深入理解计算机系统》学习笔记 - 第七课 - 机器级别的程序三

Lecture 07 Machine Level Programming III Procedures 机器级别的程序三 文章目录 Lecture 07 Machine Level Programming III Procedures 机器级别的程序三概述程序机制 栈结构栈说明栈定义推入数据弹出数据 调用控制代码示例程序控制流程%rip 传递数据ABI 标准示例 管理局部…

LangChain 29 调试Debugging 详细信息verbose

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…

计算机msvcp140.dll丢失的多种解决方法,哪种更值得推荐

在使用电脑进行工作&#xff0c;娱乐的时候&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”&#xff0c;这个问题可能会导致某些应用程序无法正常运行。msvcp140.dll是微软Visual C 2015运行库中的一个动态链接库文件&#xff0c;全名为M…

MyBatis的延迟加载!!!

首先&#xff1a;MyBatis的关联查询&#xff01;&#xff01;&#xff01;&#xff08;一对一、一对多、多对多&#xff09;-CSDN博客以这个项目为基础。 1.在UserMapper接口中创建一个方法&#xff1a; package com.by.mapper;import com.by.pojo.User;import java.util.Lis…

STM32的以太网外设+PHY(LAN8720)使用详解(5):MAC及DMA配置

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 MAC及DMA配置 1.1 使能ETH时钟 stm32的ETH外设挂载在AHB1总线上&#xff0c;位于RCC_AHB1ENR的bit25-bit27&#xff1a; 相关语句如下&#xff1a; RCC_AHB1PeriphClockCmd(RCC_AHB1…

家政上门服务系统|上门服务系统让家政服务更便捷

家政上门服务系统搭建的目的是为了让用户在家政服务的过程中能够更加轻松、便捷地完成各项服务需求。我们的系统集成了多项先进功能&#xff0c;使得用户无需再花费时间和精力去寻找合适的服务员工。通过系统&#xff0c;用户只需在手机或者电脑上输入相关需求&#xff0c;系统…

突破性能瓶颈:使用Asyncio构建高并发Python应用程序

是一种处理多个任务同时执行的编程方式&#xff0c;在Python中&#xff0c;asyncio是一种用于实现异步编程的强大工具。asyncio基于协程&#xff08;coroutine&#xff09;的概念&#xff0c;能够高效地处理I/O密集型任务。本文将介绍asyncio的基本原理和使用方法。 为啥需要a…

万界星空开源MES/注塑MES/开源注塑MES/免费MES/MES源码

一、系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、适合二开的开源MES、好看的数据大屏、功能齐全开源mes. 1.万界星空开源MES制造执行系统的Java开源版本。 开源mes系统包括系统管理&#xff0c;车间基础数据管理&…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextInput输入框组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TextInput输入框组件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、TextInput 接口 TextInput(value?:{placeholder?: ResourceStr, tex…

SpringSecurity深度解析与实践(2)

目录 引言1.Springboot结合SpringSecurity用户认证流程1.1 配置pom文件1.2.配置application.yml 2.自定义MD5加密3.BCryptPasswordEncoder密码编码器4.RememberMe记住我的实现5.CSRF防御5.1.什么是CSRF 引言 上篇网址 1.Springboot结合SpringSecurity用户认证流程 1.1 配置p…