广告
返回顶部
首页 > 资讯 > 数据库 >MySQL数据库主从复制原理及作用分析
  • 332
分享到

MySQL数据库主从复制原理及作用分析

2024-04-02 19:04:59 332人浏览 安东尼
摘要

目录1.数据库主从分类:2.Mysql主从介绍由来3.主从作用4.主从复制原理5.主从复制配置(数据一致时)5.1主从服务器分别安装mysql5.75.2主数据库与从数据库数据一致5

1.数据库主从分类:

主从分为俩种:传统主从/GTID主从

2.mysql主从介绍由来

现实生活中,数据极其重要,存储数据库的方式很多,但是数据库存在着一种隐患。
隐患:

用一台数据库存放数据,若数据库服务器宕机了导致数据丢失数据多了,访问量大了,一台服务器无法保证服务质量

因此数据库主从诞生

3.主从作用

故障切换,实现预备读写分离,提供查询服务数据库管理系统备份(DBSM),避免影响业务

4.主从复制原理

bin log:二进制日志,记录写操作(增删改查)

Relay log:中继日志

  1. 主库会将所有的写操作记录到binlog日志下生成一个log dump线程,将binlog日志传给从库的I/O线程。
  2. 从库有俩个线程:
    I/O线程
    sql线程
  3. 从库的I/O线程会请求主库得到binlog日志写到relay log(中继日志)中
  4. sql线程,会读取relay log日志文件中的日志,并解析具体操作,来实现主从的操作一样,达到数据一致

5.主从复制配置(数据一致时)

步骤:

  • 确保主数据库与从数据的数据一样
  • 主数据库里创建一个同步账号授权给从数据库使用
  • 配置主数据库(修改配置文件)
  • 配置从数据库(修改配置文件)

环境需求:

俩台mysql服务器,一台主服务器(写功能),一台从服务器(读功能)

主数据库(Centos8)  ip地址:192.168.136.145  centos8.0/mysql5.7  相同数据
                   第六节:数据不相同 (可能在公司之前有数据的情况)
从数据库(centos8)  ip地址:192.168.136.191  centos7.0/mysql5.7  相同数据

5.1主从服务器分别安装mysql5.7

可看相关教程教程(超详细):https://www.jb51.net/article/221946.htm


#二进制安装:Https://blog.csdn.net/qq_47945825/article/details/116848970?spm=1001.2014.3001.5501
#或者网络仓库安装:(一般二进制安装)
https://blog.csdn.net/qq_47945825/article/details/116245442?spm=1001.2014.3001.5501

5.2主数据库与从数据库数据一致


[root@mysql01 ~]# mysql -uroot -e 'show databases;'
+--------------------+
| Database           |
+--------------------+
| infORMation_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
[root@mysql02 ~]# mysql -uroot -e 'show databases;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

5.3在主数据库里创建一个同步账号授权给从数据库使用

replication:复制 slave:从 192.168.136.191:从数据库ip地址


mysql> create user 'vvv'@'192.168.136.191' identified by 'vvv0917';
Query OK, 0 rows affected (0.00 sec)
mysql> grant replication slave on *.*to 'vvv'@'192.168.136.191';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

5.4在从库上测试连接


[root@mysql02 ~]# mysql -uvvv -vvv0917 -h192.168.136.145
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)

5.5配置主数据库


[root@mysql01 ~]# cat /etc/my.cnf 
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
Socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
log-bin=mysql_bin #启动binlog日志
server-id=10   #数据库服务器唯一标识,id必须比从数据库小
#重启服务 (此重启方式,前提已配置mysqld.service文件)
[root@mysql01 ~]# systemctl restart mysqld
观察主数据库状态:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000004 |      962 |              |                  |                   |
+------------------+----------+--------------+------------------+---

5.6配置从数据库


