首页 > 技术文章 > 数据库的主从架构及一主一从和一主多从的实验

cnds168 2021-09-23 17:17 原文

1.主从复制架构和原理

1.Slave 服务器上执行 start slave 命令开启主从复制开关,主从复制开始进行
2.此时,Slave 服务器的 I/O 线程会通过在 Master 上已经授权的复制用户权限请求连接 Master服务器,并请求从指定 binlog 日志文件的指定位置(日志文件名和位置就是在配置主从复制时执行change master 命令指定的)之后开始发送 binlog 日志内容
3.Master服务器接收到来自 Slave 服务器的I/O 线程的请求之后,其上负责复制的线程会根据 Slave 服务器的I/O线程请求的信息,分批读取指定 binlog 日文件所指定位置之后的 binlog 日志信息,然后返回给 Slave 端的I/O线程。返回的息中除了binlog 日志内容之外,还包括在 Master服务器端记录的新binlog 文件件名称,以及在新的 binlog 中的下一个指定的更新位置。
4.当Slave服务器的I/O线程获取到Master 服务器上I/O 线程发送的日志内容及志文件和位置点之后,会将 binlog 日志内容依次写入到Slave 端自身的 Relay Log(即中继日志)文件(MySQL-relay-bin.xxxxx)的最末端,并将新的 binlog 文件名和位置记 master-info 文件中,以便下一次读取 Master 端新 binlog 日志时,能够告诉 Master务器需要从新 binlog 日志的指定文件及位置开始请求新的 binlog 日志内容。
5.slave 服务器端的 SQL线程会实时地检测本地 Relay Log 中I/O线程新增加的日志内容,然后及时地把Relay Log 文件中的内容解析成SQL语句,并在自身 Slave服务器上按解析 SQL语句的位置顺序执行和应用这些 SQL语句,并将当前应用中继日志的文件名及位置点记录在 relay-log.info 中。

向上扩展 垂直扩展

向外扩展  横向扩展

[root@localhost ~]# cat /var/log/mysqld.log数据库日志

/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
系统:
二、主从复制

 


 主从:

主 :开启 dump thread(线程)作用:服务slave的 io thread(线程)

 从:开启 io thread(线程)作用:将主服务器的二进制日志写入本地中继日志

         开启 sql thread(线程)作用:将中继日志中的sql语句在本地重放

主服务器:要配置server-id  /  log-bin     

format:行格式出来问题再考虑

grant replication slave on 某一个数据库 to user@host..密码..

从服务器:要配置 server-id 不要开启log-bchange master 指定从服务器的同步hostport:port

user:
passwd:
logbin file: show master status\G
pos
1.start slave: stop slave;show slave status;
2.slave io thread 使用user(master授权)请求连接master,并请求从指定的binlog的指定位置之后开发发送内容
3.master 接受到slave的io thread(线程)请求之后,master上负责复制的线程dump 线程 ,检查没有问题分批读取指定binlog文件的pos点,然后返回给slave
的io线程(包括master上最新的binlog的pos点(下一次更新的))
4.slave的 io线程收到信息就写入到中继日志,并将master上最新的binlog pos点保存至master-info中
5.slave的sql线程会实时检测中继日志中io线程新增的sql语句,然后按照顺序在服务器执行和应用,并将中继日志的文件和pos点记录relay-info中
实验主从服务器
关闭防火墙:systemctl stop firewlld
保证selinux在:
[root@localhost ~]# getenforce

Disabled模式下

第一步:在主服务器的/etc/my.cnf中添加log-bin=log-bin   /server-id=1
第二步:登录主服务器的mysql:grant replication slave on *.* to repl@'192.168.0.%' identified by '123456';
第三步:flush privileges;刷新权限
第四步:show master status\G 查看pos的点
第五步:在从服务器的/etc/my.cnf中添加server-id=2
第六步:登录mysql :change master to master_host='192.168.50.8',
master_port =3306,
master_user='repl',master_password='123456',master_log_file='pos的点,master_log_pos=pos的点';
第八步:start slave
show slave status\G查看状态
第九步:在主服务器数据库中创建一个数据库:create database class7;
第十步:create table class7.test(age int);
insert into class7.test values (1),(2),(3);
select * from class7 .test;
在另一台服务器上也select * from class7.test; \\\这十步一主一从
一主多从 第十一步:在第三台从服务器上/etc/my.cnf下添加server-id=3 重启mysqld
第十二步:编写一个脚本 vim slave.sh

mysql << EOF
change master to master_host='192.168.158.128',
master_port=3306,
master_user='repl',
master_password='123456',
master_log_file='log-bin.000002',pos点的起点
master_log_pos=154;pos点的终止点
EOF



bash slave.sh
第十三步:mysql
start slave
show slave status\G


 

推荐阅读