数据库运维——MySQL主从复制

news2024/11/26 5:48:44

1.理解MySQL主从复制原理。

2.完成MySQL主从复制。


一、MySQL主从复制原理

MySQL主从复制是指将一个MySQL数据库服务器(称为主服务器)上的数据复制到其他MySQL数据库服务器(称为从服务器)的过程。它的原理如下:

  1. 主服务器将修改操作记录在二进制日志(二进制日志)中。
  2. 从服务器连接到主服务器,并请求复制日志的内容。
  3. 主服务器将二进制日志的内容发送给从服务器。
  4. 从服务器将接收到的二进制日志应用到自己的数据库中,以保持与主服务器的数据一致性。

(1)主从复制可以实现以下几个目标

  • 数据备份:从服务器可以作为主服务器的备份,以防止数据丢失。
  • 负载均衡:可以将读操作分散到多个从服务器上,减轻主服务器的压力。
  • 高可用性:如果主服务器出现故障,可以快速切换到从服务器提供服务。

(2)MySQL支持的复制类型

1.基于语句( statement )的复制

        在主服务器上执行SQL 语句,在从服务器上执行同样的语句。 MySQL 默认采用基于语句的复制,效率比 较高。

2.基于行( row )的复制

        把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从MySQL 5.0 开始支持。

3.混合型( mixed )的复制

        默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。

(3)为什么要做主从复制

        灾备

        数据分布

        负载平衡

        读写分离

        提高并发能力

(4)如何实现主从复制

        在主服务器(master )上

                (1)、启用二进制日志

                (2)、选择一个唯一的server-id

                (3)、创建具有复制权限的用户

        在从服务器(slave )上

                (1)、启用中继日志 (二进制日志可开启,也可不开启)

                (2)、选择一个唯一的server-id

                (3)、连接至主服务器,并开始复制

 二、完成MySQL主从复制

完成MySQL主从复制,需要执行以下步骤:

  1. 配置主服务器:

    • 在主服务器的配置文件(通常是my.cnf或my.ini)中启用二进制日志功能。
    • 配置一个唯一的server-id。
    • 重启主服务器以使配置生效。
  2. 创建复制用户:

    • 在主服务器上创建一个用于复制的用户,并为其授予REPLICATION SLAVE权限。
  3. 备份主服务器数据:

    • 在主服务器上执行适当的备份操作,以确保从服务器可以使用这个备份进行初始化。
  4. 配置从服务器:

    • 在从服务器的配置文件中启用复制功能。
    • 配置一个唯一的server-id。
    • 重启从服务器以使配置生效。
  5. 初始化从服务器:

    • 将主服务器上的备份数据导入到从服务器中。
  6. 启动复制过程:

    • 在从服务器上执行CHANGE MASTER TO命令,指定主服务器的IP地址、复制用户的凭据以及二进制日志文件和位置。
    • 启动从服务器的复制进程。

完成上述步骤后,MySQL主从复制将开始运行。你可以通过在主服务器上进行修改操作,然后在从服务器上查看是否同步来验证复制是否成功。

 (1)主机环境

主节点: 192.168.186.251 master

从节点 :192.168.186.100 slave1

(2)环境准备

关闭防火墙

[root@master ~]# systemctl disable firewalld
关闭selinux

[root@master ~]# setenforce 0

时间同步

主、从服务器使用相同版本的mysql数据库

(3)主节点配置

1.启用二进制日志 ,并为当前节点设置一个全局唯一的ID号,然后创建目录修改权限

[root@master ~]# vim /etc/my.cnf
[mysqld]
log_bin = /data/logbin/mysql-bin
server_id = 1
[root@master ~]# mkdir /data
[root@master ~]# mkdir /data/logbin
[root@master ~]# chown mysql.mysql /data/logbin/

 2.重新启动mysql服务

[root@master ~]# systemctl restart mysqld

3.查看/data/logbin/目录是否有数据

[root@master ~]# ls /data/logbin
mysql-bin.000001  mysql-bin.index

4.登录mysql,创建账号,账号授权

[root@master ~]# mysql -uroot -p123456
 
mysql5.7 [(none)]>create user wp@'192.168.186.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
 
mysql5.7 [(none)]>grant replication slave on *.* to wp@'192.168.186.%';
Query OK, 0 rows affected (0.01 sec)
 
mysql5.7 [(none)]>show grants for 'rep'@'192.168.186.%';
+---------------------------------------------------------+
| Grants for rep@192.168.186.%                            |
+---------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.186.%' |
+---------------------------------------------------------+
1 row in set (0.00 sec)

5.锁表设置只读,查看主库状态

mysql5.7 [(none)]>flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
 