[root@mysql02 ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql 
datadir = /opt/data 
socket = /tmp/mysql.sock 
port = 3307
user = mysql
pid-file = /opt/data/mysql.pid
skip-name-resolve
#skip-grant-tables 
server-id=20               #服务器id,大于主数据库id
relay-log=mysql_relay_log  #启动中继日志
#log-bin=mysql-bin 
#重启服务:
[root@mysql02 ~]# systemctl restart mysqld

5.7配置并启动主从复制的功能(mysql02从数据库上)


[root@slave02 ~]# mysql -uroot -p
mysql> change master to
    -> master_host='192.168.136.145',
    -> master_user='vvv',
    -> master_passWord='vvv0917',
    -> master_log_file='mysql_bin.000004',
    -> master_log_pos=962;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;   #stop slave为关闭
Query OK, 0 rows affected (0.01 sec)
#查看配置状态:
mysql> show slave status\G; 
   Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.136.145
                  Master_User: vvv
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql_bin.000004
          Read_Master_Log_Pos: 962
               Relay_Log_File: mysql_relay_log.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql_bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            #此处必须俩个都是yes,就是配置成功,否则失败

5.8测试:

主库:


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

从库:


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+


主库创建数据库clq并且加入数据:


mysql> create database clq;
Query OK, 1 row affected (0.00 sec)
mysql> create table clq01(id int(11)not null primary key auto_increment,name varchar(100)not null,age tinyint(4)); 
mysql> insert clq01(name,age) values('A',20),('B',21),('C',22);
Query OK, 3 rows affected (0.00 sec)

从库中查看:


mysql> select * from clq01;
+----+------+------+s
| id | name | age  |
+----+------+------s+
|  1 | A    |   20 |
|  2 | B    |   21 |
|  3 | C    |   22 |
+----+------+------+
                              #主从复制完成!


6.主从配置(数据不一致时)

6.1一般全备主库需要另开一个终端,给数据库加上读锁(只读不写)

避免其他人在写入数据导致不一样


flush tables with read lock:
quit:退出即可为解锁(备份完之后才能解锁)

6.2确保主主数据库与从数据库的数据一样


#先对主库进行全备
[root@mysql01 ~]# mysqldump -uroot -A > all-databases.sql 
#拷贝数据到从数据库上
[root@mysql01 ~]# ls /clq
all-databases.sql
[root@mysql01 ~]# scp /clq/all-databases.sql root@192.168.136.193:/clq/
The authenticity of host '192.168.136.193 (192.168.136.193)' can't be established.
ECDSA key fingerprint is SHA256:XIAQEoJ+M0vOHmCwQvhUdw12u5s2nvkN0A4TMKLaFiY.
Are you sure you want to continue connecting (yes/no/[fingerprint])yes
root@192.168.136.193's password: 
all-databases.sql                                                 100%  853KB 115.4MB/s   00:00  
[root@mysql02 clq]# ll
总用量 896                       #从库上查看
-rw-r--r--. 1 root root 873266 5月  17 19:36 all-databases.sql

6.3在从库上查看主库有哪些库,确保一致


[root@mysql02 clq]# mysql -uroot -pHuawei0917@ < all-databases.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@mysql02 clq]# mysql -uroot -pHuawei0917@ -e 'show databases;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| clq                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
主库:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| clq                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+


6.4确保俩库的配置文件已经配置了相应的文件


[root@mysql01 ~]# cat /etc/my.cnf 
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
log-bin=mysql_bin     #日志文件
server-id=10          #唯一标识服务id
[root@mysql02 ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql 
datadir = /opt/data 
socket = /tmp/mysql.sock 
port = 3307
user = mysql
pid-file = /opt/data/mysql.pid
skip-name-resolve
#skip-grant-tables 
server-id=20                #唯一标识服务id(大于主库)
relay-log=mysql_relay_log     #中继日志
#log-bin=mysql-bin 


此后步骤和5.5之后一模一样!

小结:

主库修改数据,从库的数据随之改变!
反之,从库修改数据,主库的数据不会发生改变

查看数据库运行的命令进程


mysql> show processlist;
+----+------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
| Id | User | Host                  | db   | Command     | Time | State                                                         | Info             |
+----+------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
|  5 | repl | 192.168.136.219:39788 | NULL | Binlog Dump | 1575 | Master has sent all binlog to slave; waiting for more updates | NULL             |
|  7 | root | localhost             | NULL | Query       |    0 | starting                                                      | show processlist |
+----+------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
2 rows in set (0.00 sec)

以上就是MySQL数据库主从复制原理及作用分析的详细内容,更多关于MySQL数据库主从复制的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库主从复制原理及作用分析

本文链接: https://www.lsjlt.com/news/134721.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL数据库主从复制原理及作用分析
    目录1.数据库主从分类:2.mysql主从介绍由来3.主从作用4.主从复制原理5.主从复制配置(数据一致时)5.1主从服务器分别安装mysql5.75.2主数据库与从数据库数据一致5...
    99+
    2022-11-12
  • MySQL主从复制的原理分析
    本篇文章为大家展示了MySQL主从复制的原理分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。主从复制是怎么实现的呢更新语句会记录 binlog,它是一种逻辑日志。...
    99+
    2022-10-18
  • MySQL中主从复制的原理分析
    今天就跟大家聊聊有关MySQL中主从复制的原理分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.1.1 MySQL主从复制介绍MySQL数据库支...
    99+
    2022-10-18
  • MySQL的主从复制原理详细分析
    目录前言一、主从复制概念二、读写分离的概念三、主库和从库1. 主库2. 从库四、主从复制的流程五、主从复制效果展示前言 在实际生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性...
    99+
    2022-07-14
    MySQL主从复制原理 MySQL主从复制
  • Mysql数据库主从复制的实现原理
    这篇文章主要介绍“Mysql数据库主从复制的实现原理”,在日常操作中,相信很多人在Mysql数据库主从复制的实现原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql数...
    99+
    2022-10-18
  • Mysql主从复制作用和工作原理
    一、什么是主从复制 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。在最常用的mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服...
    99+
    2022-10-18
  • MySQL主从复制的原理和作用
    这篇文章将为大家详细讲解有关MySQL主从复制的原理和作用,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先数据库有个“bin-log”二进制文件,记录了所有SQL语句;...
    99+
    2022-10-18
  • MySQL主从复制的原理分析是怎样的
    这期内容当中小编将会给大家带来有关MySQL主从复制的原理分析是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、基本原理MySQL复制过程分成三步:1)、mast...
    99+
    2022-10-19
  • 数据库---mysql主从复制读写分离
    http://m.open-open.com/m/lib/view/1413274853450.html 原理及架构分析部署前准备下载好源码包存放位置要与脚本中对应  mysql-5.5...
    99+
    2022-10-18
  • MySQL主从复制与读写分离原理及用法详解
    本文实例讲述了MySQL主从复制与读写分离原理及用法。分享给大家供大家参考,具体如下: 主从复制 概念 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。 假设,实时的将变化了的...
    99+
    2022-10-18
  • MySQL数据库主从复制与读写分离
    目录一.主从复制主从复制三线程主从复制的过程:主从复制的策略:主从复制高延迟二.读写分离读写分离概念读写分离原因与场景总结一.主从复制        主从复制:在实际的生产中,为了解...
    99+
    2022-11-12
  • Mysql主从复制作用和工作原理详解
    一、什么是主从复制 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。在最常用的mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服...
    99+
    2022-10-18
  • ​MySQL数据库5.6.16.主从复制如何搭建及配置
    下面一起来了解下MySQL数据库5.6.16.主从复制如何搭建及配置,相信大家看完肯定会受益匪浅,文字在精不在多,希望MySQL数据库5.6.16.主从复制如何搭建及配置这篇短内容是你想要的。MySQL数据...
    99+
    2022-10-18
  • 快速笔记02-MySQL主从复制原理半同步操作步骤及原理
    ==========================================================一:MySQL主从复制规划主库:(MySQL master) IP:1...
    99+
    2022-10-18
  • MySQL主从复制与读写分离(原理适用场景+实践操作)
    MySQL主从复制与读写分离 一、前言 ​ 前面我们已经对MySQL数据库的安装、命令、备份、索引、事务以及存储引擎等各个方面有了初步的理解,而今天我们将从宏观的角度来理解什么是MySQL数据库的主从复...
    99+
    2022-10-18
  • MySQL主从复制的原理图解及Java语言示例使用
    目录概述主从复制原理主从复制模式主从同步实战总结概述 实际生产的过程中为了实现数据库的高可用,不会只有一个数据库节点。至少会搭建主从复制的数据库架构,从库可以作为主库的数据备份,以免主数据库损坏的情况下丢失数据;当访问量...
    99+
    2022-08-12
    MySQL主从复制 MySQL主从复制原理
  • Mysql数据库的主从复制与读写分离精讲教程
    目录前言一、MySQL主从复制1.支持的复制类型2.主从复制的工作过程是基于日志3.请求方式4.主从复制的原理5.MySQL集群和主从复制分别适合在什么场景下使用6.为什么使用主从复...
    99+
    2022-11-12
  • Mysql数据库的主从复制与读写分离怎么实现
    这篇文章主要介绍“Mysql数据库的主从复制与读写分离怎么实现”,在日常操作中,相信很多人在Mysql数据库的主从复制与读写分离怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql数据库的主从复制...
    99+
    2023-06-21
  • 灵活扩展数据库能力:MySQL主从复制作为集群技术的成本效益分析
    灵活扩展数据库能力:MySQL主从复制作为集群技术的成本效益分析随着互联网的迅猛发展,数据库的存储和处理压力也变得越来越大。为了满足业务的需求,很多企业开始寻求一种灵活扩展数据库能力的方法。在这个过程中,MySQL主从复制作为一种常见的集群...
    99+
    2023-10-22
    主从复制 扩展能力 成本效益分析
  • 关系型数据库之MySQL基于SSL主从复制及SSL远程访问
      当mysql跨越互联网进行复制时别人可以窃取到mysql的复制信息,这些信息是明文的,因此存在不安全性,这里通过ssl对复制的信息进行加密。准备环境:1.系统环境:Centos6.52.数据库...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作