一 mysql读写分离的概念

写在主库,主库一般只有一个,读可以分配在多个从库上,如果写压力不大的话,也能把读分配到主库上.

实现是基于atlas实现的,atlas是数据库的中间件,程序只需要连接atlas入口,无需读写单独指定,atlas决定在那个数据库进行读或者写操作,可以实现mysql的读写分离

atlas是一台独立的机器,目前实验把atlas配置在192.168.132.122上

主库+从库 给予atlas读写的权限

  1. 主库:192.168.132.121
  2. mysql> grant all privileges on *.* to 'atlas'@'192.168.132.122' identified by '';
  3. Query OK, rows affected, warning (0.01 sec)
  4. mysql> flush privileges;
  5. 从库:192.168.132.122
  6. mysql> grant all privileges on *.* to 'atlas'@'192.168.132.122' identified by ''; #atlas连接数据库的用户名是atls,密码是1234567
  7. Query OK, rows affected, warning (0.00 sec)
  8. mysql> flush privileges;
  9. 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

  1. [mysql-proxy]
  2. #主库地址
  3. proxy-backend-addresses = 192.168.132.121:
  4. #从库地址,@后面的数字代表权重,用来负载均衡,默认权重为1。可设置多项,用逗号分隔
  5. proxy-read-only-backend-addresses = 192.168.132.122:@,192.168.132.121:@
  6. #用户名和密码,密码需要使用/usr/local/mysql-proxy/bin/encrypt加密
  7. pwds = atlas:tj+W8xntBW8=
  8. daemon = true
  9. #守护进程
  10. keepalive = true
  11. #线程数
  12. event-threads =
  13. #日志级别,message、warning、critical、error、debug
  14. log-level = warning
  15. #日志存放的路径
  16. log-path = /usr/local/mysql-proxy/log
  17. #SQL日志的开关,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘
  18. sql-log = OFF
  19. #慢日志输出设置。单位:ms
  20. sql-log-slow =
  21. #Atlas监听端口
  22. proxy-address = 0.0.0.0:3316 #如果是一台独立的服务器,这个端口可以和MySQL端口一样,设为3306
  23. #管理监听端口
  24. admin-address = 0.0.0.0:
  25. admin-username = atlas
  26. admin-password =
  27. #客户端连接默认字符集,不设置的话一般还需要使用set names utf8
  28. charset = utf8
  29. #ip白名单
  30. #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 读操作验证

主端查看读操作的次数

  1. 192.168.132.121:
  2. mysql> show global status like '%select%';
  3. +--------------------------+-------+
  4. | Variable_name | Value |
  5. +--------------------------+-------+
  6. | Com_insert_select | |
  7. | Com_replace_select | |
  8. | Com_select | |
  9. | Connection_errors_select | |
  10. | Select_full_join | |
  11. | Select_full_range_join | |
  12. | Select_range | |
  13. | Select_range_check | |
  14. | Select_scan | |
  15. +--------------------------+-------+
  16. 192.168.132.122:
  17. mysql> show global status like '%select%';
  18. +--------------------------+-------+
  19. | Variable_name | Value |
  20. +--------------------------+-------+
  21. | Com_insert_select | |
  22. | Com_replace_select | |
  23. | Com_select | |
  24. | Connection_errors_select | |
  25. | Select_full_join | |
  26. | Select_full_range_join | |
  27. | Select_range | |
  28. | Select_range_check | |
  29. | Select_scan | |
  30. +--------------------------+-------+

执行读操作

192.168.132.121执行

[root@master ~]# mysql -uatlas -p1234567 -h 192.168.132.122 -P3316   -e 'select * from darren.test;'

  1. 192.168.132.121: 未执行读操作
  2. mysql> show global status like '%select%';
  3. +--------------------------+-------+
  4. | Variable_name | Value |
  5. +--------------------------+-------+
  6. | Com_insert_select | |
  7. | Com_replace_select | |
  8. | Com_select | |
  9. | Connection_errors_select | |
  10. | Select_full_join | |
  11. | Select_full_range_join | |
  12. | Select_range | |
  13. | Select_range_check | |
  14. | Select_scan | |
  15. +--------------------------+-------+
  16. 192.168.: 执行读操作
  17. mysql> show global status like '%select%';
  18. +--------------------------+-------+
  19. | Variable_name | Value |
  20. +--------------------------+-------+
  21. | Com_insert_select | |
  22. | Com_replace_select | |
  23. | Com_select | |
  24. | Connection_errors_select | |
  25. | Select_full_join | |
  26. | Select_full_range_join | |
  27. | Select_range | |
  28. | Select_range_check | |
  29. | Select_scan | |
  30. +--------------------------+-------+

多执行几次

