mysql主从复制搭建(一主一从)

news2024/12/27 0:43:46

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
    • MySQL复制过程分为三部:
  • 一、准备工作
  • 二、配置==>主库Master
  • 三、配置==>从库Slave
      • Slave_IO_Running: Yes
      • Slave_SQL_Running: Yes
  • 四、测试
    • 至此,主库分离成功实现


前言

介绍

MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具

在这里插入图片描述

MySQL复制过程分为三部:

==> master将改变记录到二进制日志(binary log)

==> slave将master的binary log拷贝到它的中继日志(relay log)

==> slave重做中继日志中的事件,将改变应用到自己的数据库中


一、准备工作

1、提前准备好两台服务器,分别安装Mysql
==> 主库Master 192.168.100.66

==> 从库Slave 192.168.100.67

2、使用克隆弄出另一台服务器的注意事项
博主两台linux服务器都是使用VMware虚拟机搭建的,为了避免重装mysql的麻烦,另外一台linux服务器是克隆出来的,克隆之后必须修改Mac地址,ip,UUID,还有mysql的UUID。

二、配置==>主库Master

1、在/etc/hosts里添加两侧主机的IP和主机名(选做)

192.168.100.66 mysql57
192.168.100.67 mysql57b


2、 先让所有的MYSQL数据库的UUID保持不同(如果你是直接复制的安装好MYSQL的虚拟机,那么每个虚拟机上搭载的MYSQL数据库UUID是一致的)

vi /data/mysql_data/auto.cnf

[auto]
server-uuid=f787ff18-b491-11eb-9910-080027c8eeff
如果大家发现所有的MYSQL的uuid都是一个,那么你就给他改一下
[auto]
server-uuid=f787ff18-b491-11eb-9910-080027c8eefa


3、主节点参数修改Mysql数据库的配置文件/etc/my.cnf

#MASTER-SLAVE
server-id = 1
binlog-do-db=hr
#binlog-do-db=
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#expire_logs_days=7

参数说明:
server-id = 1 主节点的server-id,集群中每一台服务器的server-id都不允许相同
binlog-do-db=hr 你需要复制的库 hr
#binlog-do-db=test
binlog-ignore-db=mysql #不需要复制的库
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#expire_logs_days=7 binlog日志过期天数设置


4、重新启动mysql数据库服务
servicer mysqld start


5、创建复制用户(主库)
GRANT ALL PRIVILEGES ON . TO ‘repl’@‘%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
FLUSH PRIVILEGES;


三、配置==>从库Slave

1、从节点参数修改Mysql数据库的配置文件/etc/my.cnf
server-id = 2
read_only = 1
#super_read_only=1
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
master_info_repository=TABLE
relay_log_info_repository=TABLE
#relay_log_recovery=1

参数说明
server-id = 2
从服务器的server-id 不能和主服务器相同

read_only = 1
#super_read_only=1
设置从库只读状态,避免在从库上写操作,但该指令对超级管理员是无效的,mysql5.7增加了一个新的参数super_read_only,该参数使得超级管理员也无法进行写操作。但是super_read_only这个参数大部分都是关闭掉的

relay-log=slave-relay-bin
中转(中继)日志文件前缀名(base name) 也是默认在datadir目录下

relay-log-index=slave-relay-bin.index
中转(中继)日志后缀名,默认host_name-relay-bin.index,在datadir目录下。

master_info_repository=TABLE 把master.info(主从状态,配置信息)记录下来,默认记录到file里面,建议使用表记录

relay_log_info_repository=TABLE
realy_log_info_repository用来决定slave同步的位置信息记录在哪里,同样有两个参数。如果relay_log_info_repository=file,就会创建一个realy-log.info,如果relay_log_info_repository=table,就会创建mysql.slave_relay_info表来记录同步的位置信息。

#relay_log_recovery=1 #从机禁止写
为了让从库是crash safe的必须要设置relay_log_recovery=1,该参数的含义是:当从库发生崩溃或重启时,它会把那些未做完的中继日志删除,并向主库重新获取日志,再次产生中继日志的恢复,建议在从库上开启relay_log_recovery参数,默认是关闭的。当然了你为了从库得到更好的优化效果的话,请把它关掉


2、查看主库状态信息

show master status\G;
show master status;

mysql> show master status;
+-----------------+----------+--------------+-------------------------------------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+-----------------+----------+--------------+-------------------------------------------------+-------------------+
| mysqlbin.000017 |      154 | hr           | mysql,information_schema,performance_schema,sys |                   |
+-----------------+----------+--------------+-------------------------------------------------+-------------------+


3、登录Mysql数据库,配置将连接的主库信息
从库按照主库给出信息进行修改
change master to
master_host=‘192.168.100.66’,
master_port=3306,
master_user=‘repl’,
master_password=‘123456’,
master_log_file=‘mysqlbin.000017’,
master_log_pos=154;

注:里面的信息要写自己主库的信息,账号写自己创建的账号


4、查看从库信息状态
启动从库 进行测试
start slave;
stop slave;
show slave status \G;

show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.100.66
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqlbin.000017
          Read_Master_Log_Pos: 154
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: mysqlbin.000017
             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: 526
              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: 1
                  Master_UUID: 497bc227-19c5-11ee-a978-080027b1fb7d
             Master_Info_File: mysql.slave_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)

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

状态显示yes正常搭建成功

如果你的虚拟机崩溃了恢复后导致无法同步,或者你多次配置从库的主库信息初始化阶段失败的话。

报错信息为:初始化信息失败

ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log

先执行
reset slave; 清空你之前的配置的从库信息
然后再重启从库
start slave;

重点说明的是:如果你是第一次配置主从复制集群的话,一般不会出现这个问题。

四、测试

主库和从库同步完成

至此,主库分离成功实现

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

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

相关文章

学习笔记整理-BOM-01-基础知识

一、 BOM常用对象 BOM(Browser Object Model,浏览器对象模型)是JS与浏览器窗口交互的接口。一些与浏览器改变尺寸、滚动条滚动相关的特效,都要借助BOM技术。 1. Window对象 window对象是当前JS脚本运行所处的窗口,而这…

最新Burp Suite入门技术

点击星标,即时接收最新推文 本文选自《web安全攻防渗透测试实战指南(第2版)》 五折购买链接:u.jd.com/3ibjeF6 Burp Suite的安装 Burp Suite是一款集成化的渗透测试工具,包含了很多功能,可以帮助我们高效地…

word 应用 打不开 显示一直是正在启动中

word打开来显示一直正在启动中,其他调用word的应用也打不开,网上查了下以后进程关闭spoolsv.exe,就可以正常打开word了

Python学习笔记_基础篇(三)_数据类型之列表

一.基本数据类型 整数:int 字符串:str(注:\t等于一个tab键) 布尔值: bool 列表:list (元素的集合) 列表用[] 元祖:tuple 元祖用() 字典:dict 注&a…

中电金信:技术实践|Flink多线程实现异构集群的动态负载均衡

导语:Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。本文主要从实际案例入手并结合作者的实践经验,向各位读者分享当应用场景中异构集群无法做到负载均衡时,如何通过Flink的自定义多线程来实现异…

LangChain入门:构建LLM驱动的应用程序的初学者指南

LangChain & DemoGPT 一、介绍 你有没有想过如何使用大型语言模型(LLM)构建强大的应用程序?或者,也许您正在寻找一种简化的方式来开发这些应用程序?那么你来对地方了!本指南将向您介绍LangChain&#x…

Jquery 复选框点击生成标签 源代码

html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>服务资源管理</title><link rel"stylesheet" type"text/css" href"../lib/layui/css/layui.css" /><link rel"st…

从零搭建vue + element-plus 项目

目录 从零搭建vue element-plus 项目 环境安装 安装项目 安装命令如下&#xff1a; 选择配置如下&#xff1a; 安装插件与启动服务 安装element框架 使用element框架 测试element是否安装成功 环境判断 安装插件 使用插件 配置变量 暴漏变量 测试…

菜单和内容滚动的联动原理及代码

之前写代码有个需求&#xff1a;左侧是一个菜单&#xff0c;右边是内容&#xff0c;点击左侧菜单右边内容滚动到对应位置&#xff0c;右边内容滚动到某位置时&#xff0c;左侧菜单也会选中对应的菜单项。UI如下&#xff1a;这是大多网站的移动端都会有的需求。 解决方案一&…

Presto之Union算子的实现

一. 前言 在Presto中&#xff0c;Union的算子包括自动去重的Union操作和不去重的Union All操作。本文主要简述在Presto中Union All算子是如何实现和Union算子中是如何实现数据去重的。 二. Presto之Union的实现 1. 首先在g4中将sql的union关键词与setOperation进行绑定 2. AstB…

css 利用 linear-gradient 实现条纹背景

1. 水平条纹背景 当给背景设置渐变效果时&#xff0c;默认的渐变方向是垂直由上到下的&#xff0c;效果如下&#xff1a; {background: linear-gradient(#aaa, #ddd);} 尝试拉近色标的距离&#xff0c;会发现渐变区域变小了&#xff1a; {background: linear-gradient(#aaa 40…

Spring Security6 最新版配置该怎么写,该如何实现动态权限管理

Spring Security 在最近几个版本中配置的写法都有一些变化&#xff0c;很多常见的方法都废弃了&#xff0c;并且将在未来的 Spring Security7 中移除&#xff0c;因此又补充了一些新的内容&#xff0c;重新发一下&#xff0c;供各位使用 Spring Security 的小伙伴们参考。 接下…

Android控件【Notification】

文章目录 Notification与NotifactionManager创建一个NotificationManager使用Builder构造器来创建Notification对象 NotificationChannel通知重要程度设置&#xff0c;NotificationManager类中 Notification&#xff08;通知&#xff09;常见方法说明注意项目结构主要代码 Noti…

国产DSP,经典之作,C2000,QX320F280049

特性&#xff1a; 1、替代TI 的 TMS320F280049 2、独立双核&#xff0c;主频400MHz 3、单精度浮点运算&#xff0c;三角函数运算 4、Flash 1MB&#xff0c;SRAM 1MB 5、12bit ADC&#xff0c;采样率 3.45MSPS 6、16个高分辨率 ePWM 优点&#xff1a; 1、主频400MHz&#xff0c…

clion2020.3配置clang-format

标题clion 启用clang-format 文件->设置->编辑器->代码样式. 为了保持原有代码风格不变&#xff0c;可以把原始的配置风格先导出&#xff0c;最好直接保存到自己的工程下&#xff0c;.clang-format是隐藏文件&#xff0c;需要用ctrlH才能看到 文件->设置->编辑…

i++和++i在操作数栈和局部变量表的分配

1、执行运算指令时&#xff0c;压入操作数栈的顺序不受运算优先级影响 2、i 先将i值压入到操作数栈&#xff0c;再在局部变量表自增 3、i 先在局部变量表自增&#xff0c;再压入到操作数栈 记忆方法&#xff1a;i的先后&#xff0c;表示压入操作数栈的先后。 看如下例子&am…

从零实战SLAM-第七课(多视角几何)

在七月算法报的班&#xff0c;老师讲的蛮好。好记性不如烂笔头&#xff0c;关键内容还是记录一下吧&#xff0c;课程入口&#xff0c;感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…

Centos7 开机时遇到initramfs-xxx.img not found错误导致虚拟机无法开启问题处理

1、背景 一台运行在Esxi上面的VM重启后报initramfs-xxx.img not found错误。 按任意键后出现以下错误。 之前在运维Centos7的时候解决过Kernel panic - not syncing : VFS: Unable to mount root fs on unknown-block(0.0)错误&#xff0c;以为按照之前的解决方案&#xff0c;…

【删除vlan的方法】

提示错误 [SW1]undo vlan 10 Error: The VLAN has a L3 interface. Please delete it first. 解决办法 undo interface Vlanif10 #删除vlan 10下的接口 [SW1-GigabitEthernet0/0/1]dis this #删除下列的IP

vue3+ts使用antv/x6 + 自定义节点

使用 2.x 版本 x6.antv 新官网: 安装 npm install antv/x6 //"antv/x6": "^2.1.6",项目结构 1、初始化画布 index.vue <template><div id"container"></div> </template><script setup langts> import { onM…