Lnmp架构之mysql数据库实战1

1、mysql数据库编译

Lnmp架构之mysql数据库实战1_第1张图片

编译成功

Lnmp架构之mysql数据库实战1_第2张图片

2、mysql数据库初始化

配置数据目录

Lnmp架构之mysql数据库实战1_第3张图片

全局文件修改内容

Lnmp架构之mysql数据库实战1_第4张图片Lnmp架构之mysql数据库实战1_第5张图片

生成初始化密码并进行初始化设定

Lnmp架构之mysql数据库实战1_第6张图片Lnmp架构之mysql数据库实战1_第7张图片

3、mysql主从复制

Lnmp架构之mysql数据库实战1_第8张图片

什么是mysql的主从复制?

MySQL的主从复制是一种常见的数据库复制技术,用于将一个数据库服务器(称为主服务器)上的数据同步到另一个或多个数据库服务器(称为从服务器)上。

在主从复制中,主服务器负责处理所有的写入操作(INSERT、UPDATE、DELETE等),同时将这些写入操作记录在二进制日志(binary log)中。从服务器通过连接到主服务器并从二进制日志获取数据变更记录,然后将这些操作应用到自己的数据库中。

mysql复制的原理

1. 主库(Master服务器)记录二进制日志(Binary Log):主库负责处理所有的写操作(INSERT、UPDATE、DELETE等),并将这些操作记录在二进制日志中。二进制日志包含了数据变更的详细信息,以便从库能够获取到。

2. 从库(Slave服务器)连接主库:从库通过配置主库的IP地址和认证信息来连接主库。

3. 从库生成I/O线程(I/O Thread):从库启动时,生成一个I/O线程。I/O线程负责连接到主库,并监听主库上的二进制日志事件。它会一直读取主库的二进制日志,将数据写入从库的中继日志(Relay Log)中。

4. 主库接收从库连接请求:主库收到从库的连接请求后,会验证从库的身份,并将需要复制的二进制日志发送给从库的I/O线程。

5. I/O线程将事件写入中继日志:I/O线程将从主库获取到的二进制日志事件写入从库的中继日志中。中继日志是从库上的一系列二进制日志文件,它保存了从主库同步过来的数据变更事件。

6. 从库生成SQL线程(SQL Thread):同时,从库还会生成一个SQL线程。SQL线程负责读取中继日志中的二进制日志事件,并在从库上执行这些事件。它会将事件转换为对应的SQL语句,然后逐条执行这些SQL语句,将数据变更应用到从库的数据库中。

7. SQL线程执行中继日志中的事件:SQL线程会读取中继日志中的二进制日志事件,并逐条解析执行这些事件。它将事件转换为相应的SQL语句,并在从库上执行这些SQL语句,将数据变更应用到从库的数据库中。

8. 从库周期性地重复上述步骤:从库会周期性地重复执行上述步骤,以保持与主库的同步。I/O线程会持续监听主库的二进制日志事件,将其写入中继日志;SQL线程会读取中继日志中的事件并执行。通过不断重复这个过程,从库能够保持与主库的数据一致性

配置master服务器

Lnmp架构之mysql数据库实战1_第9张图片Lnmp架构之mysql数据库实战1_第10张图片Lnmp架构之mysql数据库实战1_第11张图片

配置slave服务器

在server2上(已安装设定好mysql服务)

Lnmp架构之mysql数据库实战1_第12张图片Lnmp架构之mysql数据库实战1_第13张图片

测试:

在master(主服务器)上

Lnmp架构之mysql数据库实战1_第14张图片

在server2(从服务器)上实现同步

Lnmp架构之mysql数据库实战1_第15张图片

当master上有数据时的同步方法

将server1和server2上的数据文件复制到server3上

Lnmp架构之mysql数据库实战1_第16张图片

在server3上

Lnmp架构之mysql数据库实战1_第17张图片Lnmp架构之mysql数据库实战1_第18张图片Lnmp架构之mysql数据库实战1_第19张图片

