MySQL主从架构说明及配置_mysql数据库不参与选举吗,2024年最新软件测试高级面试题库

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

SQL线程
SQL线程读取relay log日志中的内容,然后解析成具体的SQL语句并执行,最终完成数据同步。

在这里插入图片描述
主从复制过程:
1)主节点数据更新,随后将具体的更新语句写到binlog日志中。

2)从节点开启主从复制功能,创建一个I/O线程,连接主节点。

3)主节点接收到从节点的连接后,创建一个binary log dump线程,把binlog日志中更新的内容发送到从节点。

4)从节点的I/O线程读取主节点发送的binlog日志,并写入到relay log中。

5)从库创建SQL线程,读取relay log日志中的内容,并解析执行,完成数据同步。

以上描述是一主一从架构,若是其他架构,其原理也是一样的,只不过细节上稍微有一点不一样。例如:一主多从架构,在主从复制时,主节点会分别为每个从节点创建一个binary log dump线程传递更新数据,而从节点使用各自的I/O线程和SQL线程。

二进制日志格式

MySQL的三种复制方式:
基于SQL语句复制(statement-based replication,简称SBR)
基于行的复制(row-based replication,简称RBR)
混合模式复制(mixed-based replication,简称MBR)

根据不同的方式,binlog日志的格式也有三种,分别是:STATEMENT(基于SQL语句复制),ROW(基于行的复制),MIXED (混合模式复制)。

STATEMENT模式(SBR)

会将数据修改的SQL语句写到binlog日志中,无需记录每行数据变化,减少了日志量,但有些数据无法保存,不能保证数据的一致性。

ROW模式(RBR)

此模式为默认。

仅记录数据被修改,修改成什么样子,不记录SQL语句信息,很大程度上保证了数据的一致性,但会产生大量的日志。

MIXED模式(MBR)

结合STATEMENT模式和ROW模式使用,优先使用STATEMENT模式保存binlog,对于STATEMENT模式无法保存的数据,则使用ROW模式进行保存。对于STATEMENT模式是否能够保存数据,由MySQL自行判断。

MySQL主从复制模式

全同步模式
主库执行完一个事务后,所有从库也执行该事务,当所有从库都执行完该事务后才返回给客户端。

优点:确保数据的一致性
缺点:性能影响严重

异步复制

此模式为默认。

主库执行完一个事务后,立即将更新数据发送给从库,并不关心从库是否接收。

优点:减少部分资源消耗
缺点:无法确认从库是否复制成功

半同步模式
相当于异步复制的改良版,主库执行完事务后,至少一个从库接收并写入到relay log中才返回给客户端。

优点:确保从库复制成功
缺点:这个过程需要花费一部分时间

MySQL架构方案

一主一从
在这里插入图片描述
提升负载均衡

一主多从
在这里插入图片描述
提升负载均衡,可用于高可用和读写分离,但主节点I/O压力较大。

多主一从
在这里插入图片描述
适用于写操作较为频繁的环境。

互为主从
在这里插入图片描述
也叫做双主互备,用于读写操作都较为频繁的环境。

注:有人说这个架构可以提供负载均衡,我个人认为对的,但是每当有一个库数据更新,另一个库都需要消耗一部分资源来进行同步数据,架构还不如使用一主一从。但可以双向写入的特点,在写操作较为频繁的场合还是很适用的。

联机复制
在这里插入图片描述
将一台从库作为中继,减轻主库的I/O压力。

更改二进制日志格式

对于二进制日志的保存操作,默认的ROW格式并不是一个很好的选择,其会产生大量的日志数据,对后续的主从复制效率不高。

查看binlog格式

mysql> show variables like “binlog_format”;
±--------------±------+
| Variable_name | Value |
±--------------±------+
| binlog_format | ROW |
±--------------±------+

其实不管是主从架构,还是单纯的保存binlog日志,ROW格式都不是最好的选择,建议使用MIXED格式,其结合STATEMENT模式和ROW模式保存数据,即能减少日志的大小,又能确保数据的完整。

直接编辑/etc/my.cnf配置文件,在其中指定binlog日志格式即可。

binlog-format=MIXED

随后重启数据库,刷新配置。

/etc/init.d/mysql.server restart

再次进入到数据库中查看binlog日志格式

mysql> show variables like “binlog_format”;
±--------------±------+
| Variable_name | Value |
±--------------±------+
| binlog_format | MIXED |
±--------------±------+

已成功更改为MIXED模式。

MySQL主从复制部署

以一主一从为例,列举了MySQL架构的搭建过程。

环境准备
系统版本/MySQL版本主机名IP地址角色准备
CentOS7.7/MySQL8.0.13linux.node1192.168.1.123master关闭防火墙,selinux
CentOS7.7/MySQL8.0.13linux.node2192.168.1.123slave关闭防火墙,selinux
一主一从架构部署

