MySQL 主从库配置(Windows)

1、原理

1.1 什么是主从复制

主从复制,就是用来建立一个和主数据库完全一样的数据库环境,这个新建的数据库称为从数据库;主数据库一般是准实时的业务数据库。

1.2 主从复制的作用

  1. 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。

  2. 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

  3. 读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

1.3 主从复制原理(重点)

  1. 数据库中的bin-log二进制文件,记录了所有Sql语句;
  2. 目标即是把主数据库的bin-log文件的Sql语句复制到从数据库,让其在从数据的relay-log重做日志文件中再执行一次这些Sql语句;
  3. 具体需要三个线程来操作:
    • binlog输出线程:每当从库连接到主库时,主库会创建一个线程然后发送到binlog内容到从库。
    • 从库I/O线程:当*start slave*语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。
    • 从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。

可以知道,对于每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog输出线程,每一个从库都有它自己的I/O线程和SQL线程。

主从复制如图:

在这里插入图片描述

原理图2

在这里插入图片描述

步骤一:主库db的更新事件(update、insert、delete)被写到binlog

步骤二:从库发起连接,连接到主库

步骤三:此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库

步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log.

步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db.

2、配置

2.1 环境准备

两个数据库:(例子用的本机和虚拟机)

主数据库IP:192.168.5.66 从数据库IP:192.168.177.128

MySql版本:5.7

Note:最好两数据库版本一致,从数据库版本不低于主数据库。

2.2 主数据库配置

  1. 创建一个新的数据库test

  2. 打开MySQL的配置文件my.ini,增加配置

    # 主从复制
    server-id=1 # 设置server-id,配置文件中一般已经有值
    log-bin=mysql-bin # 开启二进制文件
    binlog-ignore-db=mysql # 表示不同步mysql库
    binlog-ignore-db=information_schema # 表示不同步information_schema库
    binlog-ignore-db=performance_schema # 表示不同步performance_schema库
    binlog-ignore-db=sys # 表示不同步sys库
    

    Note:MySQL创建时会在隐藏目录下ProgramData文件夹下的MySQL\MySQL Server 5.7中创建my.ini,一定找对

在这里插入图片描述

  1. 重启MySQL 服务

  2. 创建用于同步的用户账号
    (1)以管理员身份打开cmd窗口后,运行mysql -uroot -p,输入密码(为空则直接回车),登陆。
    (2)先后执行下面3条命令创立用户(用户名sync,密码sync123),并刷新权限

    CREATE USER 'slave'@'192.168.177.128' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.177.128';
    FLUSH PRIVILEGES;
    

在这里插入图片描述

  1. 查看Master状态,记录二进制文件名和位置

    show master status;
    

在这里插入图片描述

二进制文件为mysql-bin.000001,位置为154

2.3 从数据库配置

  1. 创建一个新的数据库test

  2. 验证同步账号能否登陆。打开Navicat,新建链接,IP填写192.168.177.128,用户名slave,密码123456,点击“连接测试”验证是否能连接。

  3. 打开my.ini,增加配置

    server-id=2 # 主从库server-id不能一样
    log-bin=mysql-bin
    replicate_wild_ignore_table=mysql.% 
    replicate_wild_ignore_table=information_schema.%
    replicate_wild_ignore_table=performance_schema.%
    
  4. 重启MySQL服务

  5. cmd命令行登陆MySQL数据库,执行下面命令进行手动同步

    CHANGE MASTER TO MASTER_HOST='192.168.5.66',MASTER_PORT=3306,MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;
    

在这里插入图片描述

  1. 启动salve同步进程

    start slave;
    

在这里插入图片描述

  1. 查看slave状态。执行命令:

    show slave status\G;
    

在这里插入图片描述

  1. 测试。在主数据库新建一个表,刷新从数据库,可以看到这个表。

Notes:在进行数据库主从复制前,主数据库中已有表和数据,则这部分数据不会同步,需要手动导出,并在从数据库中导入。

参考链接:

https://blog.csdn.net/heyeqingquan/article/details/82768156

https://www.bilibili.com/video/BV1NA411v7W8?p=16

https://www.cnblogs.com/gdjlc/p/12222512.html

https://blog.csdn.net/tlpower/article/details/7891870

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值