mysql5.7 [(none)]>show variables like '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 28800    |
+-----------------------------+----------+
13 rows in set (0.00 sec)
 
mysql5.7 [(none)]>show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 |      607 |              |                  | 388ebd53-291b-11ee-b68c-000c29090543:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
 
mysql5.7 [(none)]>\q
Bye

6.备份数据库数据

[root@master backup]# mysqldump -uwp -p -A -B | gzip > /server/backup/mysql_bak.$(date +%F).sql.gz
Enter password: 
[root@master backup]# ll
total 4
-rw-r--r--. 1 root root 20 Jul 25 11:17 mysql_bak.2023-07-25.sql.gz

(4)从节点设置

设置全局唯一的ID号

[root@slave1 ~]# vim /etc/my.cnf
 
[mysqld]
server_id=2

(5)在主节点将备份的数据复制到从节点上,并在从节点查看

master:
 
[root@master ~]# scp /server/backup/mysql_bak.2023-07-25.sql.gz 192.168.186.100:/server/backup
The authenticity of host '192.168.186.100 (192.168.186.100)' can't be established.
ECDSA key fingerprint is SHA256:ZGkVpFFM8KD+H3SRgZmWUpD+IlNK9Dwqcd+TAiGoyzM.
ECDSA key fingerprint is MD5:c2:93:1c:0a:8e:e1:4e:86:cc:90:78:5d:81:42:76:aa.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.186.100' (ECDSA) to the list of known hosts.
root@192.168.186.100's password: 
mysql_bak.2023-07-25.sql.gz                               100%   20    21.8KB/s   00:00    
 
slave1:
[root@slave1 ~]# ll /server/backup/
总用量 4
-rw-r--r-- 1 root root 20 7月  25 23:35 mysql_bak.2023-07-25.sql.gz
[root@slave1 ~]# cd /server/backup/
[root@slave1 backup]# gzip -d mysql_bak.2023-07-25.sql.gz 
[root@slave1 backup]# ll
总用量 0
-rw-r--r-- 1 root root 0 7月  25 23:35 mysql_bak.2023-07-25.sql

(6)设定主从库同步

mysql> change master to
MASTER_HOST='192.168.186.251',
MASTER_PORT=3306,
MASTER_USER='wp',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000025',
MASTER_LOG_POS=194;

(7)启动主从库同步开关

mysql> start slave;
检查状态:
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.186.251
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000025
          Read_Master_Log_Pos: 194
               Relay_Log_File: slave1-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000025
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

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

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

相关文章

如何利用OpenAI的函数调用特性

如何利用OpenAI的函数调用特性 函数调用能实现哪些功能? 简单来说,函数调用功能可以助你在请求方法时构建结构化的数据。因为生成模型的特性,它产生的数据往往是无结构的,即使在提示(prompt)中指定了输出格式,但实际…

3-Linux实操

Linux实践操作 开关机、重启、用户登陆注销关机&重启用户登陆和注销 用户管理添加用户修改用户密码删除用户查询用户信息切换用户查看当前用户用户组的添加和删除用户和组相关文件 实用指令指定运行级别init 命令帮助指令文件目录类时间日期类搜索查找类🔍压缩和…

新能源汽车直流充电桩和交流充电桩的区别

直流充电桩和交流充电桩的区别 你是否曾经想过,为什么有的电动汽车可以在半小时内充满电,而有的却需要几个小时?其实,这都取决于它们所使用的充电桩的不同。那么,直流充电桩和交流充电桩到底有哪些区别呢? 首先,工作…

网络变压器配套使用的网口连接器的选型注意事项及选购关注要点

Hqst盈盛(华强盛)电子导读:采购人员在网口连接器选型中如何选用到合适的产品,选用时要注意到哪些事项,这节将结合网口连接器实物和大家一起探讨,希望对大家有些帮助。 我们可以通过对下面五个方面的详细了解…

网工内推 | 售前、售后工程师,IE认证优先

01 广州佳杰科技有限公司 招聘岗位:IT售前工程师 职责描述: 1、负责所在区域 IT 产品的售前技术支持工作,包括客户交流、方案编写、配置报价、投标应标、测试、赋能等; 2、与厂商相关人员建立和保持良好的关系,相互配合,提高项目成功率和厂商满意度; 3、…

每日一题——链表中倒数最后k个结点

题目 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 数据范围:0≤n≤$105,0≤ai≤109,0≤k≤109 要求:…

MongoDB索引结构,到底是B-Tree还是B+Tree,请看这里!!

起因 网上关于MongoDB的索引结构到底是b树,还是b树的争论有很多,无法统一结论。 由来 MongoDB从3.2版本开始默认采用了WiredTiger存储引擎,网上很多说法是此引擎是BTree的索引结构,甚至有图有真相。但是认为MongoDB一直是B-Tre…

