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

news2025/1/18 10:57:30

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 event
                  Master_Host: master
                  Master_User: relication
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 527
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_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: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 203
                  Master_UUID: 6f6d0551-a073-11ee-9f28-000c298a6e96
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_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 event
                  Master_Host: master
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 527
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_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: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 203
                  Master_UUID: 5aad69d6-a09e-11ee-b909-000c298a6e96
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 

主库解锁

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

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

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

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

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

相关文章

PMP项目管理 - 成本管理

系列文章目录 系统架构设计 PMP项目管理 - 整合管理 PMP项目管理 - 范围管理 PMP项目管理 - 质量管理 PMP项目管理 - 采购管理 PMP项目管理 - 资源管理 PMP项目管理 - 风险管理 PMP项目管理 - 沟通管理 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞…

只用10分钟,ChatGPT就帮我写了一篇2000字文章

有了ChatGPT之后&#xff0c;于我来说&#xff0c;有两个十分明显的变化&#xff1a; 1. 人变的更懒 因为生活、工作中遇到大大小小的事情&#xff0c;都可以直接找ChatGPT来寻求答案。 2. 工作产出量更大 之前花一天&#xff0c;甚至更久才能写一篇原创内容&#xff0c;现…

FPGA设计时序约束十三、Set_Data_Check

目录 一、序言 二、Set Data Check 2.1 基本概念 2.2 设置界面 2.3 命令语法 三、工程示例 3.1 工程代码 3.2 约束设置 3.3 时序报告 四、参考资料 一、序言 通常进行时序分析时&#xff0c;会考虑触发器上时钟信号与数据信号到达的先后关系&#xff0c;从而进行setu…

模块与包、反序列化校验源码分析、断言、drf之请求、drf之响应

模块与包 什么是模块&#xff1f; 一个py文件&#xff0c;被别的py文件导入使用&#xff0c;它就是模块 如果py文件&#xff0c;直接右键运行&#xff0c;它叫脚本文件 什么是包&#xff1f; 一个文件夹&#xff0c;下有 __init__.py &#xff0c;和很多py文件&#xff0c;这个…

C++面向对象(OOP)编程-STL详解(vector)

本文主要介绍STL六大组件&#xff0c;并主要介绍一些容器的使用。 目录 1 泛型编程 2 CSTL 3 STL 六大组件 4 容器 4.1 顺序性容器 4.1.1 顺序性容器的使用场景 4.2 关联式容器 4.2.1 关联式容器的使用场景 4.3 容器适配器 4.3.1 容器适配器的使用场景 5 具体容器的…

XSKY星辰天合星海架构荣获 IT168 “2023 年度技术卓越奖”

近日&#xff0c;"2023 年度技术卓越奖"获奖名单公布&#xff0c;XSKY 星辰天合的星海架构&#xff08;XSEA&#xff0c;极速全共享架构&#xff09;获得行业 CIO/CTO 大咖、技术专家及 IT 媒体三方认可&#xff0c;成功入选&#xff01; “技术卓越奖”评选由国内著…

如何查看内存卡使用记录-查看的设备有:U盘、移动硬盘、MP3、SD卡等-供大家学习研究参考

主要功能 USB Viewer&#xff08;USB移动存储设备使用记录查看器&#xff09;可用于查看本机的USB移动存储设备使用记录。可查看的设备有&#xff1a;U盘、移动硬盘、MP3、SD卡……等。   可用于兵器、航空、航天、政府、军队等对保密要求较高的单位&#xff0c;可在计算机保…

Proxmox VE 超融合集群不停服务新增配置(磁盘)

五个节点的Proxmox VE超融合集群&#xff0c;创建了两个Ceph Pool,一个是高速的Nvme存储池&#xff0c;另一个是大容量SATA存储池。现在需要将原有的SATA磁盘全部拔出来&#xff0c;换成高速Nvme磁盘。 ​ ​ 首先&#xff0c;先销毁由SATA机械盘组成的“hdd_pool”&#xff…

Bwapp学习笔记

1.基本sql语句 #求绝对值 select abs(-1) from dual; #取余数 select mod(10,3); #验证show databases结果是取之于schemata表的 show databases; select schema_name from information_schema.schemata; #查询当前的数据库 select database(); -- 查询数据库版本 s…

前端学习——指令

