数据库_读写分离-多实例应用

1.数据读写分离介绍及搭建案例; 2.多实例服务.

一,数据读写分离介绍

1.概念:把客户端访问的查询请求和写请求,分别给不同的数据库服务器处理.

2.优点: 减轻主服务器的工作压力; 提高从服务器的硬件利用率

3.实现方式,有客户端指定和服务端指定两种.

客户端指定:程序写代码实现.例,插入数据的时候,连接主库;查询数据的时候,连接从库.

服务端指定:在服务器上部署数据读写分离的服务.

4.数据分离的软件:maxscal,mysql-proxy,mycat.这些软件也叫中间件.

5.原理: 由mysql代理服务器面向客户端提供服务,收到读请求时,分配给slave服务器处理;收到写请求时,分配给master服务器处理.

二,构建读写分离架构

思路:

->部署一主一从数据库结构(192.168.4.51为主库,192.168.4.52为从库)

->部署mysql代理服务器(即安装maxscale数据库代理软件,配置,启服务)

->测试配置(即客户端连接代理服务器,访问数据)

拓扑图:

步骤:

1.部署一主一从数据库结构(192.168.4.51为主库,192.168.4.52为从库)

1.1配置主库192.168.4.51

#vim /etc/my.cnf

[mysqld]

log-bin=db51  //启动日志

server_id=51   //指定服务器id

:wq

Systemctl restart mysqld

mysql> grant replication slave on *.* to [email protected]"%" identified by "123qqq...A";     //授权用户repluser

mysql> show master status;     //查看日志信息

1.2配置从库192.168.4.52

#vim /etc/my.cnf

[mysqld]

server_id=52   //指定服务器id

:wq

#systemctl restart mysqld

1.2.1指定从库信息

Show slave status;  显示当前从库的信息

mysql> change master to

->master_host="192.168.4.51",     //指定主库IP

->master_user="repluser",           //指定授权用户

->master_password="123qqq...A",   //指定授权用户的密码

-> master_log_file="db51.000001",   //vim db2.sql查询得到主库的日志文件

->master_log_pos=441;          //vim db2.sql查询得到主库的日志偏移量

Mysql>start slave;       //启动slave进程

mysql> show slave status \G;   查看slave状态信息

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.4.51

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: db51.000001

Read_Master_Log_Pos: 441

Relay_Log_File: db52-relay-bin.000002

Relay_Log_Pos: 315

Relay_Master_Log_File: db51.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

2. 配置mysql代理服务器192.168.4.57

2.1 安装代理软件包:# rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm

2.2 修改主配置文件:#vim /etc/maxscale.cnf

[maxscale]

threads=auto   //更改线程为auto

[server1]   //定义第1台数据库服务器

type=server

address=192.168.4.51   //更改为主数据库ip

port=3306

protocol=MySQLBackend

[server2]     //server2默认没有,需要赋值serve1后做修改

type=server

address=192.168.4.52   //更改为从数据库ip

port=3306

protocol=MySQLBackend

[MySQL Monitor]   //定义要监视的数据库节点:1.是否启用;2.查询主从情况

type=monitor

module=mysqlmon

servers=server1,server2  //监控server1和server2

user=maxscalemon

passwd=123qqq...A

monitor_interval=10000

#[Read-Only Service]    //使用#注释掉,禁用

#type=service    //使用#注释掉,禁用

#router=readconnroute    //使用#注释掉,禁用

#servers=server1   //使用#注释掉,禁用

#user=myuser    //使用#注释掉,禁用

#passwd=mypwd    //使用#注释掉,禁用

#router_options=slave   //使用#注释掉,禁用

[Read-Write Service]  //定义服务及路由用户

type=service

router=readwritesplit

servers=server1,server2

user=maxscalerouter    //路由用户名,代理服务器用这个账户及密码去验证用户输入的用户及密码是否存在于主库4.51或从库4.52.

passwd=123qqq...A

max_slave_connections=100%

#[Read-Only Listener]    //使用#注释掉,禁用

#type=listener    //使用#注释掉,禁用

#service=Read-Only Service    //使用#注释掉,禁用

#protocol=MySQLClient    //使用#注释掉,禁用

#port=4008   //使用#注释掉,禁用

[Read-Write Listener]    //定义数据读写分离服务的端口

type=listener

service=Read-Write Service

protocol=MySQLClient

port=4006     //读写服务的端口

[MaxAdmin Listener]   //定义监听及管理服务的端口

type=listener

service=MaxAdmin Service

protocol=maxscaled

