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

  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. hibernate 出现Caused by: java.sql.SQLException: Column 'id' not found.异常

    用hibernate进行映射查询时,出现Caused by: java.sql.SQLException: Column 'id' not found 异常,检查数据库表及映射都有id且已经正确映射, ...

  2. svn总结 标签: svn开源软件 2015-05-09 17:31 513人阅读 评论(11) 收藏

    说到SVN,就不得不说CVS,CVS 是一个C/S系统,是一个常用的代码版本控制软件.主要在开源软件管理中使用.与它相类似的代码版本控制软件有subversion.多个开发人员通过一个中心版本控制系统 ...

  3. day6_python之configparser_模块

    configparser_模块是为了解析.ini文件的配置 a.ini [xiechao] name=xiechao age=18 is_admin=True salary=1000000.12 [x ...

  4. PHP 试题(1)

    1.__FILE__表示什么意思?(5分)文件的完整路径和文件名.如果用在包含文件中,则返回包含文件名.自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一 ...

  5. clear简单的例子

    非常实用,非常简单的例子,结果都在图片里 <html> <head> <style> .keepbj { width:800px; height: 300px; b ...

  6. 【CSS3】纯CSS3制作页面切换效果

    此前写的那个太复杂了,来点简单的核心 <html> <head> <title></title> <style type="text/c ...

  7. JS获取手机型号和系统

    废话不多说,直接上源码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&q ...

  8. Android 隐藏EditText的焦点

    在页面的开发过程中,我们可能会遇到这样的情况,打开某个页面(Activity)时,如果该页面中有EditText组建,则会自动弹出软键盘(因为该EditText自动获取焦点了),这样很容易影响用户体验 ...

  9. Spring Data Jpa一对多单向映射

    /** @author StormMaybin @date 2017-01-17 */ 生命不息,奋斗不止! 一对多映射关系 在JPA中,用@OneToMany来标识一对多的关系.实现一对多的单向关联 ...

  10. 【u227】BOOK

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 陈老师喜欢网购书籍,经常一次购它个百八十本,然后拿来倒卖,牟取暴利.前些天,高一的新同学来了,他便像往 ...