首页 > 数据库 > 其他综合 > 正文
在windows环境下实现mysql的读写分离和负载均衡
2016-09-08       个评论      
收藏    我要投稿

1.前(jian)言(tao):

明明上星期就弄好了,然而拖到了今天才来写博客纪录,拖延症晚期的我。

(1)基本的理论知识:

首先,要实现mysql的读写分离,可以使用mysql的主(master)从(slave)复制(Replication)来实现:

主(master)库只提供写数据的服务,而从(slave)库只提供读数据的服务。

什么是主从复制?

简单来说,就是主(master)库把对数据改动的操作保存到一个文件里面,而从(slave)库会隔一个时间间隔根据这个文件更新自己的数据

(所以读到的数据是有延迟的,这个延迟取决于从(slave)库设置的时间间隔)

关于主从复制的详细内容,可以问度娘

(2)实际操作步骤:

使用以下三台电脑:

主库(master)的IP:192.168.1.65

从库1(slave)的IP:192.168.1.49

从库2(slave)的IP:192.168.1.64

三台电脑都安装了MySQL5.5(实验室的电脑,版本比较老~)

然后把三台电脑的mysql服务停掉

A.打开主库(master)的mysql安装目录,打开配置文件my.ini

这里写图片描述

B.在[mysql]的后面添加如下代码:

server-id=1 #master的标示
log-bin=mysql-bin #slave会基于此log-bin来做replication
binlog-do-db=test #用于master-slave的具体数据库
binlog_ignore_db=mysql #不用于master-slave的具体数据库
binlog_ignore_db=information_schema #和binlog-do-db一样,可以设置多个

C.打开主库(master)的mysql服务,进入mysql的命令行,输入如下代码:

show master status;

这里写图片描述

记下File(日志文件)和PZ喎"/kf/ware/vc/" target="_blank" class="keylink">vc2l0aW9uKMjV1r7Ou9bDKaOstNO/4ihzbGF2ZSm74bj5vt3V4rj2yNXWvs7EvP66zcjV1r7Ou9bDwLS4/NDC19S8urXEse2jrNK7uPa007/ixeTWw83qs8nWrsewo6yyu9KqttTW97/iKG1hc3Rlcim1xMr9vt3X9sjOus7Q3rjEstnX96GjPC9wPg0KPGg0IGlkPQ=="d分别给两个从库复制权限">D.分别给两个从库复制权限

grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123456';

其中的’slave’为登录账号,’123456’为密码,’192.168.1.%’为从库的IP(这里偷懒使用了通配符~)

这里写图片描述

E.打开从库1的mysql安装目录,打开配置文件my.ini,在[mysql]的后面添加如下代码:

server-id=2 #比刚刚主库设定的server-id大就行了,且从库之间不能有一样
log-bin=mysql-bin #slave会基于此log-bin来做replication
replicate-do-db=test #用于master-slave的具体数据库

保存后启动从库1的mysql服务,进入mysql的命令行,输入如下代码:

先停止它的slave:

stop slave;

再改变它的master:

change master to master_host='192.168.1.65', 
master_port=3306,
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000040',
master_log_pos=717;

这里写图片描述

再启动它的slave:

start slave;

然后再输入如下代码,检查是否成功:

show slave status\G;

这里写图片描述

如果看到上面这句话的,那就没问题了~

当然你也可以在主库(master)上做修改数据的操作,看看从库会不会更新~(注意:从库(slave)的数据库需要自己手动创建)

F.对从库2的操作和从库1的基本一样

打开配置文件my.ini,在[mysql]的后面添加如下代码:

server-id=3 #比刚刚主库设定的server-id大就行了,且从库之间不能有一样
log-bin=mysql-bin #slave会基于此log-bin来做replication
replicate-do-db=test #用于master-slave的具体数据库

因为从库1的server-id为2,所以从库2的server-id不能为2

保存后启动从库2的mysql服务。

注意要再从主库上获取一次最新的File(日志文件)和Position(日志位置)

这里写图片描述

先停止它的slave:

stop slave;

再改变它的master:

change master to master_host='192.168.1.65', 
master_port=3306,
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000040',
master_log_pos=1751;

剩下的操作和从库1一毛一样~

G.到这里,mysql的读写分离就完成了~

但是这样不够方便,因为我们写数据时需要连接主库,而读数据时需要连接从库。在连接从库时,不能负载均衡。

这时候就要靠神器Amoeba了~

它就像一个中转站,将所有的写请求分配给主库,读请求分配给从库,并且在从库之间实现负载均衡,丢个官网的图~

这里写图片描述

H.配置Amoeba服务器:

这里最好找另外的一台电脑充当Amoeba服务器:192.168.1.62

博主使用的版本是amoeba-mysql-3.0.5-RC-distribution,链接如下:

下载链接

下载完成后解压,打开conf文件夹,配置amoeba.xml和dbServer.xml:

amoeba.xml:



    
        
        
            
            8066
            
            192.168.1.62
            
                
                    128
                    64
                
            
            
                
                    
                    amoeba
                    
                    123456
                    
                        
                            ${amoeba.home}/conf/access_list.conf
                        
                    
                
            
        
        
            
            128
            
            500
            
            utf8
            
            60
        
    
    
    
        
            com.meidusa.toolkit.net.AuthingableConnectionManager
        
    
        
    
        ${amoeba.home}/conf/dbServers.xml
    
    
        
            
                ${amoeba.home}/conf/rule.xml
                ${amoeba.home}/conf/ruleFunctionMap.xml
            
        
        ${amoeba.home}/conf/functionMap.xml
        1500
       
        master
        
        master
        
         multiPool 
        true
    

dbServers.xml:



        
    
        
            ${defaultManager}
            64
            128
            
            3306
            
            test
            
            proxy
            
            123456
        
        
            500
            500
            1
            600000
            600000
            true
            true
            true
        
    
       

    
        
            
            192.168.1.65
        
    
    
    
        
            
            192.168.1.64
        
    
    
        
            
            192.168.1.49
        
    
    
    
        
            
            1
            
            slave1,slave2
        
    

I.给Amoeba授权:

分别到主库、从库1、从库2的mysql控制台下给Amoeba服务器授权,代码如下:

grant all on *.* to 'proxy'@'192.168.1.62' identified by '123456';

这里的账号和密码必须和dbServers.xml中的配置一毛一样:

这里写图片描述

连接Amoeba数据库,这里的账号、密码、Ip、端口必须和amoeba.xml的配置一毛一样:

这里写图片描述

然后使用这个连接对数据库test做数据修改操作,再到主库从库上面查看是否有同步修改,如果有,那就完成了读写分离~

如果想看看有没有实现负载均衡,可以打开Amoeba安装目录的logs/root.log查看查询日志。

然后我们的应用就可以通过连接Amoeba服务器来访问数据库中的数据了

点击复制链接 与好友分享!回本站首页
上一篇:Sqlite 基础1
下一篇:MySql数据库操作
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站