ProxySQL实现mysql中间件读写分离

1、初始化准备,四台设备

master:192.168.2.6
slave:192.168.2.16
proxysql:192.168.2.26
Client:192.168.2.100,用于测试

2、搭建好主从服务器

master:主
[[email protected] ~]# yum -y install mariadb-server
[[email protected] ~]# vim /etc/my.cnf
[mysqld]
server_id=6
binlog_format=row
log_bin
skip_name_resolve
[[email protected] ~]# systemctl start mariadb
MariaDB [(none)]> grant replication slave on *.* to [email protected]‘192.168.2.%‘ identified by ‘123456‘;      #创建复制账号

slave:从
[[email protected] ~]# yum -y install mariadb-server
[[email protected] ~]# vim /etc/my.cnf
[mysqld]
read-only
server_id=16
skip_name_resolve
binlog_format=row
[[email protected] ~]# systemctl start mariadb
MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST=‘192.168.2.6‘,
    ->   MASTER_USER=‘repluser‘,
    ->   MASTER_PASSWORD=‘123456‘,
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE=‘mariadb-bin.000001‘,
    ->   MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.02 sec)
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G

3、测试主从同步是否正常

master:
MariaDB [(none)]> create database db1;

slave:
MariaDB [(none)]> show databases;

4、搭建proxysql yum仓库

proxysql:
[[email protected] ~]# cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
> [proxysql_repo]
> name= ProxySQL YUM repository
> baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
> gpgcheck=1
> gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
> EOF

5、安装proxysql和mariadb客户端工具

proxysql:       6032管理端口、  6033连接端口
[[email protected] ~]# yum -y install proxysql mariadb
[[email protected] ~]# rpm -ql proxysql
[[email protected] ~]# service proxysql start      #老的启动方法
[[email protected] ~]# ll /var/lib/proxysql/       #proxysql简化版的关系型数据库,用来存放proxysql配置

6、连接proxysql,在main. mysql_servers 加入主从服务器记录

proxysql:
[[email protected] ~]# mysql -uadmin -padmin -P6032 -h127.0.0.1     #账号密码默认admin
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,‘192.168.2.6‘,3306);                 #组id,ip,端口
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,‘192.168.2.16‘,3306);
MySQL [(none)]> select * from mysql_servers;    #查看添加的记录信息

7、主从服务器添加管理账户供proxysql机器来管理

master:
MariaDB [(none)]> grant replication client on *.* to [email protected]‘192.168.2.%‘ identified by ‘123456‘;      #主从复制已经建立,只要在主服务器添加即可

8、设置使用monitor用户连接主从服务器 #main.global_variables表

proxysql:
MySQL [(none)]>  set mysql-monitor_username=‘monitor‘;
MySQL [(none)]>  set mysql-monitor_password=‘123456‘;
MySQL [(none)]>  load mysql variables to runtime;       #加载生效
MySQL [(none)]> save mysql variables to disk;           #保存到磁盘

9、设置分组信息 #需要修改的是main库中的mysql_replication_hostgroups表

proxysql:
MySQL [(none)]> insert into mysql_replication_hostgroups values(10,20,"test");      #10组负责写,20负责读
MySQL [(none)]> select * from mysql_replication_hostgroups;     #查看添加的记录
MySQL [(none)]>  load mysql servers to runtime;     #加载生效
MySQL [(none)]> save mysql servers to disk;     #保存到磁盘
MySQL [(none)]> select * from mysql_servers;        #再次查看记录,proxysql已经区分读写id了

10、在master节点创建访问用户,用于主从服务器去访问中间件proxysql #主从复制已经建立,只要在主服务器添加即可

master:
MariaDB [(none)]> grant all on *.* to [email protected]‘192.168.2.%‘ identified by ‘123456‘;

11、将创建访问调度器proxysql的客户端用户sqluser加入proxysql服务器的

mysql_users表中
proxysql:
MySQL [(none)]> insert into mysql_users(username,password,default_hostgroup) values(‘sqluser‘,‘123456‘,10);     #default_hostgroup默认
组设置为写组10,

MySQL [(none)]>  load mysql users to runtime;       #生效
MySQL [(none)]>  save mysql users to disk;      #存盘

12、使用客户端测试

Client:
[[email protected] ~]# mysql -usqluser -p123456 -h192.168.2.26 -P6033 -e ‘select @@server_id‘;

13、设置调度规则

proxysql:
MySQL [(none)]>  insert into mysql_query_rules
    -> (rule_id,active,match_digest,destination_hostgroup,apply)VALUES
    -> (1,1,‘^SELECT.*FOR UPDATE$‘,10,1),(2,1,‘^SELECT‘,20,1);
