• ADADADADAD

    MySQL数据库之读写分离[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 10:31:13

    作者:文/会员上传

    简介:

    一、概述:MySQL数据库主从结构配置以后,正常情况下数据库的所有读写操作全部都在主数据库上面,从数据库仅仅作为数据备份使用,显然无法有效的使用服务器资源,那么实现读写分离的

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    一、概述:

    MySQL数据库主从结构配置以后,正常情况下数据库的所有读写操作全部都在主数据库上面,从数据库仅仅作为数据备份使用,显然无法有效的使用服务器资源,那么实现读写分离的需求就不可避免。

    二、拓扑图说明:

    如上图所示,本文要实现的是读MySQL数据库的写入操作(增删改)等在Master服务器(192.168.4.10)上面实现,而对MySQL数据库的读取操作(查询)等在Slave服务器(192.168.4.20)上面完成。

    如果在程序员编程时创建两个数据库连接Connection,在程序中对数据库的读取操作使用一个数据库Connection,而对数据库的写入操作使用另外一个数据库Connection,也可以实现对数据库的读写分离。但是显然这种实现方式不够灵活,因此一般不使用这种方式。

    本文中将使用MaxScale软件来实现MySQL数据库的读写分离。MaxScale是由http://www.skysql.com/开发的一款MySQL数据库中间件,支持高可用,负载均衡,具有良好的可扩展性,高性能的基于事件驱动的同时具有代理和管理功能的中间件。该软件将部署在拓扑图中的MySQL代理服务器(192.168.4.100)上,客户机的访问请求指向MySQL代理服务器,该服务器将把对数据库的写入操作指向到192.168.4.10,对数据库的读取操作指向到192.168.4.20。

    三、配置说明:

    1、MaxScale配置

    (1)修改配置文件:

    [root@100 ~]# vim /etc/maxscale.cnf

    A、指定数据库服务器
    [server1]
    type=server
    address=192.168.4.10
    port=3306
    protocol=MySQLBackend

    [server2]
    type=server
    address=192.168.4.20
    port=3306
    protocol=MySQLBackend

    B、指定要监控的数据库服务器
    [MySQL Monitor]
    type=monitor
    module=mysqlmon
    servers=server1,server2
    user=scalemon#代理服务器监控服务连接数据库服务器的用户名(需要在数据库服务器上面授权)
    passwd=123456#代理服务器监控服务连接数据库服务器的密码

    monitor_interval=10000//活跃检查时间间隔,10000毫秒=10秒
    C、指定读写分离在哪些主机之间执行
    [Read-Write Service]
    type=service
    router=readwritesplit
    servers=server1,server2
    user=maxscale#用于检查用户连接数据库时用的授权用户是否合法的用户名(需要对mysql数据库有select权限)
    passwd=123456 #用于检查用户连接数据库时用的授权用户是否合法的用户名

    max_slave_connections=100%
    D、定义管理服务和方式(不用改)
    [MaxAdmin Service]
    type=service
    router=cli
    E、只读服务器配置选项(不用,全部注释掉)
    [Read-Only Service]
    #type=service
    #router=readconnroute
    #servers=server1
    #user=myuser
    #passwd=mypwd
    #router_options=slave

    #[Read-Only Listener]
    #type=listener
    #service=Read-Only Service
    #protocol=MySQLClient
    #port=4008
    F、读写分离的监听端口配置
    [Read-Write Listener]
    type=listener
    service=Read-Write Service
    protocol=MySQLClient
    port=4006 //客户端读写分离服务访问端口
    G、管理服务的监听端口配置
    [MaxAdmin Listener]
    type=listener
    service=MaxAdmin Service
    protocol=maxscaled
    socket=default
    port=4009 //管理服务使用的端口

    2、在主数据库服务器添加授权

    mysql > grant replication slave,replication client on *.* to scalemon@"%" identified by "123456";
    mysql > grant select on mysql.* to maxscale@"%" identified by "123456";

    3、在代理服务器上面启动服务并检查数据库服务器状态

    (1)启动服务:

    [root@100 ~]# maxscale --config=/etc/maxscale.cnf

    (2)检查状态

    [root@100 ~]# maxadmin -uadmin -pmariadb -P4009
    MaxScale> list servers
    -------------------+-----------------+-------+-------------+--------------------
    Server | Address | Port | Connections | Status
    -------------------+-----------------+-------+-------------+--------------------
    server1 | 192.168.4.11 | 3306 | 0 | Master, Running
    server2 | 192.168.4.12 | 3306 | 0 | Slave, Running
    -------------------+-----------------+-------+-------------+--------------------

    4、验证测试

    在192.168.4.120上使用授权用户连接代理服务器(192.168.4.100:4006),在从数据库服务器(192.168.4.20)上面Insert一些数据,在客户端可以读到,那么说明客户端读数据时是在从数据库(192.168.4.20);在192.168.4.120上使用授权用户连接代理服务器(192.168.4.100:4006),Insert一些数据成功,在主从数据库上面都可以看到,说明客户端写数据时是在主数据库服务器(192.168.4.10)上面。

    MySQL数据库之读写分离.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载