zoukankan      html  css  js  c++  java
  • mysql-8.0.12读写分离

    安装包下载地址:https://downloads.mysql.com/archives/proxy/

    环境

    proxy:172.16.1.20

    master:172.16.1.21

    slave1:172.16.1.22

    slave2:172.16.1.23

    本文选用mysql-proxy作为转发中间件, 版本为mysql-proxy-0.8.5-linux-el6-x86-64bit

    一:在开启主从复制的情况下,在master创建供 proxy连接的账号(这样就等于同时在所有mysql上创建了连接账号)

    mysql > create user 'rw'@'%' identified with mysql_native_password by 'tqw961110';

    mysql > grant all on *.* to 'rw'@'%';

    二:停用slave(所有mysql都执行一遍)

    mysql > stop slave;

    mysql > reset slave all;

    三:解压安装包并进入

    cd  /tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/

    mkdir  lua     创建存放lua脚本的目录

    mkdir  logs   创建存放日志的目录

    cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件

    cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本

    vim /etc/mysql-proxy.cnf #创建配置文件

    [mysql-proxy]
    user=root
    admin-username=rw                              #proxy的连接账号(主从都要有)
    admin-password=tqw961110                  #密码
    proxy-address=172.16.1.20:4040          #proxy运行的地址
    proxy-read-only-backend-addresses=172.16.1.22,172.16.1.23               #只读服务池
    proxy-backend-addresses=172.16.1.21                                                   #写服务池
    proxy-lua-script=/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/lua/rw-splitting.lua                  #读写脚本存放位置
    admin-lua-script=/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/lua/admin-sql.lua                   #管理脚本存放位置
    log-file=/tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/logs/mysql.log                                       #日志存放位置
    log-level=info                        #定义log日志级别,由高到低分别有(error|warning|info|message|debug)

    daemon=true                         #以守护进程的方式运行
    keepalive=true                       #mysql-proxy崩溃时,尝试重启。

     

    四:修改读写脚本

    if not proxy.global.config.rwsplit then
    proxy.global.config.rwsplit = {
    min_idle_connections = 1,          #默认超过4个连接时才开始读写分离,这里修改为1.
    max_idle_connections = 1,         #默认8,改为1。

    is_debug = false
    }
    end

    启动proxy

    /tools/mysql-proxy-0.8.5-linux-el6-x86-64bit/bin/mysql-proxy    --defaults-file=/etc/mysql-proxy.cnf

    查看日志

    已经将后端mysql加进连接池

    查看端口

    netstat -atunlp | grep 4040

    tcp        0      0 172.16.1.20:4040        0.0.0.0:*               LISTEN      33297/mysql-proxy

    测试读写性能

    在proxy服务器上登陆mysql(proxy服务器需要有mysql命令。可以yum -y install mysql)

    mysql  -h  172.16.1.20  -urw -ptqw961110  --port=4040

    分别在主从数据库插入数据

    create  database test;

    use test;

    create table test(id int(10),name varchar(20));

    insert into t values(1,'this_is_master'); !!!!在slave上则是执行 insert into t values(1,'this_is_slave');

    此时master与slave中的test库test表的内容是不同的。

    在proxy服务器上

    use test;

    select * from test;

     

    显示的是slave的内容

    再在proxy服务器上插入数据试试

    insert into t values(1,'this_is_proxy');

    select * from test;

     

    显示的依旧是slave的内容

     

    但是在master服务器上查看内容

    select * from test;

    已经可以看到从proxy插入的数据

    经测试,写操作只会在master上进行,而读操作只会在slave上进行。

    至此,mysql读写分离成功。

    若想关闭proxy

    killall  -9  mysql-proxy

     

  • 相关阅读:
    Intellij Idea开发工具在@Autowired或者@Resource注入XxxMapper接口时报如下错误Could not autowire. No beans of 'TbItemMapper' type found
    java.lang.IllegalStateException: getOutputStream() has already been called for this response解决方案
    Javaweb项目配置到阿里云服务器
    VMware15.5.0安装MacOS10.15.0系统 安装步骤(上)
    单元测试 springboot-test
    虚拟机字节码指令表
    tomcat服务器源码解读02-基本原理
    tomcat服务器源码解读01-整体结构
    Elasticsearch kibana官方基础本地实践
    虚拟机部署单机版kubernetes,minikube,docker
  • 原文地址:https://www.cnblogs.com/QicongLiang/p/9822396.html
Copyright © 2011-2022 走看看