vue作为前端框架&#xff0c;为了简化或实现一些特定功能&#xff0c;提供了很多指令&#xff0c;那什么是指令呢&#xff1f; 所谓的指令就是能够完成特定功能的一些vue语法&#xff0c;比如属性绑定指令v-bind&#xff0c;事件绑定指令v-on&#xff0c;循环指令v-for等。在v…

题目基础算法蓝桥真题

真题《空间》 内容提取&#xff1a;1个字节等于8个比特 32位二进制中为32bits4Bytes&#xff0c;题目里的256MB256*2**20Bytes 所以化完单位后直接相除等于64*2**20Bytes。 代码 其中2的20次方可以用(1<<20)表示 蓝桥杯中一般不用pow函数有误差或时间长 endl也不用…

P2 H264码流结构分析——Annexb与MP4格式的区别 (中)

目录 前言 01 Annexb格式 02 RTP格式&#xff08;也叫MP4格式&#xff09; 前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &am…

干洗店预约上门取货小程序与互联网洗鞋店小程序开发制作功能方案

干洗店预约上门取货小程序与互联网洗鞋店小程序开发制作功能方案 一、洗衣洗鞋店小程序功能 1. 预约订单&#xff1a;忙碌时&#xff0c;您可以使用预约功能轻松获取洗衣服务。 2. 在线下单&#xff1a;用户可直接通过小程序在线下单&#xff0c;享受专人上门取货与配送服务。…

钓鱼实战篇

之前说的只是一些点&#xff0c;真正的攻击是需要自己针对目标定制一套适用的钓鱼方式的。 这里提了提高成功率&#xff0c;我选取了我们班某位可爱的同学作为测试&#xff0c;首先通过一些话语让她产生好奇心。 然后制作一个类似的求爱视频的网站给她: 后面通过发送网址给她:…

【零基础入门Docker】什么是Dockerfile Syntax

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门Docker专栏https://blog.csdn.net/arthas777/category_12455882.html 目录 编写Dockerfile和Format的语法 2. MAINTAINER 3. RUN 4. ADD 6. ENTRYPOINT 7. CMD 8. EXPOSE 9. VOLUME 11. USER 12. ARG …

【数据结构入门精讲 | 第十篇】考研408排序算法专项练习(二)

在上文中我们进行了排序算法的判断题、选择题的专项练习&#xff0c;在这一篇中我们将进行排序算法中编程题的练习。 目录 编程题R7-1 字符串的冒泡排序R7-1 抢红包R7-1 PAT排名汇总R7-2 统计工龄R7-1 插入排序还是堆排序R7-2 龙龙送外卖R7-3 家谱处理 编程题 R7-1 字符串的冒…

Unreal5.3 PCG 笔记

目录 ElectricDreams场景功能移动中间山体向周围随机生成倒下的树干树干上随机生成的植被 ElectricDreams场景功能 移动中间山体向周围随机生成倒下的树干 配置内容 中心山体Spline周围沟渠Spline&#xff08;土堆&#xff09;PCG规则 主要功能节点 SplineSample&#xff08;…

屏幕颜色吸取器

前言 屏幕颜色吸取器。 前端工程师的福音&#xff0c;获取全屏幕上所有位置的颜色。 运行在window上的软件 屏幕颜色吸取器 前言1 下载解压2 使用 1 下载解压 下载地址&#xff1a;https://download.csdn.net/download/qq_44850489/11943229 下载下来之后解压 如下图&#…

【SVN】centos7搭建svn--亲测能通

centos7.6搭建svn 1 知识小课堂1.1 CentOS1.2 SVN 2 搭建过程2.1 前期准备2.2 通过yum命令安装svnserve2.3 创建版本库目录2.4 创建svn版本库2.5 配置修改2.5 防火墙配置2.6 启动或关闭svn服务器2.6.1 进程守护2.6.2 检测svn端口3690是否已经监听&#xff1a;2.6.3 关闭SVN 2.7…

计算机组成原理——指令系统41-60

41、下列哪种指令不属于程序控制指令&#xff08;C&#xff09;。 A、 无条件转移指令 B、 条件转移指令 C、 中断隐指令 D、 循环指令 42、下列关于一地址运算类指令的叙述中&#xff0c;正确的是&#xff08;B&#xff09;。 A、 仅有一个操作数&#xff0c;其地址由指令…