socket=default

port=4016     //监听管理服务的端口,手动增加

2.3 配置数据库服务器(在主从数据库服务器上创建授权用户)

mysql> grant replication slave,replication client on *.* to [email protected]"%" identified by ‘123qqq...A‘;  //创建,授权给监控用户(在主服务器4.51上操作,自动同步到4.52)

mysql> grant select on mysql.* to [email protected]"%" identified by "123qqq...A";  //创建,授权给路由用户(在主服务器4.51上操作,自动同步到4.52)

mysql> select user,host from mysql.user where user like "maxscale%";      //查看授权状况(主库4.51,从库4.52都需要查看)

2.4 启动代理服务(在4.57上操作)

[[email protected] ~]# maxscale -f /etc/maxscale.cnf

2.5 查看服务状态(在4.57上操作)

[[email protected] ~]# netstat -apntul|grep maxscale

tcp6       0      0 :::4006                 :::*                    LISTEN      941/maxscale

tcp6       0      0 :::4016                 :::*                    LISTEN      941/maxscale

[[email protected] ~]# ls /var/log/maxscale/    //服务启动后,产生日志

maxscale.log

2.6在代理服务器本机上,访问管理服务,并查看监控信息

[[email protected] ~]# maxadmin -uadmin -pmariadb -P4016  //注意这里的P是大写

MaxScale> list servers

Servers.

-------------------+-----------------+-------+-------------+--------------------

Server             | Address         | Port  | Connections | Status

-------------------+-----------------+-------+-------------+--------------------

server1            | 192.168.4.51    |  3306 |           0 | Master, Running

server2            | 192.168.4.52    |  3306 |           0 | Slave, Running

-------------------+-----------------+-------+-------------+--------------------

2.7 验证数据读写分离

2.7.1 在主服务器上添加访问数据的连接用户(从服务器自动同步)

Mysql>create database gamedb;

Mysql>create table gamedb.a(id int,name char(10));

Mysql>grant select,insert on gamedb.* to [email protected]”%” identified by “123qqq...A”   //授权用户yaya66

2.7.2 客户端192.168.4.50连接到代理,访问数据

]# mysql -h192.168.4.57 -P4006 -uyaya66 -p123qqq...A  //连接到代理服务器

, mysql多实例

1.多实例的概念

在一台物理主机上运行多个数据库服务

2.目的: 节约成本; 提高硬件的利用率.

在主机192.168.4.56上实验.

思路: 装软件->配置文件->启动服务->查看服务状态->客户端访问.

1.装包

真机scp -r mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz [email protected]:/root/

56]# tar -xvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

56]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql  //改名为mysql

2.配置文件

#vim /etc/my.cnf   //该文件需要手动创建

[mysqld_multi]     //启用多实例

mysqld = /usr/local/mysql/bin/mysqld_safe        //指定进程文件路径

mysqladmin = /usr/local/myslq/bin/mysqladmin   //指定管理命令路径

user = root   //指定进程用户

[mysqld1]    //实例进程名称,实例1

datadir = /dir1    //数据库目录,需要手动创建

port=3307     //端口号

log-error = /dir1/mysqld1.err    //错误日志位置

pid-file = /dir1/mysqld1.pid     //进程pid号文件位置

socket = /dir1/mysqld1.socket   //指定socket文件的路径和名称

[mysqld2]   //实例进程名称,实例2

datadir = /dir2

port=3307

log-error = /dir2/mysqld2.err

pid-file = /dir2/mysqld2.pid

socket = /dir2/mysqld2.socket

# mkdir /dir1      //创建配置文件中指定的目录dir1

# mkdir /dir2      //创建配置文件中指定的目录dir2

3.启动服务

3.1第一次启动,会报错路径PATH没有定义. 需要定义变量路径及开机自启

# PATH=/usr/local/mysql/bin:$PATH

#echo “export PATH=/usr/local/mysql/bin:$PATH” >> /etc/bashrc

3.2 第二次启动,会报错提示有一个依赖包libaio需要安装

# yum -y install libaio*

3.3 第三次启动,会报错提示没有mysql这个账号

#useradd mysql

3.4 第四次启动,成功. 而且会在命令执行的末行产生一个初始密码(用于客户端登录)

3.5 查看目录/dir1内是否有产生文件

[[email protected] ~]# ls /dir1    //查看目录下内容

4.客户端访问,使用初始密码连接

#/usr/local/mysql/bin/mysql -uroot -p初始密码 -S sock文件   //使用初始密码登录