Query OK, 2 rows affected (0.00 sec)  #读调度到20组,写调度到10组 

MySQL [(none)]>  load mysql query rules to runtime;     #生效

MySQL [(none)]>  save mysql query rules to disk;        #保存

14、客户端测试

Client:
[[email protected] ~]# mysql -usqluser -p123456 -h192.168.2.26 -P6033 -e ‘select @@server_id‘;

原文地址:https://blog.51cto.com/14230743/2391278

时间: 2024-10-09 11:45:42

ProxySQL实现mysql中间件读写分离的相关文章

MySQL中间件之ProxySQL(2):初试读写分离

1.实现一个简单的读写分离 这里通过ProxySQL实现一个简单的读写分离功能示例,以便快速入门.即使是快速入门,需要配置的内容也很多,包括:后端MySQL的配置.监控配置.发送SQL语句的用户.SQL语句的路由规则.所以,想要实现一个ProxySQL+MySQL,即使只实现最基本的功能,步骤也是挺多的,不过配置的逻辑都很简单. 实验环境: 角色 主机IP server_id 数据状态 Proxysql 192.168.100.21 null 无 Master 192.168.100.22 11

MySQL的读写分离的几种选择

MySQL的读写分离的几种选择 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 原址如下: http://heylinux.com/archives/1004.html Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面. 因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步

利用amoeba实现mysql主从复制读写分离

一般大型网站为了缓解大量的并发访问,会在web端实现负载均衡,但是这是远远不够的.到了数据存储层.数据访问层,如果还是传统的架构,或者只是依靠一台服务器,大量的数据库连接操作,会导致数据库面临崩溃的危险.进而造成数据丢失,后果不堪设想.所以我们会考虑如何减少数据库的连接,一方面进行代码的优化,采用优秀的数据缓存技术如memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力.今天我们就利用MySQL主从配置,实现读写分离,分散数据库的压力.这种方式,很多网站都有应用,今天

MyCAT实现MySQL的读写分离

在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修改,如果数据库不小心挂掉了,则同时也意味着程序的不可用,而这对很多应用来说,并不能接受. 引入MySQL中间件能很好的对程序端和数据库进行解耦,这样,程序端只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务. 作为当前炙手可热的MySQL中间件,MyCAT实现MySQL主从集群的读写分离

mycat做Mysql的读写分离

在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修改,如果数据库不小心挂掉了,则同时也意味着程序的不可用,而这对很多应用来说,并不能接受. 引入MySQL中间件能很好的对程序端和数据库进行解耦,这样,程序端只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务. 作为当前炙手可热的MySQL中间件,MyCAT实现MySQL主从集群的读写分离

MySQL的读写分离与主从同步数据一致性

有没有做MySQL读写分离?如何实现mysql的读写分离?MySQL主从复制原理的是啥?如何解决mysql主从同步的延时问题? 高并发这个阶段,那肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是app,其实都是读多写少.所以针对这个情况,就是写一个主库,但是主库挂多个从库,然后从多个从库来读,那不就可以支撑更高的读并发压力了吗? (1)如何实现mysql的读写分离? 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后

使用mysql-proxy实现mysql的读写分离

 前言: MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于读操作量比较大的场景,可减轻master的压力.使用mysql-proxy实现mysql的读写分离,mysql-proxy实际上是作为后端mysql主从服务器的代理,它直接接受客户端的请求,对SQL语句进行分析,判断出是读操作还是写操作,然后分发至对应的mysql服务器上.mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等MySQL Proxy就是这么一个

【转】mysql数据库读写分离数据同步

转载请注明来源:mysql数据库读写分离数据同步 mysql数据库读写分离数据同步 我是用了两个xp(一个主的,一个从的)的系统测试成功的,linux系统我也做测试了,没有成功,不过我想我所遇到的问题是同一个问题,xp下的可以成功,linux下的应该也可以成功,稍候会测试,然后更新结果! PS:刚测试了下linux 可以同步成功,主服务器是xp,从服务器是centos,可以成功. 例: A机器 192.168.0.2 B机器 192.168.0.3 两个机器可以ping通,互相访问 先配置主服务

mysql+mysql_proxy+haproxy+memcache (mysql的读写分离)

参考: http://www.cnblogs.com/xxcn/p/4385412.html http://blog.jobbole.com/94606/ http://www.open-open.com/lib/view/open1413274853450.html 原理:略(下次再写)图片来自:http://www.open-open.com/lib/view/open1413274853450.html 架构: master: 192.168.2.127 slave: 192.168.2.