Docker compose(容器编排)

Docker compose(容器编排) 一、安装Docker compose 1.安装Docker compose Docker Compose 环境安装 Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose#下载 curl -L https://github.com/docker/co…

htmlCSS-----定位

目录 前言 定位 分类和取值 定位的取值 1.相对定位 2.绝对位置 元素居中操作 3.固定定位 前言 今天我们来学习html&CSS中的元素的定位,通过元素的定位我们可以去更好的将盒子放到我们想要的位置,下面就一起来看看吧! 定位 定位posi…

HR SaaS厂商,进入决赛圈

在愈发需要降本增效的节点,数字化的价值也更在被越来越多的企业重新审视,这种重视不再是之前或有或无的可选项,而是基于真正人效比维度的必选项 作者|斗斗 编辑|皮爷 出品|产业家 SaaS行业,正在发生一些微妙的变化。 以HR …

如何提高小程序UV?实用策略助你增加用户规模和活跃度

摘要:小程序的UV(Unique Visitors)是衡量用户规模和活跃度的重要指标,对于开发者和运营者来说具有重要意义。本文将分享一些实用策略,帮助你提高小程序的UV,增加用户规模和活跃度。从优化推广渠道、提升用户…

css实现鼠标滑动左下角弹框带动画效果

代码 <div classNamekuang></div> css代码 .kuang {height: 500px;width: 400px;// background-color: #fff;position: absolute;z-index: 10;bottom: 0;transform: translateX(-390px)}.kuang:hover {animation: myanimation 3s linear 1;animation-fill-mode:f…

LT9211C 是一款MIPI/RGB/2PORT LVDS互转的芯片

LT9211C 1.描述&#xff1a; Lontium LT9211C是一个高性能转换器&#xff0c;可以在MIPI DSI/CSI-2/双端口LVDS和TTL之间相互转换&#xff0c;除了24位TTL到24位TTL&#xff0c;并且不推荐同步和DE的2端口10位LVDS和24位TTL之间的转换。LT9211C反序列化输入的MIPI/LVDS/TTL视…

认识雪花id

首先,个人理解,雪花id不是全球的,它只能保证一个分布式服务的范围内的ID是不重复的. 一.SnowFlake 雪花算法 SnowFlake 中文意思为雪花&#xff0c;故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本。 雪花算法的原理…

项目经理好,还是产品经理好?

我首先介绍一下产品经理和项目经理的区别&#xff0c;然后再说一下产品经理和项目经理的薪资差距&#xff0c;然后你自己决定做产品经理还是项目经理。 1、产品经理和项目经理的区别&#xff1a; 产品经理和项目经理的不同之处在于&#xff0c;产品经理注重思考&#xff0c;关…

操作系统18:磁盘I/O速度、磁盘可靠性、数据一致性

目录 1、提高磁盘I/O速度的途径 &#xff08;1&#xff09;磁盘高速缓存(Disk Cache) 1.1 - 数据交付(Data Delivery)方式 1.2 - 置换算法 1.3 - 周期性地写回磁盘 &#xff08;2&#xff09;提高磁盘I/O速度的其它方法 2.1 - 提前读 2.2 - 延迟写 2.3 - 优化物理块的…

存储简单了解

存储目前常用的有磁盘&#xff08;磁性存储器&#xff09;和固态硬盘&#xff08;半导体存储器&#xff09; 磁盘由盘片&#xff0c;磁头和移动磁头的机械装置组成。磁盘从空间结构上分为扇区和磁道&#xff0c;每个扇区存储大小一致。 固态硬盘由多个闪存芯片组成&#xff0c;…

性能测试怎么做?一文从5个方面带你做性能测试

大家好&#xff0c;今天小濠从5个方面来介绍性能测试 一、什么是性能测试 二、性能测试的目的 三、如何做性能测试 四、性能测试关注的指标 五、性能结果分析 一、什么是性能测试 是不断的通过不同场景的系统表现去探究系统设计与资源消耗之间的平衡。 我们可以认为性能测试是…

ARM day8 key1/2/3led

key_led.h #ifndef _KEY_H_ #define _KEY_H_#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h"//EXTI编号 typedef enum {EXTI0,EXTI1,EXTI2,EXTI3,EXTI4,EXTI5,…

D. Maximum Subarray

Problem - 1796D - Codeforces 思路&#xff1a;想了个假dp做法推了半天&#xff0c;果然是dp。考虑用dp[i][j]表示以i结尾的&#xff0c;并且选择j个&#xff0b;x的最长连续子序列&#xff0c;那么如果我不选择第i位&#xff0c;那么会有f[i][j]max(w[i]-x,f[i-1][j]w[i]-x)&…