1)搭建时间同步服务

对于数据的实时同步,若两台服务器的时间都对不上,又谈何而来的实时同步呢?

主节点安装NTP服务

yum install -y ntp

修改ntp服务的配置文件,路径位于 /etc/ntp.conf ,并添加以下两项

server 127.127.1.0 #权威NTP不可用时,本机时间作为时间服务
fudge 127.127.1.0 stratum 8 #NTP服务的阶级层数,同步上层服务器的stratum 大小不能超过或等于16。

开启服务

systemctl start ntpd

查看端口

netstat -anpu | grep ntpd
udp 0 0 192.168.122.1:123 0.0.0.0:* 2726/ntpd
udp 0 0 192.168.1.123:123 0.0.0.0:* 2726/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 2726/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 2726/ntpd
udp6 0 0 fe80::8c62:89:ad82::123 ::😗 2726/ntpd
udp6 0 0 ::1:123 ::😗 2726/ntpd
udp6 0 0 :::123 ::😗 2726/ntpd

从节点安装ntp客户端

yum install -y ntpdate

与主节点同步时间

ntpdate 192.168.1.123
19 Jun 16:31:27 ntpdate[61266]: adjust time server 192.168.1.123 offset 0.459178 sec

显示将时间偏移了0.459178秒,时间同步成功。

注:以下为主节点配置

2)创建测试数据

mysql> create database replication;
mysql> use replication;
mysql> create table test(id int,name varchar(233));
mysql> insert into test values(1,‘一主一从’);

3)创建主从复制授权用户

mysql> create user ‘slave’@‘192.168.1.%’ identified by ‘123456’;
mysql> grant replication slave on *.* to ‘slave’@‘192.168.1.%’;
mysql> flush privileges;

4)修改my.cnf文件

以下为添加配置项

server-id=1
binlog-format=MIXED
log-bin=/data/mysql/log/mysql-bin-master
binlog-do-db=replication
#binlog-ignore-db=mysql

server-id: mysql的同步的数据中是包含server-id的,用于标识该语句最初是从哪个server写入,不同节点的server-id不能相同。
binlog-format:binlog日志格式
log-bin:binlog日志存放路径
binlog-do-db:指定binlog日志保存哪个库的数据记录,不添加为全库。
binlog-ignore-db:指定binlog日志不保存哪个库的数据记录,不添加为全部不保存。(若有binlog-do-db配置项,则只保存其指定的库)

重启数据库,刷新配置

/etc/init.d/mysql.server restart

5)查看生成的二进制日志

ls /data/mysql/log/
mysql-bin-master.000001 mysql-bin-master.index mysqld.log

数据库中查看

mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin-master.000001
Position: 155
Binlog_Do_DB: replication
Binlog_Ignore_DB: mysql
Executed_Gtid_Set:

6)将主库的数据传入从库

mysqldump -uroot replication > db.sql
scp db.sql root@192.168.1.124:~
The authenticity of host ‘192.168.1.124 (192.168.1.124)’ can’t be established.
ECDSA key fingerprint is SHA256:dt6xhgOGH0g33XrYjk1qPbtD4C2hg62DlqfRMoUSK88.
ECDSA key fingerprint is MD5:9b:ef:79:5b:01:9e:63:0d:75:a7:c7:3e:62:a7:6a:04.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.1.124’ (ECDSA) to the list of known hosts.
root@192.168.1.124’s password:
db.sql 100% 1817 2.3MB/s 00:00

注:以下为从节点配置

7)从库将SQL脚本导入库中

mysql -uroot -e “create database replication;”
mysql replication < db.sql

查看数据是否导入成功

mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| replication |
| sys |
±-------------------+

8)修改my.cnf文件
在原有基础上添加以下配置项

server-id=2
relay-log=/data/mysql/log/relay-log-bin
relay-log-index=/data/mysql/log/slave-relay-bin.index
#replicate_do_db=replication

server-id:服务器ID号
relay-log:relay-log日志存放路径
relay-log-index:relay-log日志的索引文件存放路径
replicate_do_db:指定从库复制的数据库

重启服务,刷新配置

/etc/init.d/mysql.server restart

9)测试授权用户是否可以登录主库

mysql -uslave -h192.168.1.123 -p123456

登录进去后,查看其中的数据库

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
y-log日志的索引文件存放路径
replicate_do_db:指定从库复制的数据库

重启服务,刷新配置

/etc/init.d/mysql.server restart

9)测试授权用户是否可以登录主库

mysql -uslave -h192.168.1.123 -p123456

登录进去后,查看其中的数据库

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-C3ZMamYQ-1713337744361)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值