阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL主从复制,读写分离(mysql-proxy)及双主结构完整构建过程

437次阅读
没有评论

共计 3780 个字符,预计需要花费 10 分钟才能阅读完成。

下面介绍 MySQL 主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程。

MySQL 主从复制
原理是 master 将改变记录到二进制日志(binary log),slave 将 master 的 binary log 拷贝到中继日志(relay log),slave 通过中继日志同步 master 的操作。

1,实验环境,实验有 2 台 Ubutu server 14.04 都安装了 MySQL 服务器, 在相同的 IP 段 

172.16.34.212(主), 
172.16.34.156(从).

2,将这两台 IP 授权,允许其它 IP 通过账号密码进行访问 (如添加个 euht 账号允许所有外部 IP 以密码 123456 访问),分别登录进两台机子的 mysql 执行如下语句 
Grant all privileges on . to‘euht’@’%’identified by‘123456’with grant option; 
Flush privileges; 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程

注:
①上述代码的意思是创建一个 euht 用户,host=%,允许所有 IP 通过用户名 euht 进行访问。添加完刷新权限。
②此时两台机子的 mysql 应该是可以相互访问的,如果不可以,导致的原因有很多,最常见的是防火墙没关,mysql 服务器绑定了本地地址。通过如下方法一般可解决问题 
关闭防火墙,或开放 3306 端口 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程 
更改 my.cnf 文件,把 bind-address 注释掉 
vi /etc/mysql/my.cnf 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程  
3, 找到主服务器 172.16.34.212MySQL 安装文件夹修改 my.cnf(etc/mysql/my.cnf)文件,在 [mysqld] 下面增加下面几行代码 
server-id=1 
log-bin=master-bin 
log-bin-index=master-bin.index 
保存后重启 mysql(service mysql restart;) 
注:如果只需要同步特定的库,如上添加代码,binlog-do-db =euht #用于 master-slave 的具体数据库 
4, 进入 mysql 后,查看主服务器 mysql master 状态, 日志 File 为 master-bin.000001,Position 为 107(记下这两个值,后面进行从服务器操作的时候需要用到) 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程 
5,配置从服务器 (172.16.34.156) 
同样配置从服务器允许外部 IP 访问(参考第 2 点)

配置日志文件

找到从服务器 172.16.34.156MySQL 安装文件夹修改 my.cnf(etc/mysql/my.cnf)文件,在 [mysqld] 下面增加下面几行代码(server-id 跟主服务器不要相同了) 
server-id=10 
log-bin=master-bin 
log-bin-index=master-bin.index

6,连接到主服务器(连接上 156 的 mysql 执行以下语句, 更改相应的内容)
change master to 
master_host=’172.16.34.212’, 
master_user=’euht’, 
master_password=’123456’, 
master_log_file=’master-bin.000001’, 
master_log_pos=107;

7,启动 slave 
mysql> start slave;

8, 查看 slave 状态 
mysql> show slave status\G 
其中 Slave_IO_Running 与 Slave_SQL_Running 的值都必须为 YES,才表明状态正常。
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程 
以上已经可以实现 172.16.34.162 主服务器的库的所有变化同步到从服务器 172.16.34.156

测试如下:
1,如图两台服务器都没自定义数据库 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程

2,创建一个数据库到主库 (172.16.34.212),然后刷新从库观察情况(172.16.34.156) 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程

观察得出 212 的所有操作都同步到从 156 从库了。至此主从复制完成。
注意以下几点: 
1, 做主从复制时,首先确定两台服务器的 mysql 没任何自定义库(否则只可以配置完后之前的东西没法同步, 或者两个库都有完全相同的库应该也是可以同步)
2,server_id 必须配置不一样 
3,防火墙不能把 mysql 服务端口给拦截了(默认 3306) 
4,确保两台 mysql 可以相互访问(即需要第二步操作) 
5,重置 master,slave。Reset master;reset slave; 开启关闭 slave,start slave;stop slave; 
Mysql 读写分离

