MySQL 5.7 主从复制

2023-05-16

主从复制概念

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

主从复制模式

  1. 一主一从

  一主一从和一主多从是最常见的主从架构,实施起来简单并且有效,不仅可以实现HA,而且还能读写分离,进而提升集群的并发能力。

  1. 多主一从

  多主一从可以将多个mysql数据库备份到一台存储性能比较好的服务器上。

  1. 双主复制

双主复制,也就是互做主从复制,每个master既是master,又是另外一台服务器的slave。这样任何一方所做的变更,都会通过复制应用到另外一方的数据库中。

  1. 级联复制

  级联复制模式下,部分slave的数据同步不连接主节点,而是连接从节点。因为如果主节点有太多的从节点,就会损耗一部分性能用于replication,那么我们可以让3~5个从节点连接主节点,其它从节点作为二级或者三级与从节点连接,这样不仅可以缓解主节点的压力,并且对数据一致性没有负面影响。

实现步骤

  1. 配置主库

  • 编辑主库my.cnf (vi /etc/my.cnf)

[mysqld]

datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
#表名大小写不明感,敏感为
lower_case_table_names=1

user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
# 开启binlog
log-bin=mysql-bin
# 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog-format=ROW
# 需要保证唯一性 不可与其他从服务器相同 如果为0会拒绝所有从服务器连接
server_id=1 
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 10
# 日志最大大小
max_binlog_size = 100M
# 需要写binlog的数据库
binlog_do_db = firecontrol  
# 不需要写binlog的数据库
binlog_ignore_db = mysql 
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
  • 重启主库mysql (service mysql restart),进入mysql控制台 (mysql -uroot -p)

# 创建一个用户用来给从库复制用
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 查看主库参数 ,记住 File 和 Position 对应的参数,从库需要配置这些参数
mysql>  show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |     2336 | firecontrol  | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
  1. 配置从库

  • 编辑主库my.cnf (vi /etc/my.cnf)

[mysqld]

datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
#表名大小写不明感,敏感为
lower_case_table_names=1

user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
# 开启binlog
log-bin=mysql-bin
# 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog-format=ROW
# server_id不要重复
# 需要保证唯一性 不可与其他从服务器相同 如果为0会拒绝所有从服务器连接
server_id=2
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 10
# 日志最大大小
max_binlog_size = 100M
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
  • 重启从库mysql (service mysql restart),进入mysql控制台 (mysql -uroot -p)

# 配置主库,master_log_file 对应上面 File, master_log_pos 对应 Position
mysql> change master to master_host='192.168.1.15', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=2336, master_connect_retry=30;
# 开启主从复制
mysql> start slave;
# 查看主从复制状态,主要看下Slave_IO_Running、Slave_SQL_Running是不是全是yes,否,上面参数配置有问题
mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.15
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 3063
               Relay_Log_File: localhost-relay-bin.000003
                Relay_Log_Pos: 3229
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  1. 验证主从复制

