作家
登录

利用ProxySQL实现MySQL的读写分离

作者: 来源: 2018-01-22 11:21:27 阅读 我要评论

  • Proxysql安装在主库。
  • 以下操作是在main库下的表操作的!

    1、设置读写的分组编号(即 hostgroup_id)

    • insert into mysql_replication_hostgroups  values(1,2,db-128);
    • load mysql servers to runtime;save mysql servers to disk;

    注:设置1为写分组;2为读分组;备注:db-128;将其加载到运行中,保存稻磁逄。

    2、将MySQL实例分派到各个组中:主库分到写组;大年夜库分到读组。

    • insert into mysql_servers(hostgroup_id,hostname,port,transaction_persistent,max_connections)  values (1,'192.168.152.128',3306,1,100),(2,'192.168.152.128','3307',1,100);
    • load mysql servers to runtime;save mysql servers to disk;

    注:

    • 若这里有多个大年夜库,可以将其他大年夜库的信息添加到读分组(即:hostgroup_id=2)中。
    • 每个server须要属于一个组;一个组里可以有多个server;一个server可以属于多个组。

    ① 在proxysql中创建账号,在外部应用它连接进来时,会在表main.mysql_users中检查该账号的相干信息。

    • insert into mysql_users(username,password,active,default_hostgroup,default_schema) values ('proxysql','proxysql',1,1,'guolmdb');
    • load mysql users to runtime;save mysql users to disk;

    注:proxysql/proxysql账号用于外部连接进来应用,默认进入写分组的guolmdb库,active=1代表活泼的┞匪号。

    ② 修改供给外部连接的IP和端标语

    • update global_variables set variable_value='http://database.51cto.com/art/201801/192.168.152.128:6033'  where variable_name='mysql-interfaces';
    • 或 set  mysql-interfaces='192.168.152.128:6033';
    • save mysql variables to disk;
    • > proxysql restart;

    由此得亲信在线修改时,必定要保存稻磁逄,不然再次启动时损掉设备的数据。

    注:

    • 该变量的值可以有多个,即可以设置经由过程多个IP连接进来,格局:'IP1:port1;IP2:port2'。
    • 修改该变量须要重启才能生效!
    • 有两种设置变量的方法:set 设置 或 update 设置。

    ③ 将以上创建的┞匪号,在MySQL主库中创建一遍,要不然,proxysql没有权限连接到MySQL。

    • GRANT ALL PRIVILEGES>
    • # tail -100f proxysql.log 
    •  
    • 2017-11-13 17:02:35 MySQL_Monitor.cpp:412:monitor_connect_thread(): [ERROR] Server 192.168.152.128:3306 is returning "Access denied" for monitoring user 
    •  
    • 2017-11-13 17:02:35 MySQL_Monitor.cpp:412:monitor_connect_thread(): [ERROR] Server 192.168.152.128:3307 is returning "Access denied" for monitoring user 
    • 4、设置读写的路由规矩

      • insert into mysql_query_rules (active,username,match_pattern,schemaname,destination_hostgroup,apply) values(1,'proxysql','^select','guolmdb',2,1);
      • load mysql query rules to runtime;save mysql query rules to disk;

      解释:

      • 经由过程账户proxysql连接进来的,一个以select开首的SQL并操作guolmdb库的语句将会被分派到读分组履行。

      留意:

      • 这种设置若一个事务为:begin;select;update;commit;可能会将该事务分派到大年夜库操作,如许是缺点的!
      • 为避免这种缺点,可以针对并发高的SQL设置读的负载均衡。如下操作:
        • 查看表 stats_mysql_query_digest,找参预发高的SQL对应的字段digest。
        • 在main.mysql_query_rules中设置路由规矩时,将萌芽到的digest,添加到路由表的字段digest中。
        • 官网相干博客:http://proxysql.com/blog/configure-read-write-split

      注:经由过程对外供给办事的端标语和账号连接进proxysql,进而转接到主库上(因为该账户默认进入的是主库)

      5、测试 设备的读写分别是否生效

      履行一些操作:

      1. # mysql -uproxysql -pproxysql -P6033 -h192.168.152.128 
      2.  
      3. [guolmdb]>insert into t1 values(1);        
      4.  
      5. [guolmdb]>select * from t1 where id=1;   

          推荐阅读

          Windows 10免费升级彻底结束:辅助技术页面关闭

        年前最后一场技巧盛宴 | 1月27日与京东、日记易技巧大年夜咖畅聊智能化运维成长趋势! 最终,微软停止了Windows 10最后的免费进级福利。1月18日正午消息,当用户再次拜访“面向帮助技>>>详细阅读


        本文标题:利用ProxySQL实现MySQL的读写分离

        地址:http://www.17bianji.com/lsqh/40435.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)