欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 数据库主从复制

数据库主从复制

2024/10/24 6:29:18 来源:https://blog.csdn.net/cc2022928/article/details/140183568  浏览:    关键词:数据库主从复制

主从复制

主从复制架构和原理

  • 读写分离

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

主从复制原理

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

主从复制实战

#主服务器
vim /etc/my.cnf[mysqld]
server-id=1
log-bin=/data/mysql/mysql-binmkdir /data/mysql -p
chown mysql.mysql /data -R
systemctl restart mysqldmysql 登录数据库 新建同步用户
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-binmkdir /data/mysql-0chown mysql.mysql /data -R
systemctl restart mysqld
mysql登录数据库 添加主的信息help change master to
#查看change master to 的格式,注意信息的修改CHANGE MASTER TOMASTER_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 -p123123mysql>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,默认值为10smysql>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 TOMASTER_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%';

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com