在server1 master 上

注意:生产环境中备份时需要锁表,保证备份前后的数据一致 mysql> FLUSH TABLES WITH READ LOCK;

备份后再解锁 mysql> UNLOCK TABLES;

注意:mysqldump命令备份的数据文件,在还原时先DROP TABLE,需要合并数据时需要删除此语句

在server3上

Lnmp架构之mysql数据库实战1_第20张图片Lnmp架构之mysql数据库实战1_第21张图片Lnmp架构之mysql数据库实战1_第22张图片

测试:

Lnmp架构之mysql数据库实战1_第23张图片

只有读的操作远远多于写的操作时才会用一主多从,数据库的外部需要接入高可用负载均衡;

缺陷:

master 端Binlog是直接考给slave的是异步操作

异步操作:master 端更新完了之后直接发给slave,master不需要知道slave端是否接收到,这样就会导致比如master端到slave端网络出现问题;意思就是master可以成功运作,也把日志发给slave 但是由于网络的问题,这个数据没有真正发送给slave端,那么这时候master down掉之后,slave端开始接管的时候 数据就会丢失。

Lnmp架构之mysql数据库实战1_第24张图片

在IO中有个内置的半同步模式

Lnmp架构之mysql数据库实战1_第25张图片

在IO中,有个内置的半gtid模式

切到gtid模式

master配置

Lnmp架构之mysql数据库实战1_第26张图片

slave配置(所有节点配置相同)

Lnmp架构之mysql数据库实战1_第27张图片

重新配置+重新启动

Lnmp架构之mysql数据库实战1_第28张图片

Lnmp架构之mysql数据库实战1_第29张图片

在gtid模式下,当master有问题的时候,就会挑离它id最近的slave作为master,供给下面的slave,以此类推。

通过设置gtid 大大降低复杂度。通过全局的方式,不用关心它的日志文件和binlog号,gtid 只关心它的下一跳是谁就行,就是gtid next。

master端添加数据

Lnmp架构之mysql数据库实战1_第30张图片

slave即可查询到gtid标识号

Lnmp架构之mysql数据库实战1_第31张图片

server3也可以

Lnmp架构之mysql数据库实战1_第32张图片

半同步模式(必须要走gtid)

解决IO

给master端安装半同步模块

Lnmp架构之mysql数据库实战1_第33张图片

slave端也安装半同步模块并激活重启IO线程

Lnmp架构之mysql数据库实战1_第34张图片

将半同步参数写入配置文件,确保重启后依然生效(master和salve都由设置)

Lnmp架构之mysql数据库实战1_第35张图片Lnmp架构之mysql数据库实战1_第36张图片

测试

Lnmp架构之mysql数据库实战1_第37张图片

当停掉所有的slave端的IO线程:

此时,再在master端插入数据

Lnmp架构之mysql数据库实战1_第38张图片

想要数据保持高度一致性,要将等待时间设定成无穷大,表示master只要没收到slave端返回信息则就会一直等待,不会输出错误数据。

当所有的slave节点再次启动IO线程,mysql会自动切回半同步模式

mysql> START SLAVE IO_THREAD;

Query OK, 0 rows affected (0.00 sec)

并行复制(提高效率)

默认slave节点sql单线程回放,会造成数据同步延时较高

slave节点添加以下参数解决,不需要在master端设定,因为sql线程只存在于slave端

Lnmp架构之mysql数据库实战1_第39张图片Lnmp架构之mysql数据库实战1_第40张图片

注意:所有的slave端都要添加并行参数

延迟复制

如果在master端误操作,可以在slave端进行数据恢复,只需要停掉sql线程;

延迟只是延迟了sql ,IO已经复制过来了 ,数据已经在中继日志里保存起来了,只不过sql没有进行回放。

Lnmp架构之mysql数据库实战1_第41张图片

你可能感兴趣的:(数据库,架构,mysql)