[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

  1. 192.168.132.121:执行一次
  2. mysql> show global status like '%select%';
  3. +--------------------------+-------+
  4. | Variable_name | Value |
  5. +--------------------------+-------+
  6. | Com_insert_select | |
  7. | Com_replace_select | |
  8. | Com_select | |
  9. | Connection_errors_select | |
  10. | Select_full_join | |
  11. | Select_full_range_join | |
  12. | Select_range | |
  13. | Select_range_check | |
  14. | Select_scan | |
  15. +--------------------------+-------+
  16. 192.168.132.122 #增加7次
  17. mysql> show global status like '%select%';
  18. +--------------------------+-------+
  19. | Variable_name | Value |
  20. +--------------------------+-------+
  21. | Com_insert_select | |
  22. | Com_replace_select | |
  23. | Com_select | |
  24. | Connection_errors_select | |
  25. | Select_full_join | |
  26. | Select_full_range_join | |
  27. | Select_range | |
  28. | Select_range_check | |
  29. | Select_scan | |
  30. +--------------------------+-------+

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读写分离的更多相关文章

  1. Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  2. 黄聪:Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  3. 基于mysql主从同步的proxy读写分离

    mysql-proxy 简介 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载 ...

  4. docker配置mysql主从与django实现读写分离

    一.搭建主从mysql环境 1 下载mysql镜像 docker pull mysql:5.7 2 运行刚下载的mysql镜像文件 # 运行该命令之前可以使用`docker images`是否下载成功 ...

  5. MySQL主从复制与Atlas读写分离

    配置主从复制 1. 增加主从配置 # 主库配置文件 server-id = 1 log-bin = /var/lib/mysql/mysql-bin expire_logs_days = 10 ski ...

  6. mysql数据库的主从同步,实现读写分离 g

    https://blog.csdn.net/qq_15092079/article/details/81672920 前言 1 分别在两台centos 7系统上安装mysql 5.7 2 master ...

  7. mysql数据库的主从同步,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器来处理如此多的数据库连接操作,数据库必然会崩溃,特别 ...

  8. 分布式架构高可用架构篇_08_MyCat在MySQL主从复制基础上实现读写分离

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  9. 高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离

    实战操作可参考:http://www.roncoo.com/course/view/3117ffd4c74b4a51a998f9276740dcfb 一.环境 操作系统:CentOS-6.6-x86_ ...

随机推荐

  1. 线段树动态开点+树链剖分BZOJ4999

    以每个一个颜色开一颗线段树,内部以dfs序作为线段树节点,权值代表出现次数,维护线段树区间和 #include<iostream> #include<stdio.h> #inc ...

  2. QT自定义窗口

    qt 中允许自定义窗口控件,使之满足特殊要求, (1)可以修改其显示,自行绘制 (2)可以动态显示 (3)可以添加事件,支持鼠标和键盘操作 自定义控件可以直接在QtDesigner里使用,可以直接加到 ...

  3. uda 1.C++ 函数

    函数:Python vs C++ 在 Python 和 C++ 中,函数的作用相同:函数把语句组合在一起,执行某种任务.函数可以帮助你避免重复地复制和粘贴相同的代码. 函数编写的语法有些不同,主要有三 ...

  4. 利用伪类选择器与better-scroll的on事件所完成的上拉加载

    之前给大家分享过一篇上拉加载 利用了better-scroll的pullUpDown 和DOM元素的删除添加  感觉那样不太好 今天给大家分享一个不同的上拉加载思想 代码如下 class List { ...

  5. Spark JDBC系列--Mysql tinyInt字段特殊处理

    当spark取出表的scheme中,类型名为tinyint的字段,会被处理为Boolean型.而mysql中tinyint的sqlType都会默认处理为bit,所以如果数据库中的这类字段中,存储了0. ...

  6. uva 11665 Chinese Ink (几何+并查集)

    UVA 11665 随便给12的找了一道我没做过的几何基础题.这题挺简单的,不过uva上通过率挺低,通过人数也不多. 题意是要求给出的若干多边形组成多少个联通块.做的时候要注意这题是不能用double ...

  7. H3C TCP连接的建立

  8. poj 1787 Charlie's Change (多重背包可作完全背包)

    Charlie's Change Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3792   Accepted: 1144 ...

  9. java项目和npm项目命令窗口部署方便调试

    1.maven窗口选择root项目 在点击lifstyle--> package 点击播放箭头 build完毕以后会出现在TARGET目录下todo.jar 在执行 java -jar todo ...

  10. pycharm下的多个python版本共存(一)

    经历过IDLE,anaconda,和pycharn的编程环境,并进行了一段时间的项目编程后,决定使用pycharm作为以后的工作环境. 一方面因为项目组其他人推荐,另一方面在使用过程中比较顺手.当然很 ...