node mysql 更新多条数据类型_Node.js Mysql实现读写分离

本文介绍了MySQL数据库的Master/Slave配置以实现读写分离,详细步骤包括设置服务器、修改配置文件、重启服务、配置主从关系等。通过这种方式,可以减轻Master服务器的压力,提高系统的高可用性。同时,文章展示了如何在Node.js应用中利用mysql库的poolCluster实现读写分离,确保数据一致性和应用的高效运行。

什么是读写分离

为了实现高可用,mysql数据库一般都会搭建Master/Slave;即然有两台服务器,我可以将一些数据库查询放到Slave服务器上执行,这样会减少Master服务器的压力。读写分享是数据库Master/Slave附带的一个能力。

配置Master/Slave

mysql Master/Slave 模式实现的原理是二进制日志,简单的说就是数据操作记录在日志中,然后分发给Slave服务器执行。具体原理,我不是DBA也说不太清。下面开始配置:

1、假设现在我有两台服务器,并且都安装好了mysql数据库(版本一至)。master服务器地址为192.168.199.108,slave服务器地址为192.168.199.166。

2、修改两台服务器/etc/my.cnf 如下

需要注意的是server-id不能相同,一般都配置为本机IP的最后一段。

3、重启两台服务器mysql

service mysqld restart

4、使用Navicat for MySQL工具分别联接上两个数据库

5、配置master数据库

先创建一个用户

找开命令行窗口

6、配置slave数据库

打开slave命令行窗口,执行

change master是配置主服务器地址,其中master_log_file和master_log_pos是show master status 中的结果。注意:714是不要引号的。

再输入

show slave status\G;

Slave_IO_Running: Yes //此状态必须YES

Slave_SQL_Running: Yes //此状态必须YES

如果这两项为Yes,则表示配置成功

7、检查配置结果

配置成功

编写Node.js程序

1、在master库中创建测试表

2、使用Lei框架生成resetfull格式的web项目

lei框架使用介绍请查看我另一篇文章:

假设代码生成如下图:

3、修改config.json配置

4、修改util.js文件

由于mysql库自带了poolCluster,可以很方面实现读写分离的配置。

5、修改userService.js文件

6、修改user.test.js文件

7、运行服务器

node index.js

执行测试文件

npm test

8、查看结果

总结

1、使用Node.js实现读写分离是很容易的,因为mysql库已经支持了集群。

2、Master/Slave这种模式下,slave数据可能会产生一定的延时,如果对查询的要求是实时的,就需要从Master库中读取。

3、如果Slave服务器宕机,重启后会自动读取Master数据库的日志,并保存数据一至。

4、如果存储数据时需要事务,建议不要读写分离。

Node.jsMySQL 分表分库数据访问中间件,实现MySQL数据的分布式集群储存管理。在处理海量数据、高并发访问时,获得更加优越的性能及横向扩展能力。它包含以下主要特性: 可伸缩、高扩展的架构 自动路由分库,维护数据库连接池 支持数据表的“横向”和“纵向”分表 支持“一主多从”式读写分离 分布式并行处理,成倍提升性能 对应用层隐藏数据来源及技术细节 拥有以上特点意味着,可随时通过增加普通级别数据库服务器的方式,方便地扩展整体系统性能,而无需修改业务层架构和代码。理论上TribeDB的扩展能力上线在于主库单表插入性能和主从数据同步开销。通过合理设计“横向”和“纵向”分表和数据切分粒度,可轻松应对上亿级别的数据量和访问请求。 快速上手: var tribe = require('tribedb'); //载入配置文件,sync选项为true 表示同步读取解析配置文件 tribe.configure('/path/to/tribe.conf',{sync:true}); //通过数据库表名建立查询请求 var db = tribe.createQuery('my_table'); //插入封装 db.data({title:'标题'}).insert(function(err, data){   console.log(err);   console.log(data); }); //查询封装 db.where('title','标题').order_by('time','DESC').limit(1).select(function(err, data){   console.log(err);   console.log(data); }); //不使用封装的操作,直接执行sql tribe.query('SELECT * FROM user_0 WHERE id=1 LIMIT 1',function(err, data){   console.log(err);   console.log(data); }); TribeDB 通过全局唯一的表名,自动连接对应的数据库,并通过分表配置,将操作映射到涉及的分表,同时完成读写分离。 一切都由 TribeDB 自动完成,业务层不必关心数据的位置。当数据库负载过高需要添加服务器时,只需简单修改配置文件而不必修改业务代码,甚至将整个架构推倒重来。继续阅读文档详细了解如何使用。 标签:TribeDB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值