实现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,没有这条记录,操作的是主数据库:
删除
删除与修改相同,删除主数据库中存在的数据,则从数据库同步复制执行删除语句, 删除主数据中不存在的数据,则删除失败。
来源:CSDN
作者:沉默的小蜗牛
链接:https://blog.csdn.net/qq_32778043/article/details/80584376