MySQL的主从复制(主从数据库都是Window版本)

概述

1.什么是主从复制

主从复制是指将主库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持一致。

2.主从复制作用
  • 数据备份:通过主从复制,可以将主数据库的数据复制到一个或多个从数据库中,以实现数据备份和灾难恢复。当主数据库出现故障时,可以快速地将从数据库提升为主数据库,并继续提供服务。

  • 负载均衡:通过主从复制,可以将读操作分发到从数据库上,从而减轻主数据库的负载,提高系统的并发能力和性能。

  • 数据分析:通过主从复制,可以将主数据库中的数据复制到从数据库中进行分析,避免对主数据库产生影响。

  • 高可用性:通过主从复制,可以实现数据库的高可用性,当主数据库出现故障时,可以快速地将从数据库提升为主数据库,保证系统的持续可用性。

3.原理

1、主从同步的过程中,主库会将所有的操作事件记录在 binlog 中,
2、如果binlog 日志发生了变化,主库生成一个 binlog dump 线程向从库 I/O 线程传送 binlog
3、从库上的 I/O 线程将 binlog 复制到自己的 relay log 中
4、最终由从库中的 SQL 线程读取 relay log 中的事件重放到从库上

4.同步策略
  • 异步复制:默认同步方式,客户端在向服务端发送请求后,master 处理完之后,直接返回客户端结果,接着在将对应的 log 信息发送给 slave 节点。主库不会等待从库的确认,因此效率较高。但在主库故障时可能会丢失一部分数据。
  • 半同步复制:master 处理完自身操作,将对应的 binary log 发送给从服务器,从服务器通过 io thread 写入到 relay log 中,然后将结果返回给 master,master 在收到 salve 的响应之后在返回给客户端。这样可以减少数据丢失的可能性,但会增加主库的延迟。
  • 同步复制:主库将变更写入二进制日志后,等待所有从库确认已收到并应用了这些变更,主库才会认为事务提交成功。这样可以确保所有从库与主库的数据完全一致,但会显著增加主库的延迟,并且如果有任何一个从库出现故障或网络延迟,整个系统的性能都会受到影响。
  • 并行复制:在MySQL 5.6及以后的版本中引入了并行复制的功能,可以通过多线程并发地将变更发送给多个从库,从而提高复制性能。

选择适合的主从同步策略需要根据具体的业务需求和系统性能来进行权衡。异步复制适用于对数据一致性要求不高,但对性能要求较高的场景;半同步复制适用于对数据一致性和性能都有一定要求的场景;同步复制适用于对数据一致性要求非常高的场景,但会带来较大的延迟。并行复制可以在高负载情况下提升复制性能。

部署

1.安装

首先安装两台数据库,这里我是采用的虚拟机进行实现就不过多叙述,安装过程可以参考另外一篇博客:Windows 安装MySQL 8.0 (实测可用)从零基础入门到精通

2.主数据库修改配置信息

这里和Linux就有些不同了,window安装的MySQL的配置文件是my.ini。所以在mySQL的安装目录里找到这个文件,用记事本打开进行编辑修改。

在[mysqld]下添加或修改这些参数,配置完之后需要重启Mysql服务,可以运行services.msc找到名为“Mysql 版本号” 的服务点击重启,或者以管理员权限打开黑窗口,执行net stop Mysql 停止mysql服务,提示成功后然后再执行net start mysql 启动Mysql服务。

#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=master-bin
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#设置需要复制的数据库
binlog-do-db=test
#设置binlog格式,MIXED,ROW,STATEMENT
binlog_format=STATEMENT

3.从数据库修改配置信息

参考主数据库的修改位置

#主服务器唯一ID,与主库不能相同
server-id=2
#设置不要复制的数据库(可设置多个)
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
#设置需要复制的数据库
replicate_wild_do_table=test.%
#replicate-do-db=test

4. 打开可视化工具执行命令(或者在Mysql命令行执行)

配置文件修改完成并重启后,需要连接主数据库执行命令创建账户。

将其中的username,password换成你要创建的用户名密码,ip换成从服务器的ip,一般会写成%,代表所有远程连接都可以。

#创建用户,
CREATE USER 'username'@'ip' IDENTIFIED BY 'password';
 
#授权用户复制的权限(从服务器ip)
GRANT REPLICATION SLAVE ON *.* TO 'username'@'ip';
 
#刷新权限
FLUSH PRIVILEGES;
 
#显示二进制文件信息
show master status;

查到的这两个值需要复制出来,配置从服务器需要使用,如果不慎关掉的话再执行一次show master status 就行 

 

连接从服务器:

将master_log_file换成上一步的File文件名,master_log_pos换成上一步的position位置。

说明:这句话可以多次执行,如果你发现其中一些信息填错了是可以再次执行该命令的,但是再次执行之前需要先执行停止和重置复制的命令STOP SLAVE;和RESET SLAVE;

#master_host 主数据库地址
CHANGE MASTER TO master_host ='主服务器ip',
#设置主数据库的端口号
master_port=3306,
#上一步中主数据库创建的从库用户
master_user ='username',
#上一步中主数据库创建的从库密码
master_password ='password',
#上一步中保存的file
master_log_file ='mysql-bin.000003',
#上一步中保存的position
master_log_pos = 155;

#开启主从复制
start slave
#显示从服务器复制状态
show slave status; 

如果这两个参数都是Yes就没有问题了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值