数据库
首页 > 数据库> > MySQL数据读写分离

MySQL数据读写分离

作者:互联网

MySQL数据读写分离

数据读写分离:把客户端的访问数据的查询请求和写数据的请求分别给不同的数据库服务器处理。
数据读写分离实现方式:
        1 通过程序实现: 明确告诉程序员查询操作和写数据的操作必须连接固定的数据库服务器
        2 架设服务结构实现: 使用数据读写分离服务的软件(mysql中间件):

        maxscale  

        mysql-proxy  

        mycat

部署mysql 一主一从 主从同步结构
        1.1.1 配置主库192.168.4.51

       1.1.2 配置从库192.168.4. 52

    1.2 配置MySQL代理服务器 192.168.4.57
             systemctl  stop  mysqld
             systemctl  disable  mysqld
        装包
         rpm  -ivh  maxscale-2.1.2-1.rhel.7.x86_64.rpm            
        修改配置文件
         cp /etc/maxscale.cnf /etc/maxscale.cnf.bak
 ]# vim  /etc/maxscale.cnf
  [maxscale]    定义服务启动后 线程的数量
 threads=auto

  [server1]    定义主库服务器ip地址及端口号
  type=server
  address=192.168.4.51
  port=3306
  protocol=MySQLBackend
 
  [server2]  定义从库服务器ip地址及端口号
  type=server
  address=192.168.4.52
  port=3306
  protocol=MySQLBackend

  [MySQL Monitor]   定义maxscale服务监视的数据库服务器
  type=monitor
  module=mysqlmon
  servers=server1, server2  监视的数据库服务器
  user=monitoruser   监控用户名
  passwd=123qqq...A  密码
  monitor_interval=10000

  #[Read-Only Service] 不定义只读服务
  #type=service
  #router=readconnroute
  #servers=server1
  #user=myuser
  #passwd=mypwd
  #router_options=slave

  [Read-Write Service]  定义读写分离服务
  type=service
  router=readwritesplit
  servers=server1, server2
  user=scaluser        路由用户名
  passwd=123qqq...A    密码
  max_slave_connections=100%

  [MaxAdmin Service] 定义管理服务
  type=service
  router=cli
        
  #[Read-Only Listener]  不定义读服务使用的端口
  #type=listener
  #service=Read-Only Service
  #protocol=MySQLClient
  #port=4008

  [Read-Write Listener]  定义读写分离服务使用的端口
  type=listener
  service=Read-Write Service
  protocol=MySQLClient
  port=4006
  
  [MaxAdmin Listener]   定义管理服务使用的端口
  type=listener
  service=MaxAdmin Service
  protocol=maxscaled
  socket=default
  port=4016

  根据配置文件做相应的配置
            1 在2台数据库服务器上创建监控用户monitoruser 和 路由用户scaluers
               在主库51上添加用户

      
     mysql> grant replication slave, replication client on *.* to monitoruser@"%"
              -> identified by "123qqq...A";

     mysql> grant select on mysql.* to scaluser@"%"
             ->  identified by "123qqq...A";

     mysql> select host,user from mysql.user where user in ("monitoruser","scaluser");

               在从库52上查看

mysql> select host,user from mysql.user where user in ("monitoruser","scaluser");

+------+-------------+

| host | user        |

+------+-------------+

| %    | monitoruser |

| %    | scaluser    |

+------+-------------+

 在57主机测试数据库的授权用户
 

mysql -h192.168.4.51 -umonitoruser -p123qqq...A
mysql -h192.168.4.52 -umonitoruser -p123qqq...A
mysql -h192.168.4.51 -uscaluser -p123qqq...A
mysql -h192.168.4.52 -uscaluser -p123qqq...A

 启动服务
        

 [root@host57 ~]# netstat -utnlp | grep :4006

 [root@host57 ~]# netstat -utnlp | grep :4016            

 [root@host57 ~]# maxscale  -f /etc/maxscale.cnf 启动服务                

 [root@host57 ~]# killall  -9 maxscale 停止服务

  

 查看服务信息

[root@host57 ~]# ps -C maxscale
  PID TTY          TIME CMD
   4863 ?        00:00:00 maxscale
            
[root@host57 ~]# netstat -utnlp | grep maxscale
tcp6       0      0 :::4016                 :::*                    LISTEN      4863/maxscale       
tcp6       0      0 :::4006                 :::*                    LISTEN      4863/maxscale       

在maxscale本机连接管理端口查看监控状态 

 
            [root@host57 ~]# maxadmin -uadmin  -pmariadb -P4016
            MaxScale> help
            MaxScale> 
            Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status              
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.4.51    |  3306 |           0 | Master, Running
server2            | 192.168.4.52    |  3306 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

            MaxScale> exit

1.3 客户端测试
        1.3.1 在2台数据库服务器上添加客户端访问数据的连接用户
            在主库授权访问数据的连接用户jim  密码123qqq...A 


 mysql> create database db7;
 mysql> create table db7.t1(name char(10));
 mysql> grant select ,insert on  db7.*  to jim@"%" identified by "123qqq...A";
 mysql> select host,user from mysql.user where user="jim";
+------+------+
| host | user |
+------+------+
| %    | jim  |
+------+------+
      

1.3.2 客户端50 连接代理服务器192.168.4.57 查询数据或存储数据 

[root@mysql50 ~]# mysql -h192.168.4.57 -P4006  -ujim  -p123qqq...A
 mysql> select  * from db7.t1;
 mysql> insert into  db7.t1 values("tom");
 mysql> select  * from db7.t1;
 mysql> exit              

52本机向表里插入记录B

mysql  -uroot -p密码 
mysql> insert into  db7.t1 values(“BBBBBB”);  

50本机向表里插入记录B 

mysql -h192.168.4.57 -P4006  -ujim  -p123qqq...A
mysql> select  * from db7.t1; 显示的B记录说明是在从库查询的记录  

标签:...,读写,分离,maxscale,192.168,user,mysql,MySQL,type
来源: https://blog.csdn.net/weixin_45273572/article/details/100516139