实现Mysql主从复制读写分离

实现Mysql主从复制读写分离记录

本次研究是通过配置Mysql实现主从复制,使用Amoeba代理实现读写分离。

参照资料:http://my.oschina.net/u/1169079/blog/390726

Mysql主从复制:

根据查资料发现,只需修改对应的mysql文件目录下的my.ini配置文件,之后在命令行界面执行相关命令后,即可实现主从复制。分工及工具如下

主数据库:董胜燕  IP:192.168.1.102  Mysql版本:5.7

从数据库:高宇飞  IP:192.168.1.103  Mysql版本:5.7

修改主数据库配置

首先,修改主数据库的my.ini配置文件 :

在[mysqld] 下增加如图所示部分语句,其中字段代表含义:

binlog-ignore-db

指定忽略复制的数据库

log-bin

指定数据库操作日志,复制数据读取此日志

server-id

Mysql服务id,多个主从时一定不能重复。

symbolic-links

禁用符号链接,防止安全风险

修改完成后,重启Mysql服务,打开命令行窗口,验证是否已打开主数据库:

    输入命令登录mysql,输入 show master status\G;查看主数据库状态,出现以下结果,既是配置成功。

此时,需要记住File与Position的值,修改从数据库配置时需要使用。

启动成功后,需要对从数据库进行授权,执行以下语句即可:

GRANT REPLICATION SLAVE ON *.* to 'slave'@'192.168.1.103' 

identified by 'root'

   

修改从数据库配置

其次,修改从数据库的my.ini配置文件:

       

在[mysqld]下,增加

server-id 从数据库的服务id,保证其唯一性即可;

slave-skip-errors = all,因为复制过程中如果遇到错误异常,则会导致复制中断,无法继续运行,所以设置此语句 跳过所有错误。

修改完成后,重启Mysql服务,打开命令行窗口,登录mysql,执行设置主从数据库同步点:

change master to master_host='192.168.1.102',master_user='slave',master_password='root',master_log_file='test.000003',master_log_pos=1365332

 

其中设置参数代表含义:

master_host

主数据库的IP地址

master_user

主数据库的用户

master_password

主数据库的密码

master_log_file

主数据库的日志文件,主数据库中得到

master_log_pos

主数据库的端口,主数据库中得到

设置完成之后,执行startslave启动从数据库:

启动成功后,查看从数据库状态:

当Slave_IO_Runing显示Connecting或Yes,Slave_SQL_Running显示Yes时,即为主从连接成功。

 

验证主从复制是否成功

         打开连接工具,连接数据库,随意进行数据库增删、数据增删改操作,都能同步:

         未修改前:                                              主数据库新增一个数据库后,刷新从数据库:

        

在test数据库下新建一个sixt表,字段为id,name。进行增删改查均可复制。

读写分离

根据查资料,本次决定采用Amoeba实现读写分离。在参考资料中详细写明了优缺点。

使用Amoeba前需要去官网下载相应版本的文件包,本次下载的是Windows64位的:

amoeba-mysql-3.0.5-RC版本,解压至目录即可。

修改Amoeba配置文件

打开解压目录,找到amoeba-mysql-3.0.5-RC\conf,其中amoeba.xml和dbServices.xml是主要配置文件。

配置dbServices.xml文件:

其中只需修改,默认连接的数据库信息。设置主从数据库的IP地址信息即可。其余设置可参照API按需进行更改。

配置amoeba.xml文件:

需要设置数据库连接密码,和读写的配置,其中写入数据库为主数据库,读取数据库为从数据库。

启动Amoeba

修改配置完成后,需要打开命令行窗口,执行运行Amoeba:

运行文件目录amoeba-mysql-3.0.5-RC\bin下的launcher.bat即可。

集成进系统并测试

最终,将Amoeba集成进系统一起测试。

直接更改项目中JDBC连接配置,简单写出来一个增删该查进行验证。

        

只需修改连接端口为8066即可,连接数据库为test,打开数据库

            

可以发现此时主数据库中只有一条数据,从数据库中有两条数据。

程序sql语句部分的代码如下:

查询

运行程序,查看读取的数据:

可以看到,查询结果是从数据库的两条记录。读的操作来自于从数据库

新增

点击新增,进行新增操作:

保存后,自动刷新页面:

此时打开数据库查看:

          

主数据库和从数据库中都有一条新增的记录。

修改

此时点击修改,因为修改为写操作,操作于主数据库,我们修改主数据库没有的id=2的记录:


提示信息为修改失败,查看后台断点,可以看出返回值为0,没有这条记录,操作的是主数据库:

删除

删除与修改相同,删除主数据库中存在的数据,则从数据库同步复制执行删除语句,   删除主数据中不存在的数据,则删除失败。



猜你喜欢

转载自blog.csdn.net/qq_32778043/article/details/80584376