以上工作做完后可以开始搭建读写分离,读写分离目前主要的几种方式: 
1,MySQL Proxy(中间件) 
2,Amoeba for MySQL(中间件) 
3,Mycat(中间件) 
4,应用层实现 
下面介绍用 MySQL Proxy 实现读写分离。Mysql Proxy 一般安装到单独的一台服务器来进行读写调度,以下添加一台 IP 来安装 mysql-proxy 调度器,IP 为 172.16.34.236 
1, 首先安装 mysql-proxy 
apt-get install mysql-proxy

2,实现读写分离是有 lua 脚本实现的,现在 mysql-proxy 里面已经集成,无需再安装。
3,配置连接数达到多少才读写分离,此处改为 1,1 个连接就开始读写分离 
vim /usr/share/mysql-proxy/rw-splitting.lua

MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程

4,启动 mysql-proxy, 主库用于写 172.16.34.212,从库用于读 172.16.34.156 
sudo mysql-proxy –proxy-read-only-backend-addresses=172.16.34.156:3306 –proxy-backend-addresses=172.16.34.212:3306 –proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua –admin-username=euht 
–admin-password=123456 
–admin-lua-script=/usr/share/mysql-proxy/admin.lua 
5,启动后默认占用端口 4040 和 4041。4040 用于 SQL 转发,4041 用于管理 mysql-proxy。(netstat -tupln|grep mysql-proxy) 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程

6,测试读写分离 
用主库 172.16.34.212 的用户 euht 在这台 mysql-proxy 服务器登录进去 (也可以单独为这个代理创建一个用户) 
现在从这台代理登录进主 mysql 服务器插入一条数据到 testtb,结果为主从两台服务器都有数据了。
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程

为了测试读写是否真的分离了,我们把这两台服服务器的数据差异化

先登录 mysql-proxy 代理 (- P 指定端口号,必须指定否则登录进去的将是本地 3306 端口的那个,当然由于这台 219 服务器我没配置让外部机子可以访问,所以执行下面的语句缺少端口号直接报错。) 
mysql -ueuht -p -h172.16.34.219 -P4040 
登录进去我们为了看到读写分离是否生效,先到从服务器 156 把 slave 给停掉。(stop slave;)然后在代理服务器 219 的 mysql-proxy 执行插入数据。先看原本的数据情况 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程

插入数据和查看数据 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程

发现插入数据成功,再 select 出来居然没有刚才插入的数据。这时我们分别到两台服务器去查看数据。
172.16.156 从服务器的数据还是原来的 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程 
再看 212 的数据 
MySQL 主从复制,读写分离 (mysql-proxy) 及双主结构完整构建过程

看到这里就看到效果了。主服务器已经有了刚才插入的数据,从服务器没有。这是因为从服务器的主从复制已经关闭,所以从 mysql-proxy 代理端插入数据 (实际上是用了主服务器 212 去插入) 没有复制到从服务器。从 mysql-proxy 读取没看到新插入的数据是因为代理端是去从服务器 156 读取数据的。
至此,mysql 的主从复制和读写分离就结束了。下面简单说一下双主结构。

Mysql 双主结构

通过上面的介绍很容易看出,双主结构其实就是两台服务器相互数据复制。那么做到双主结构只需要把 212 主服务器变成 156 的从服务器即可。

在 212 服务器上执行(先到 156 查看日志位置,改对相应的东西即可 show master status;) 
change master to 
master_host=’172.16.34.212’, 
master_user=’euht’, 
master_password=’123456’, 
master_log_file=’master-bin.000001’, 
master_log_pos=294;

开启主从 
mysql> start slave;

156,212 都 start slave, 而且配置互为 slave,这就是双主结构。

测试,212 插入数据 156 会同步,156 插入数据 212 会同步。经测试全部通过。(记得查看运行状态,Slave_IO_Running 与 Slave_SQL_Running 的值都必须为 YES,才表明状态正常。Show slave status\G)

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137635.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3780字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7968425
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流! 大家好,我是星哥,今天才思枯竭,不写技术文章了!来吐槽一下 CSDN。...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...