在主库中执行增、删、改语句,看从库数据是不是也改变,收工

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 5.7 主从复制 的相关文章

  • MySQL 字符串中的第二个(或第三个)索引

    查找字符串中第三个空格的索引的最简单方法是什么 我的目标是得到CCC在此空格分隔的列表之外 AAAA BBBB CCCC DDDD EEE 其中A B和D是固定长度 C是可变长度 E F G是可选的 在Java中 我会使用indexof 起
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 何时在 mysql 中使用 Union [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于 Union 您会在什么现实情况下使用它 因为对我来说 对具有不同列用途 含义的两个表中的两个选择查询使用联合是没有意义的 例如
  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • MySQL集群启动失败

    这不是我第一次创建ndbcluster 但我没有收到这样的问题 我正在关注本手册 https hub docker com r mysql mysql cluster by mysql团队 我正在使用回显的默认配置在此 GitHub 存储库
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • MySQL - 多个结果集

    我正在使用 NET Connector 连接到 MySQL 在我的应用程序中 很少有线程使用相同的连接 因此如果 MySQLDataReader 尚未关闭并且某个线程正在尝试执行查询 则会出现该错误 已经有一个打开的 DataReader
  • 如何为我的整个 Node.js 应用程序使用相同的 MySQL 连接?

    我有一个app js 我从那里运行我的整个应用程序 在 app js 内部 我require许多文件中都有代码 对于每个文件 我都这样做 var mysql require mysql var mclient mysql createCon
  • 获取mysql中逗号分隔行中不同值的计数

    一个表 Jobs 有 2 列 JobId 城市 当我们保存工作时 工作位置可能是多个城市 如下所示 JobId City 1 New York 2 New York Ohio Virginia 3 New York Virginia 我如何
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • MySQL 和 PHP 参数 1 作为资源

    好吧 当我运行下面提到的代码时 PHP 向我抛出此错误 在日志中 Error mysql num rows 期望参数 1 为资源 第 10 行 place 中给出的字符串 9 11号线 queryFP SELECT FROM db coun
  • meta_query,如何使用关系 OR 和 AND 进行搜索?

    已解决 请参阅下面的答案 我有一个名为的自定义帖子类型BOOKS 它有几个自定义字段 名称为 TITLE AUTHOR GENRE RATING 我该如何修复我的meta query下面的代码以便仅books在自定义字段中包含搜索词 tit
  • 没有提示指令的直连接中表的顺序是否会影响性能?

    所有基于 SQL 的 RDBMS 10 年前的版本 直接连接查询 没有提示指令 中的表顺序是否会对最佳性能和内存管理产生影响 听说最后一个join应该是最大的表 您的数据库的查询优化器如何处理这种情况 回答你的问题 是的 表的顺序在连接中有
  • MySQL JOIN 滥用?情况会变得有多糟糕?

    我读了很多关于关系数据库的文章 在每个 SELECT 上使用许多 JOIN 语句 但是 我一直想知道滥用这种方法从长远来看是否会出现任何性能问题 例如 假设我们有一个users桌子 我通常会添加 最常用 的数据 而不是进行任何额外的联接 例
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • MySQL 概念:会话与连接

    我对 MySQL 的概念有点困惑 会话与连接 当谈论连接到 MySQL 时 我们使用连接术语 连接池等 然而在 MySQL 在线文档中 http dev mysql com doc refman 4 1 en server system v
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in

随机推荐

  • iOS性能优化的几个方向

    一 界面优化 1 卡顿原理 要了解卡顿原理 xff0c 需要对帧缓冲区 垂直同步 CPU 和 GPU 几个词进行一下了解 xff0c 然后综合起来 xff0c 就可以得到卡顿的答案 1 1 帧缓冲区 听起来很高大上 xff0c 其实就是用来
  • VMware16虚拟机:下载和安装教程

    Windows 10系统下载 生成iso镜像文件 VMware16虚拟机 xff1a 下载和安装教程 VMware16虚拟机 xff1a 安装Windows10系统 超详细教程 VMware16虚拟机 xff1a 在Windows10系统下
  • 激励视频广告——未来移动APP的商业变现标配?

    你喜欢看广告吗 xff1f 今年6月著名广告人叶茂中接受采访时表示 xff1a 没有人喜欢广告 事实果真如此吗 xff1f Facebook的一份报告呈现出了不一样的答案 xff1a 在不愿花钱移除广告的用户中 xff0c 57 不介意看到
  • Mysql8.0版本忘记密码重置操作

    很多同学忘记密码 xff0c 找到很多攻略无效 xff0c 多是因为攻略适用版本老旧 xff0c 此攻略适用于8 0版本 xff01 第一步 xff1a 在命令行输入net stop mysql命令关闭mysql服务 net stop my
  • C语言---数组排序

    1 冒泡排序 xff08 从后往前 xff09 1 比较相邻的元素 如果第一个比第二个大 xff0c 就交换他们两个 2 对每一对相邻元素作同样的工作 xff0c 从开始第一对到结尾的最后一对 在这一点 xff0c 最后的元素应 该会是最大
  • 【笔记】Debian 11 在国内网络环境下安装 Docker 环境

    Debian 11 在国内网络环境下安装 Docker 环境 配置方法1 安装必要的一些系统工具2 安装GPG证书3 写入软件源信息4 更新并安装Docker CE 具体参考 阿里云官方文档 以下命令都是在 root 用户下执行 配置方法
  • 两个对象List根据属性取交集和差集

    背景介绍 咸鱼君最近做了个需求 excel导入功能 其中 需要对已导入条目的做 更新 未导入的条目做 新增 其余的做 删除 细品需求 无非是对excel的数据和数据库的数组做个差集 交集的处理 打个比方 excel的数据我们定义为 newL
  • 【epoll】epoll使用详解(精髓)--研读和修正

    目录 epoll 和select epoll的接口 如何来使用epoll epoll程序框架 伪代码 xff1a 示例代码 大致流程 实例源码 相关知识 Socket的阻塞模式和非阻塞模式 如何动态的改变listen监听的个数呢 xff1f
  • AtCoder从小白到大神的进阶攻略

    摘自https www cnblogs com LHYLHY p 11572011 html 在此对作者表示感谢 AtCoder从小白到大神的进阶攻略 前言 现在全球最大的编程比赛记分网站非CodeForces和AtCoder莫属了 xff
  • [codeforces 1328B] K-th Beautiful String 研究倒数第二个字母b的位置

    Codeforces Round 629 Div 3 比赛人数10967 codeforces 1328B K th Beautiful String 研究倒数第二个字母b的位置 总目录详见https blog csdn net mrcra
  • [codeforces 1352C] K-th Not Divisible by n 周期

    Codeforces Round 640 Div 4 参与排名人数9749 终于弄明白账号前 的意义 out of competition 也即虽然该用户参加本场比赛 但不参与排名 codeforces 1352C K th Not Div
  • Linux安装、启动、检查、访问、停止Tomcat服务

    一 去官方下载你需要的tomcat版本 xff08 如果已经下载好了 xff0c 请跳过此步骤 xff09 我这里下载的是tomcat9 0 63 xff0c 下载地址 xff1a 我是tomcat9 0 63下载地址 打开页面 xff0c
  • 【三维可视化Qt+OPEN CASCADE-001】傻瓜式配置——可在Qt creator下运行github例程

    前言 因为一个大项目需要 xff0c 在QT界面利用occ做三维可视化的东西 xff0c 所以需要配置 网上的配置攻略不是在VS下用MFC做 xff0c 就是用VS 43 QT的插件 xff0c 也有老哥用Qt Creator做 xff0c
  • Linux下DVWA的搭建

    1 配置CentOS7 1 1 配置yum国内镜像源 span class token function curl span span class token parameter variable o span etc yum repos
  • git clone 报错:fatal: Unencrypted HTTP is not supported for GitLab. Ensure the repository remote URL i

    git版本问题 xff0c 是当前版本过高 xff0c 要求使用https协议 xff0c 需要根据需要安装指定版本 遇到这个问题时我的git版本是 xff1a 需要安装指定版本
  • 以太网帧间隙

    以太网帧间隙 1 什么是IFG xff1f xff08 What xff09 IFG Interframe Gap 帧间距 xff0c 以太网相邻两帧之间的时间断 xff1b 以太网发送方式是一个帧一个帧发送的 xff0c 帧与帧之间需要间
  • Debian修改系统默认语言

    系统版本 xff1a Debian 10 1 0x64 安装过程中选择了中文作为默认语言 xff0c 即zh CN UTF 8 xff0c 现将系统默认语言改为英文 修改方法 xff1a 在Terminal中键入以下命令 xff1a sud
  • 通俗的解释docker

    Docker的思想来自于集装箱 xff0c 集装箱解决了什么问题 xff1f 在一艘大船上 xff0c 可以把货物规整的摆放起来 并且各种各样的货物被集装箱标准化了 xff0c 集装箱和集装箱之间不会互相影响 那么我就不需要专门运送水果的船
  • Golang-Bcrypt加密

    从安全上讲 xff0c 用户密码一般都是要经过加密 xff08 而且不能被解密 xff09 后才存储于数据库中 xff0c 相信现在已经没有什么公司蠢到直接以明文存储密码了吧 通常有很多方式可以实现密码加密 xff0c 譬如MD5签名 xf
  • MySQL 5.7 主从复制

    主从复制概念 MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点 MySQL 默认采用异步复制方式 xff0c 这样从节点不用一直访问主服务器来更新自己的数据 xff0c 数据的更新可以在远程连接上进行