益阳营销型网站建设,宁波建设业协会网站,河南秋实网站建设,园林景观设计公司有丙级吗1、mysql数据库编译 编译成功 2、mysql数据库初始化
配置数据目录 全局文件修改内容 生成初始化密码并进行初始化设定 3、mysql主从复制 什么是mysql的主从复制#xff1f;
MySQL的主从复制是一种常见的数据库复制技术#xff0c;用于将一个数据库服务器#xff08;称为主…1、mysql数据库编译 编译成功 2、mysql数据库初始化
配置数据目录 全局文件修改内容 生成初始化密码并进行初始化设定 3、mysql主从复制 什么是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服务器 配置slave服务器
在server2上已安装设定好mysql服务 测试
在master主服务器上 在server2从服务器上实现同步 当master上有数据时的同步方法
将server1和server2上的数据文件复制到server3上 在server3上 在server1 master 上
注意生产环境中备份时需要锁表保证备份前后的数据一致 mysql FLUSH TABLES WITH READ LOCK;
备份后再解锁 mysql UNLOCK TABLES;
注意mysqldump命令备份的数据文件在还原时先DROP TABLE需要合并数据时需要删除此语句 在server3上 测试 只有读的操作远远多于写的操作时才会用一主多从数据库的外部需要接入高可用负载均衡
缺陷
master 端Binlog是直接考给slave的是异步操作
异步操作master 端更新完了之后直接发给slavemaster不需要知道slave端是否接收到这样就会导致比如master端到slave端网络出现问题意思就是master可以成功运作也把日志发给slave 但是由于网络的问题这个数据没有真正发送给slave端那么这时候master down掉之后slave端开始接管的时候 数据就会丢失。 在IO中有个内置的半同步模式 在IO中有个内置的半gtid模式
切到gtid模式
master配置 slave配置所有节点配置相同 重新配置重新启动 在gtid模式下当master有问题的时候就会挑离它id最近的slave作为master供给下面的slave以此类推。
通过设置gtid 大大降低复杂度。通过全局的方式不用关心它的日志文件和binlog号gtid 只关心它的下一跳是谁就行就是gtid next。
master端添加数据 slave即可查询到gtid标识号 server3也可以 半同步模式必须要走gtid
解决IO
给master端安装半同步模块 slave端也安装半同步模块并激活重启IO线程 将半同步参数写入配置文件确保重启后依然生效master和salve都由设置 测试 当停掉所有的slave端的IO线程 此时再在master端插入数据 想要数据保持高度一致性要将等待时间设定成无穷大表示master只要没收到slave端返回信息则就会一直等待不会输出错误数据。
当所有的slave节点再次启动IO线程mysql会自动切回半同步模式
mysql START SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
并行复制提高效率
默认slave节点sql单线程回放会造成数据同步延时较高
slave节点添加以下参数解决不需要在master端设定因为sql线程只存在于slave端 注意所有的slave端都要添加并行参数
延迟复制
如果在master端误操作可以在slave端进行数据恢复只需要停掉sql线程
延迟只是延迟了sql IO已经复制过来了 数据已经在中继日志里保存起来了只不过sql没有进行回放。