mysql主从之基于atlas读写分离
一 mysql读写分离的概念
写在主库,主库一般只有一个,读可以分配在多个从库上,如果写压力不大的话,也能把读分配到主库上.
实现是基于atlas实现的,atlas是数据库的中间件,程序只需要连接atlas入口,无需读写单独指定,atlas决定在那个数据库进行读或者写操作,可以实现mysql的读写分离
atlas是一台独立的机器,目前实验把atlas配置在192.168.132.122上
主库+从库 给予atlas读写的权限
- 主库:192.168.132.121
- mysql> grant all privileges on *.* to 'atlas'@'192.168.132.122' identified by '';
- Query OK, rows affected, warning (0.01 sec)
- mysql> flush privileges;
- 从库:192.168.132.122
- mysql> grant all privileges on *.* to 'atlas'@'192.168.132.122' identified by ''; #atlas连接数据库的用户名是atls,密码是1234567
- Query OK, rows affected, warning (0.00 sec)
- mysql> flush privileges;
- atlas对主端和从端都有了读写权限
二 安装atlas
Atlas下载地址
https://github.com/Qihoo360/Atlas/releases
[root@slave ~]# cd /usr/local/src/
[root@slave src]# yum install epel-release -y
[root@slave src]# yum install openssl-devel autoconf gcc glib2 glib2-devel libevent-devel flex-devel flex jemalloc jemalloc-devel lua-devel -y
[root@slave src]# wget https://github.com/Qihoo360/Atlas/releases/download/sharding-1.0.1/Atlas-sharding_1.0.1-el6.x86_64.rpm
[root@slave src]# rpm -ivh Atlas-sharding_1.0.1-el6.x86_64.rpm
[root@slave src]# cd /usr/local/mysql-proxy/
[root@slave mysql-proxy]# ll
[root@slave mysql-proxy]# ./bin/mysql-proxy --version
三 配置读写分离
密码加密
[root@slave mysql-proxy]# /usr/local/mysql-proxy/bin/encrypt '1234567'
[root@slave mysql-proxy]# vim /usr/local/mysql-proxy/atlas.cnf
- [mysql-proxy]
- #主库地址
- proxy-backend-addresses = 192.168.132.121:
- #从库地址,@后面的数字代表权重,用来负载均衡,默认权重为1。可设置多项,用逗号分隔
- proxy-read-only-backend-addresses = 192.168.132.122:@,192.168.132.121:@
- #用户名和密码,密码需要使用/usr/local/mysql-proxy/bin/encrypt加密
- pwds = atlas:tj+W8xntBW8=
- daemon = true
- #守护进程
- keepalive = true
- #线程数
- event-threads =
- #日志级别,message、warning、critical、error、debug
- log-level = warning
- #日志存放的路径
- log-path = /usr/local/mysql-proxy/log
- #SQL日志的开关,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘
- sql-log = OFF
- #慢日志输出设置。单位:ms
- sql-log-slow =
- #Atlas监听端口
- proxy-address = 0.0.0.0:3316 #如果是一台独立的服务器,这个端口可以和MySQL端口一样,设为3306
- #管理监听端口
- admin-address = 0.0.0.0:
- admin-username = atlas
- admin-password =
- #客户端连接默认字符集,不设置的话一般还需要使用set names utf8
- charset = utf8
- #ip白名单
- #client-ips = 127.0.0.1, 192.168.3.1
最终是这样
程序连接 atlas192.168.237.128:3316 -> 主库+从库
四 启动atlas
[root@slave mysql-proxy]# /usr/local/mysql-proxy/bin/mysql-proxyd --help
[root@slave mysql-proxy]# /usr/local/mysql-proxy/bin/mysql-proxyd atlas start
[root@slave mysql-proxy]# netstat -ntlp|grep mysql-proxy
五 验证
5.1 读操作验证
主端查看读操作的次数
- 192.168.132.121:
- mysql> show global status like '%select%';
- +--------------------------+-------+
- | Variable_name | Value |
- +--------------------------+-------+
- | Com_insert_select | |
- | Com_replace_select | |
- | Com_select | |
- | Connection_errors_select | |
- | Select_full_join | |
- | Select_full_range_join | |
- | Select_range | |
- | Select_range_check | |
- | Select_scan | |
- +--------------------------+-------+
- 192.168.132.122:
- mysql> show global status like '%select%';
- +--------------------------+-------+
- | Variable_name | Value |
- +--------------------------+-------+
- | Com_insert_select | |
- | Com_replace_select | |
- | Com_select | |
- | Connection_errors_select | |
- | Select_full_join | |
- | Select_full_range_join | |
- | Select_range | |
- | Select_range_check | |
- | Select_scan | |
- +--------------------------+-------+
执行读操作
192.168.132.121执行
[root@master ~]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316 -e 'select * from darren.test;'
- 192.168.132.121: 未执行读操作
- mysql> show global status like '%select%';
- +--------------------------+-------+
- | Variable_name | Value |
- +--------------------------+-------+
- | Com_insert_select | |
- | Com_replace_select | |
- | Com_select | |
- | Connection_errors_select | |
- | Select_full_join | |
- | Select_full_range_join | |
- | Select_range | |
- | Select_range_check | |
- | Select_scan | |
- +--------------------------+-------+
- 192.168.: 执行读操作
- mysql> show global status like '%select%';
- +--------------------------+-------+
- | Variable_name | Value |
- +--------------------------+-------+
- | Com_insert_select | |
- | Com_replace_select | |
- | Com_select | |
- | Connection_errors_select | |
- | Select_full_join | |
- | Select_full_range_join | |
- | Select_range | |
- | Select_range_check | |
- | Select_scan | |
- +--------------------------+-------+
多执行几次
[root@master ~]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316 -e 'select * from darren.test;'
[root@master ~]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316 -e 'select * from darren.test;'
[root@master ~]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316 -e 'select * from darren.test;'
查看结果
因为配置文件配置读取的操作权重是5:1
- 192.168.132.121:执行一次
- mysql> show global status like '%select%';
- +--------------------------+-------+
- | Variable_name | Value |
- +--------------------------+-------+
- | Com_insert_select | |
- | Com_replace_select | |
- | Com_select | |
- | Connection_errors_select | |
- | Select_full_join | |
- | Select_full_range_join | |
- | Select_range | |
- | Select_range_check | |
- | Select_scan | |
- +--------------------------+-------+
- 192.168.132.122 #增加7次
- mysql> show global status like '%select%';
- +--------------------------+-------+
- | Variable_name | Value |
- +--------------------------+-------+
- | Com_insert_select | |
- | Com_replace_select | |
- | Com_select | |
- | Connection_errors_select | |
- | Select_full_join | |
- | Select_full_range_join | |
- | Select_range | |
- | Select_range_check | |
- | Select_scan | |
- +--------------------------+-------+
5.2 写操作验证
192.168.132.121使用atlat进入数据库
[root@master mysql]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316
mysql> insert into test values (5);
192.168.132.121查看
mysql> select * from test;
192.168.132.122查看:
mysql> select * from darren.test;
多执行几次
mysql> insert into test values (6);
mysql> insert into test values (7);
mysql> insert into test values (8);
mysql> insert into test values (9);
mysql> insert into test values (10);
192.168.132.121查看:
mysql> select * from test;
192.168.132.122查看
数据一直,说明写操作一直在主端192.168.132.121端.
基本读写分离的验证完成
mysql主从之基于atlas读写分离的更多相关文章
- Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- 黄聪:Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- 基于mysql主从同步的proxy读写分离
mysql-proxy 简介 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载 ...
- docker配置mysql主从与django实现读写分离
一.搭建主从mysql环境 1 下载mysql镜像 docker pull mysql:5.7 2 运行刚下载的mysql镜像文件 # 运行该命令之前可以使用`docker images`是否下载成功 ...
- MySQL主从复制与Atlas读写分离
配置主从复制 1. 增加主从配置 # 主库配置文件 server-id = 1 log-bin = /var/lib/mysql/mysql-bin expire_logs_days = 10 ski ...
- mysql数据库的主从同步,实现读写分离 g
https://blog.csdn.net/qq_15092079/article/details/81672920 前言 1 分别在两台centos 7系统上安装mysql 5.7 2 master ...
- mysql数据库的主从同步,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器来处理如此多的数据库连接操作,数据库必然会崩溃,特别 ...
- 分布式架构高可用架构篇_08_MyCat在MySQL主从复制基础上实现读写分离
参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...
- 高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离
实战操作可参考:http://www.roncoo.com/course/view/3117ffd4c74b4a51a998f9276740dcfb 一.环境 操作系统:CentOS-6.6-x86_ ...
随机推荐
- 线段树动态开点+树链剖分BZOJ4999
以每个一个颜色开一颗线段树,内部以dfs序作为线段树节点,权值代表出现次数,维护线段树区间和 #include<iostream> #include<stdio.h> #inc ...
- QT自定义窗口
qt 中允许自定义窗口控件,使之满足特殊要求, (1)可以修改其显示,自行绘制 (2)可以动态显示 (3)可以添加事件,支持鼠标和键盘操作 自定义控件可以直接在QtDesigner里使用,可以直接加到 ...
- uda 1.C++ 函数
函数:Python vs C++ 在 Python 和 C++ 中,函数的作用相同:函数把语句组合在一起,执行某种任务.函数可以帮助你避免重复地复制和粘贴相同的代码. 函数编写的语法有些不同,主要有三 ...
- 利用伪类选择器与better-scroll的on事件所完成的上拉加载
之前给大家分享过一篇上拉加载 利用了better-scroll的pullUpDown 和DOM元素的删除添加 感觉那样不太好 今天给大家分享一个不同的上拉加载思想 代码如下 class List { ...
- Spark JDBC系列--Mysql tinyInt字段特殊处理
当spark取出表的scheme中,类型名为tinyint的字段,会被处理为Boolean型.而mysql中tinyint的sqlType都会默认处理为bit,所以如果数据库中的这类字段中,存储了0. ...
- uva 11665 Chinese Ink (几何+并查集)
UVA 11665 随便给12的找了一道我没做过的几何基础题.这题挺简单的,不过uva上通过率挺低,通过人数也不多. 题意是要求给出的若干多边形组成多少个联通块.做的时候要注意这题是不能用double ...
- H3C TCP连接的建立
- poj 1787 Charlie's Change (多重背包可作完全背包)
Charlie's Change Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3792 Accepted: 1144 ...
- java项目和npm项目命令窗口部署方便调试
1.maven窗口选择root项目 在点击lifstyle--> package 点击播放箭头 build完毕以后会出现在TARGET目录下todo.jar 在执行 java -jar todo ...
- pycharm下的多个python版本共存(一)
经历过IDLE,anaconda,和pycharn的编程环境,并进行了一段时间的项目编程后,决定使用pycharm作为以后的工作环境. 一方面因为项目组其他人推荐,另一方面在使用过程中比较顺手.当然很 ...