Mysql>alter user [email protected]”localhost” identified by ‘新密码’   //修改密码

原文地址:https://www.cnblogs.com/liusingbon/p/11060984.html

时间: 2024-11-06 03:29:29

数据库_读写分离-多实例应用的相关文章

基于 EntityFramework 的数据库主从读写分离服务插件

基于 EntityFramework 的数据库主从读写分离服务插件 1.       版本信息和源码 1.1 版本信息 v1.0 beta(2015-04-02),基于 EF 6.1 开发,支持 EF 6.1 之后的所有 EF6 版本. 1.2 开放源码地址 https://github.com/cjw0511/NDF.Infrastructure 关于该 EF 数据库主从读写分离服务核心源码位于文件夹: src\ NDF.Data.EntityFramework\MasterSlaves 文件

数据库表读写分离,分区

数据库分区分表以及读写分离 谈谈怎么实现Oracle数据库分区表 Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己学艺不精,最近作GPS方面的项目,处理的数据量达到了几十GB,为了满足系统的实时性要求,必须提高数据的查询效率,这样就必须通过分区,以解燃眉之急! 先说说分区的好处吧! 1) 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用: 2) 维护方便:如

为什么数据库要读写分离

1.什么情况下数据库需要读写分离? 数据库读写比例失衡. 2.为什么读写分离能提高系统性能? 在高并发情况下,由于并发读写会使用锁机制,本来应该是并行的操作,被变为了串行的操作.如果只有读操作,在绝大多数情况下不会被锁机制所干扰,是并行的操作,所以读写分离可以在某些场景中提高系统的效率.

利用oneproxy部署mysql数据库的读写分离

实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel5-linux64-v5.6-ga 下载地址:http://pan.baidu.com/s/1jGpL2o2 实验拓扑: 注意:本实验是之前mysql-proxy实验的拓展,因此大部分环境及设定是相同的,其中一.二步这里不再重复,具体请参考:利用mysql-proxy进行mysql数据库的读写分离

sql server 本地复制订阅 实现数据库服务器 读写分离(转载)

转载地址:http://www.cnblogs.com/echosong/p/3603270.html 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 一. 名词解释 1.复制的 机构组成(类比报纸流通): 1).发布服务器(报社出版) 生产维护数据源,审阅所有出版数据的更改 发送给 分发服务器(邮局) 2).分发服务器 (邮局) 分发服务器包

基于 EntityFramework 的数据库主从读写分离架构 - 目录

基于 EntityFramework 的数据库主从读写分离架构 回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目录: src\ NDF.Data.EntityFramework\MasterSlaves 基于 EntityFramework 的数据库主从读写分离架构 - 需求/功能概述 基于 EntityFramework 的数据库主从读写分离架构(1)- 原理概述和基本功能实现 基于 EntityFramework 的

MySQL数据库之读写分离

一.概述: MySQL数据库主从结构配置以后,正常情况下数据库的所有读写操作全部都在主数据库上面,从数据库仅仅作为数据备份使用,显然无法有效的使用服务器资源,那么实现读写分离的需求就不可避免. 二.拓扑图说明: 如上图所示,本文要实现的是读MySQL数据库的写入操作(增删改)等在Master服务器(192.168.4.10)上面实现,而对MySQL数据库的读取操作(查询)等在Slave服务器(192.168.4.20)上面完成. 如果在程序员编程时创建两个数据库连接Connection,在程序中

sql server 本地复制订阅 实现数据库服务器 读写分离

原文:sql server 本地复制订阅 实现数据库服务器 读写分离 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 一. 名词解释 1.复制的 机构组成(类比报纸流通): 1).发布服务器(报社出版) 生产维护数据源,审阅所有出版数据的更改 发送给 分发服务器(邮局) 2).分发服务器 (邮局) 分发服务器包括分发数据库,并且存储元数据.历史

Mycat - 实现数据库的读写分离与高可用【转】

文章地址:https://www.cnblogs.com/youzhibing/p/9553766.html 前言 开心一刻 上语文课,不小心睡着了,坐在边上的同桌突然叫醒了我,并小声说道:“读课文第三段”.我立马起身大声读了起来.正在黑板写字的老师吓了一跳,老师郁闷的看着我,问道:“同学有什么问题吗?”,我貌似知道了什么,蛋定的说了一句:“这段写的真好!我给大伙念念!”,老师还较真了:“你说说看,好在哪里?”,顿时我就无语了,脸黑着望向了同桌了,心想着:“这是个畜生啊!” 路漫漫其修远兮,吾将