| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> lnmp架构之mysql的主从复制(一) -> 正文阅读 |
|
[大数据]lnmp架构之mysql的主从复制(一) |
一、为什么要进行主从复制
二、主从复制的原理
三、主从复制的类型
四、异步主从复制4.1 一主一从主从复制在上文操作的基础上,首先我们需要再在一个新的虚拟机上安装设置mysql,将server1上编译好的包拷贝到server2上: 将刚刚更改的两个配置文件复制到server2上去: 刚才server1的操作再在server2上再做一遍: ?此时server2上的mysql初始化完成,可以正常使用: 此过程可完全按照mysql官网文档来:MySQL :: MySQL 5.7 Reference Manual :: 16 Replication ?在server1上: 编辑 /etc/my.cnf : 重启mysqld使之生效: ? 此时已经在数据目录里生成了二进制日志文件: ?
?在server2上: 在slave备机上可以不设置binlog,可以不用启用binlog。 ? 通过?/etc/init.d/mysqld restart 重启服务。进入数据库设置:
?? 回到server1上创建数据库: ?创建完成后,在server2的数据库上查看server2上也有了刚刚创建的westos库。
?此数据库是从server1 master上自动复制过去的,但是这种复制是单向的,一般主从复制slave端mysql都要设置成只读模式,不能在slave上写入数据,因为这样的话数据就不同步了。 各个server上的索引文件可以记录各个server上的中继日志: ? 4.2 一主多从主从复制(线性主从)上面我们介绍的是一主一从架构,也有一主多从架构,一主多从架构适合于读多写少的情景,即读的请求要远远大于写的请求。我们再扩一个节点做一主多从架构。与刚刚在server2上开启mysql服务类似。下面我们搭建的是 A-->B-->C 的线性一主多从架构: 在server3上,在my.cnf中更改server-id: ? ?此时server3上的mysql初始化完毕。由于我们server3上的数据要从server2上拿,所以在server2上要开启二进制日志文件,并且加上log-slave-updates选项: 设置完成后在server2上也创建了mysql-bin?文件。在server1上再插入数据,查看server2上的mysql-bin 发现在server1上的操作已经被记录了下来。 ?由于之前server1、2上的数据库已经存储了部分数据,所以我们先把其中的数据库备份出来,导入到server3中:
?先建立一个同名的库,再将数据导入进去。 ? ? ?原来的库导入完成!在server2上创建repl用户并寄予权限: 刷新一下授权表: ? 在server2上查看master status : ?在server3上设置从server2复制数据库信息: ?IO和SQL线程均为YES,说明设置没问题。 测试:在server1的数据库上添加信息: 我们可以直接查看server3的数据库是否复制成功,若是复制成功那么server2一定复制成功: ?线性的一主多从mysql设置成功!这样设置的好处是可以减小server1端的压力。
4.3 基于GTID的异步主从复制(非线性)
使用GTID方式进行主从复制,当master挂掉时,会自动切换到里自己最近的一台slave上。 在server2上关闭slave,将其配置成GTID模式,在server1上打开GTID模式: server1: ?server2: ? ?要先关闭server2的slave端(注:该slave服务是开机自启的,设置时restart完了记得再关闭一次): 可以使用 show slave status\G;? 查看slave状态。在server3上同样的配置再来一遍: 测试: 在server1上添加数据: ?server2和server3上的数据已经同步。(注:此时我们server2、3的数据都是直接由server1复制来的,不是线性复制了)
五、半同步主从复制
首先,在所有的server上都要安装相应的plugin插件。 在server1 master端: ?在server2、3? slave端下载插件并开启半同步模式: ?可以看到我们虽然启动了半同步,但是半同步的状态还是OFF的,即还没有生效。将IO线程重启一下就生效了: 可以在mysql数据库中使用?show plugins; 查看已经安装的插件。在server1 master端设置开启半同步模式: ?在master端查看半同步状态,发现已经有两个clients: 上面在mysql上设置的都是临时的热生效的方式,要开机自动生效还是要写到文件里 /etc/my.cnf: server1 master上: ?server2、3 slave上: ? ? ? ? ? ? ? ? ? ?测试: 在master上添加数据: ?
?测试不同步: 先把两个slave端的IO线程停掉: ?由于默认设置等待时间为10s,master10秒还没接收到slave发来的信息,就证明同步有问题,当10秒过后整个系统就会退回到异步模式。 ? 当后端的两个slave恢复正常时,它会自动开启半同步模式,并且整个过程中不会有数据丢失。 ?
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/16 1:49:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |