暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

利用ProxySQL实现MySQL的读写分离

原创 张sir 2022-10-13
1135

前言

    之前搞读写分离是用的商业产品,最近研究了下proxysql感觉还不错,后面做了下部署测试,下面是测试步骤,包含mysql主从的配置的步骤。里面碰到的坑和问题,都有解决方案。

一、部署MySQL

      1、到MySQL官网下载mysql安装包,我这里用的是mysql8.0:mysql-8.0.24-el7-x86_64.tar.gz

      2、解压安装包到/usr/local目录下

              tar -xvf mysql-8.0.24-el7-x86_64.tar.gz -C /usr/local/

              mv mysql-8.0.24-el7-x86_64/ mysql

      3、创建用户组和用户并修改权限

          groupadd mysql
          useradd -r -g mysql mysql
          chown mysql:mysql -R /usr/local/mysql # 修改权限

       4、创建数据目录,存放MySQL数据
       cd / # 进入根目录
       mkdir -p data # 创建数据文件夹
       cd data/ # 进入数据文件夹
       mkdir -p mysql/ # 创建mysql文件夹
       chown mysql:mysql -R /data/mysql # 修改权限

       5、卸载Centos7自带的Maridb数据库
          rpm -qa | grep mariadb # 搜索相关的软件包
          rpm -e --nodeps mariadb* # 搜索出来的软件包进行卸载

       6、修改mysql配置文件my.cnf ================》注意本次没有使用/etc/my.cnf,把my.cnf放到了自定义目录下。

       

      7、初始化mysql

        chmod 777 /usr/local/mysql/my.cnf # 修改权限
        /usr/local/mysql/bin/mysqld --initialize --defaults-file=/usr/local/mysql/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql # mysql初始化,

        执行初始化报错,看了八遍并没有发现写错了,网上搜索了下发现,这个defaults-file必须放到mysqld的后面,而且必须紧跟在后面,放在其他任何地方都不行。

      

    调整位置后重新初始化成功:

        

    8、修改环境变量

      vi /etc/profile # 配置环境变量
       export PATH=$PATH:/usr/local/mysql/bin
       source /etc/profile

    9、设置systemd管理mysql

      

     10、启动mysql并修改root密码

        systemctl start mysql

        mysql -u root -p #密码在error log中
        alter user root@localhost identified by 'root'; ==========》在mysql8.0中,set password的方法已经不好使了。

        flush privileges;

二、建立主从复制

      1、参考以上步骤部署两套mysql(备库设置read only,server-id要与主库不一致,可以选择ip地址的最后一位)

      2、在主库新建复制账号

       create user repl identified by '123456';
       grant replication slave on *.* to 'repl'@'%' identified by '123456';

      3、备份主库的数据,(如果使用了gtid,在进行mysqldump的时候要加--set-gtid-purged=on!!!!!)
      mysqldump -uroot -proot --single-transaction --master-data=2 --hex-blob --triggers --routines --events --all-databases > all_db.sql


      4、拷贝到备库恢复

       mysql -uroot -p <all_db.sql

      5、在备库执行复制命令

       change master to master_host='10.0.248.21', master_port=3306, master_user='repl', master_password='123456', master_log_file='mysql-bin.000004', master_log_pos=206868130;

       6、启动复制
       start slave;

三、部署ProxySQL

    1、git上下载安装包
            https://github.com/sysown/proxysql/releases

    2、安装依赖包,(需要配置互联网yum源,对于生产环境如果无法连接外网yum源,可以在测试环境利用命令yum install --downloadonly --downloaddir=路径 安装包名 下载了rpm包,传到生产环境安装)

           yum install perl perl-DB* -yum

    3、安装proxysql
         

    4、确认版本

     

    6、登录

      启动了6032和6033两个端口,默认管理端口是6032,客户端服务端口是6033,默认的用户名密码都是 admin,通过mysql的客户端可以登录。

      

     7、配置后端server

      这一步是把后端的数据库的角色加入到proxysql里面。weight字段是权重,可以不写。
         insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(100, '192.168.56.101', 3306, 1, 'db0,ReadWrite'),(101, '192.168.56.102', 3306, 1, 'db0,ReadOnly');
     8、添加复制关系    

       这一步是要把Monitor模块监控后端的read_only值,按照read_only的值将节点自动移动到读/写组。

       
      
     9、添加监控用户

         在数据库里建一个monitor用户给proxysql用。

        

    10、proxysql指定default_hostgroup
        这一步是在proxysql里添加访问后端db的用户,把你的应用用户放进去就ok。

        
    11、proxysql添加监控用户
     
     12、proxysql全局变量生效

       以上添加的用户,server都需要加载到proxysql的内存实时生效,并保存到磁盘上。

     
      13、proxysql添加路由

       通过正则匹配,添加相应的路由规则,我这个示例中是把select路由到备机,update、insert、delete路由到主机。
    

    14、查询后端db状态

     SELECT * FROM mysql_servers;

     15、查看路由执行情况

      SELECT hostgroup hg, sum_time, count_star, digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;

    16、查看路由规则
     SELECT rule_id, match_digest, match_pattern, replace_pattern, cache_ttl, apply FROM mysql_query_rules

    17、通过proxysql连接数据库

      mysql -uroot -p -h127.0.0.1 -P6033

      

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论