Contents
  1. 1. 应用场景:
  2. 2. mysql-proxy
    1. 2.1. 实现功能
    2. 2.2. 安装配置
    3. 2.3. 192.168.29.129为mysql-proxy的软件所在的机器的IP,可以和mysql在一台服务器上,也可以不在一台服务器上。
  3. 3. proxy 读写分离的配置
  4. 4. 注意事项
    1. 4.1. mysql的远程连接
  5. 5. 主从复制
    1. 5.1. 重点注意事项:
  6. 6. 出现问题

应用场景:

最适合多读少写的场景,而且是一主(负责写)多从(负责读,通过proxy分摊查询)

  • 从服务器作为读的优点:可以设置为MYISAM,读取速度快,索引查相对也比Innodb快。还可以做集群分摊读的压力
  • 主服务器负责写:Innodb支持事务和高并发的写,因为是行锁而不是表锁。
  • 数据同步使用 binlog ,从库不需要像主库那样先对 SQL query 进行 SQL parsing 等操作,写入效率高。也不需要支持事务了,因为binlog都是事务控制后的结果了。

mysql-proxy

实现功能

实现mysql的代理,外部通过代理的形式访问mysql

安装配置

  • mysql 和mysql-proxy是2个独立的软件,就算在一个机子上,也需要对本机授权。这和直接远程连接mysql是2个概念。

192.168.29.129为mysql-proxy的软件所在的机器的IP,可以和mysql在一台服务器上,也可以不在一台服务器上。

grant all on . to ‘test’@’192.168.29.129’ identified by ‘123456’;
flush privileges;

  • 授权后,外部直接通过默认的4040端口,远程连接mysql 服务器
    mysql -hmysql-proxyIP -P4040 -u$USER -P密码
    可以测试 telnet mysql-proxyIP 4040 查看是否防火墙屏蔽了端口。

安装参考:
https://www.cnblogs.com/hjwq/p/6293507.html

  • 概括:

    源码安装:
    tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
    cp -r mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
    chmod -R 775 /usr/local/mysql-proxy
    chown -R mysql:mysql /usr/local/mysql-proxy
    vim /etc/profile //打开此文件,在文件尾部加上以下内容
    LUA_PATH="/usr/local/mysql-proxy/share/doc/mysql-proxy/?.lua"
    export LUA_PATH
    export PATH=$PATH:/usr/local/mysql-proxy/bin //mysql proxy 环境变量的设置
    保存并退出后执行下面命令
    source /etc/profile // 使变量立即生效
  • 启动mysql-proxy启动脚本 mysql-proxy.cnf
    注意:这个配置文件一定不能有尾部空格啊。 配置的username是 mysql授权过的用户名和密码。

    [mysql-proxy]
    admin-username=test
    admin-password=123456
    admin-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/admin-sql.lua
    daemon=true
    keepalive=true
    proxy-backend-addresses=192.168.29.129
    log-file=/usr/local/mysql-proxy/mysql-proxy.log
    log-level=debug
  • 启动mysql-proxy
    chmod 0660 /etc/mysql-proxy.cnf
    mysql-proxy –defaults-file=/etc/mysql-proxy.cnf

proxy 读写分离的配置

  1. 分别把主、从服务器给mysql-proxy的 test/123456 赋予权限。
    注意:主库和从库给代理服务器创建登录用户并密码应该一致

注意事项

mysql的远程连接

有问题参考博客:
http://blog.csdn.net/freezingxu/article/details/77088506

这和oracle不一样,需要专门的设置和授权。
登录主mysql:把test用户(密码123456)授权到192.168.29.129这个IP,享有所有的数据库资源

grant all on *.* to 'test'@'192.168.29.129' identified by '123456';
flush privileges;
  • 查看授权情况
    select user,host from mysql.user;

  • 查看防火墙情况
    telnet 192.168.29.129 3306

  • ubutun操作系统的话,需要修改 /etc/mysql/mysql.conf.d/mysqld.cnf 这个配置。
    注释掉 # bind-address = 127.0.0.1

然后切换到 192.168.29.129,就可以远程连接到主mysql了
mysql -h192.168.29.1 -utest -p123456

主从复制

非常棒的博客:操作成功了
https://www.cnblogs.com/superfat/p/5267449.html

重点注意事项:

  • 配置连通状态
    设置从服务器读取二进制日志的位置,要从master 读取 show master status;
    获取到bin,和position,然后写入到从服务器中。
stop slave;
CHANGE MASTER TO MASTER_HOST="192.168.29.129",
MASTER_USER="slave",
MASTER_PASSWORD="123456",
MASTER_LOG_FILE="mysql-bin.000003",
MASTER_LOG_POS=474;
start SLAVE;

当从服务器显示: show slave status;
SLAVE_IO_RUNNING:YES;
SLAVE_SQL_RUNNING:YES;
的时候才表示主从连通。

  • 初始化的时候一定要一样才行,因为不会自动一样,只是有新的事务进来,从服务器就开始同步新的DML
  • 查看最大IO事务的大小:
    select @@global.max_allowed_packet/1024/1024 MB;

设置为1个G
stop slave;
set global max_allowed_packet =110241024*1024;
start slave;

出现问题

mysql重启后第一次 主从复制成功,第二次主服务器更新,从服务器不更新,但是 show slave status; 显示正常。我ca

Contents
  1. 1. 应用场景:
  2. 2. mysql-proxy
    1. 2.1. 实现功能
    2. 2.2. 安装配置
    3. 2.3. 192.168.29.129为mysql-proxy的软件所在的机器的IP,可以和mysql在一台服务器上,也可以不在一台服务器上。
  3. 3. proxy 读写分离的配置
  4. 4. 注意事项
    1. 4.1. mysql的远程连接
  5. 5. 主从复制
    1. 5.1. 重点注意事项:
  6. 6. 出现问题