目录

mysql 读写分离实战

使用Mysql-Proxy

Mysql-proxy配置

  • 下载并解压

    wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
    
    tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
  • 配置文件 vim /etc/mysql-proxy.cnf 并保存

    [mysql-proxy] #这个必须加
    user=root
    #mysql用户
    admin-username=root
    admin-password=密码
    
    #代理
    #ip: proxy安装的机器, 默认4040端口
    proxy-address=192.168.0.237:4040
    #写库,配master
    proxy-backend-addresses=192.168.0.237:3306
    #读库,配slave
    proxy-read-only-backend-addresses=192.168.0.60:3306,192.168.0.236:3306
    
    #使用自带lua脚本 mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua, 配置解压目录
    proxy-lua-script=/opt/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua
    
    #日志文件
    log-file=/var/log/mysql-proxy.log
    log-level=info
    
    #进程运行方式
    daemon=true
    
    keepalive=true
  • 配置读写权限

    chmod 660 /etc/mysql-proxy.cnf
  • 修改lua脚本参数

    vim mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua
    
    
    -- connection pool
    if not proxy.global.config.rwsplit then
            proxy.global.config.rwsplit = {
                    min_idle_connections = 4,
                    max_idle_connections = 8,
    
                    is_debug = false
            }
    end
    
    # 把 min_idle_connections配置成1, 为了方便测试效果, 即达到1个连接就读写分离
  • 启动

    # mysql-proxy bin目录下
    ./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
  • 测试, 使用客户端连接代理

    Tips:

    • Insert 会走主库
    • select会查从库
    • 停止从库的slave, insert 后 查不到
    • 通过sql语句有时能查到最新数据, 说明主库既可以写也可以读