数据库主从复制

主从复制

主从复制架构和原理

  • 读写分离

  • 复制:每个节点都有相同的数据集,向外扩展,基于二进制日志的单向复制

主从复制原理

1主节点负责用户的写操作,用户发起写操作后,会修改数据库
2.数据库修改后,会更新主节点上的二进制日志
3.主服务器会产生一个 dump线程, 一边读取二进制日志一边将二进制日志通过 网络传给从服务器
4.从服务器会开启io线程,接收主服务器的二进制日志
5 会写入中继日志,这时只是生成了一个文件,并没有同步
6.从服务器再开启 sql线程将 中继日志中 操作写入数据库完成更新
请添加图片描述

主从复制实战

#主服务器
vim /etc/my.cnf

[mysqld]
server-id=1
log-bin=/data/mysql/mysql-bin

mkdir /data/mysql -p
chown mysql.mysql /data -R
systemctl restart mysqld

mysql 登录数据库 新建同步用户
grant replication slave on *.* to test@'%' identified by 'Admin@123',
show master status; #查看同步文件和 同步的位置

请添加图片描述

#从服务器
vim /etc/my.cnf

[mysqld]
server-id=2 #要和主不一样
log-bin=/data/mysql/mysql-bin

mkdir /data/mysql-0chown mysql.mysql /data -R
systemctl restart mysqld
mysql登录数据库 添加主的信息

help change master to
#查看change master to 的格式,注意信息的修改

CHANGE MASTER TO
  MASTER_HOST='192.168.10.101',
  MASTER_USER='test',
  MASTER_PASSWORD='Admin@123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=1240;
#开启io线程 以及sq| 线程start slave;
show processlist;#看到进程列表
show slave status\G; # 查看从服务器状态
#去主新建数据库 验证从是否同步

#如果两个线程不是yes
stop slave;
reset slave all;
#重新配置

create database cc;
#在主建立数据库验证,从如果同步上了就是主从复制成功了

请添加图片描述
请添加图片描述

半同步复制

默认情况下,MySQL的复制功能是异步的,异步复制可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。这意味着当主服务器或从服务器端发生故障时,有可能从服务器没有接收到主服务器发送过来的binlog日志,这就会造成主服务器和从服务器的数据不一致,甚至在恢复时造成数据的丢失。设置半同步复制时当主库执行事务提交后,它不会立即返回客户端,而是等待至少一个从库确认已经接收到相应的数据变更之后,才向客户端返回确认,从而保证数据的同步性和可靠性。

rpm -ql mysql-community-server |grep semisync
#需要安装插件

vim  /etc/my.cnf
#修改文件
[mysqld]
server_id=100
log-bin=/data/mysql/mysql-bin
#rpl_semi_sync_master_enabled=ON
#rpl_semi_sync_master_timeout=3000
#修改上面两行,需要先安装semisync_master.so插件后,再重启,否则无法启动 开启半同步
#永久设置3s内无法同步,也将返回成功信息给客户端

mkdir /data/mysql/   -p
#建立文件夹
chown mysql.mysql /data/ -R
#注意修改权限
systemctl restart mysqld
mysql -uroot -p123123

mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; 
#永久安装插件
#mysql>UNINSTALL PLUGIN rpl_semi_sync_master ;卸载插件
mysql>rpm -ql mysql-community-server |grep semisync #查看插件

mysql>SET GLOBAL rpl_semi_sync_master_enabled=1; #临时修改变量
mysql>SET GLOBAL rpl_semi_sync_master_timeout = 3000;  #超时长1s,默认值为10s

mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';
#查看半同步状态

show global status like '%semi%';
#查看半同步客户端

show  master  status;

grant replication slave on *.* to test@'192.168.91.%' identified by 'Admin@123';
#建立复制用户

请添加图片描述

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
#安装插件

vim /etc/my.cnf

[mysqld]
server-id=101
rpl_semi_sync_slave_enabled=ON #修改此行,需要先安装semisync_slave.so插件后,再重启,否则无法启动

CHANGE MASTER TO
  MASTER_HOST='192.168.10.101',
  MASTER_USER='test',
  MASTER_PASSWORD='Admin@123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=1240;
 
show global status like '%semi%';
#查看状态  主从状态

mysql>SET GLOBAL rpl_semi_sync_slave_enabled=1; #临时修改变量
mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';

主上可以看到两台从机已经生效了
请添加图片描述
请添加图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值