189 8069 5689

mysql读写分离怎么用,mysql 读写分离

mysql 如何实现读写分离,用mysql-proxy 或者直接用php连接两个数据库?

Mysql主从配置,实现读写分离

创新互联服务项目包括永胜网站建设、永胜网站制作、永胜网页制作以及永胜网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,永胜网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到永胜省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

原理:主服务器(Master)负责网站NonQuery操作,从服务器负责Query操作,用户可以根据网站功能模特性块固定访问Slave服务器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。

具体实现:

1、在主从服务器上都装上MySQL数据库,windows系统鄙人安装的是mysql_5.5.25.msi版本,Ubuntu安装的是mysql-5.6.22-linux-glibc2.5-i686.tar

windows安装mysql就不谈了,一般地球人都应该会。鄙人稍微说一下Ubuntu的MySQL安装,我建议不要在线下载安装,还是离线安装的好。大家可以参考 这位不知道大哥还是姐妹,写的挺好按照这个就能装上。在安装的时候可能会出现几种现象,大家可以参考解决一下:

(1)如果您不是使用root用户登录,建议 su - root 切换到Root用户安装,那就不用老是 sudo 了。

(2)存放解压的mysql 文件夹,文件夹名字最好改成mysql

(3)在./support-files/mysql.server start 启动MySQL的时候,可能会出现一个警告,中文意思是启动服务运行读文件时,忽略了my.cnf文件,那是因为my.cnf的文件权限有问题,mysql会认为该文件有危险不会执行。但是mysql还会启动成功,但如果下面配置从服务器参数修改my.cnf文件的时候,你会发现文件改过了,但是重启服务时,修改过后的配置没有执行,而且您 list一下mysql的文件夹下会发现很多.my.cnf.swp等中间文件。这都是因为MySQL启动时没有读取my.cnf的原因。这时只要将my.cnf的文件权限改成my_new.cnf的权限一样就Ok,命令:chmod 644 my.cnf就Ok

(4)Ubuntu中修改文档内容没有Vim,最好把Vim 装上,apt-get install vim,不然估计会抓狂。

这时候我相信MySQL应该安装上去了。

2、配置Master主服务器

(1)在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。

目前有什么优秀的实现mysql读写分离的方案

mysql读者分离可以通过存储过程来实现。

除了数据库管理员外设置其他用户只有读数据表的权限,而写数据表则通过后存储过程实施,将运行存储过程的权限赋予普通用户就行了。或者干脆将所有的数据表权限收起来,应用程序端只能通过存储过程读写数据库,这样做更加彻底。

使用存储过程不仅可以很好的实现读写分离、便于编制和实现复杂的企业规则与业务逻辑,而且它可以有效的防止sql注入。当然这样会加大服务器端的系统开销,作为系统开发者应根据实际情况做出取舍。

mysql双主互备是怎样实现读写分离的

作为主服务器的Master,会把自己的每一次改动(每条sql语句)都记录到二进制日志Binarylog中。

作为从服务器Slave, 会用master上的账号登陆到 master上,读取master的Binarylog,写入到自己的中继日志 Relaylog。

然后从服务器自己的sql线程会负责读取这个中继日志,并执行一遍。

SpringBoot项目中实现MySQL读写分离

但我们仔细观察我们会发现,当我们的项目都是用的单体数据库时,那么就可能会存在如下问题:

为了解决上述提到的两个问题,我们可以准备两 (多) 台MySQL,一台主( Master )服务器,一台从( Slave )服务器,主库的 数据变更 (写、更新、删除这些操作) ,需要 同步 到从库中 (主从复制) 。而用户在访问我们项目时,如果是 写操作 (insert、update、delete),则直接操作 主库 ;如果是 读操作 (select) ,则直接操作从库,这种结构就是 读写分离 啦。

在这种读写分离的结构中,从库是可以有多个的

MySQL主从复制是一个 异步 的复制过程,底层是基于Mysql数据库自带的 二进制日志 功能。就是一台或多台MySQL数据库(slave,即 从库 )从另一台MySQL数据库(master,即 主库 )进行日志的复制,然后再解析日志并应用到自身,最终实现 从库 的数据和 主库 的数据保持一致。MySQL主从复制是 MySQL数据库自带功能,无需借助第三方工具。

二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制, 就是通过该binlog实现的。默认MySQL是未开启该日志的。

在环境搭建之前,我们需要准备好两台服务器,如果生活富裕使用的是两台云服务器的时候记得要开放安全组,即防火墙;如果是比狗子我生活好点但也是用的虚拟机的话,记得别分这么多内存启动蓝屏了(别问怎么知道的)

这里就不给大家展示数据库的安装和防火墙的操作了,这个我感觉网上好多资源都能够满足遇到的问题,在搭建主从库的时候有在网上见到过说MySQL版本要一致的,我也没太留意直接就在之前的MySQL上操作了,大家可以自己去验证一下。

服务器:192.168.150.100(别试了黑不了的,这是虚拟机的ip)

这里有三个方法都能重启MySQL,最简单的无疑就是一关一开:

登录进去MySQL之后才能够执行下面的命令,因为这是SQL命令,Linux不认识这玩意是啥。

这个时候还 不用退出MySQL ,因为下面的命令还是SQL命令,执行下面的SQL,可以拿到我们后面需要的两个重要参数。

执行完这一句SQL之后,==不要再操作主库!不要再操作主库!不要再操作主库!==重要的事情说三遍,因为再操作主库之后可能会导致红框中的 两个属性值会发生变化 ,后面如果发生了错误可能就和这里有那么两毛钱关系了。

服务器:192.168.150.101(别试了黑不了的,这也是虚拟机的ip)

这里要注意server-id和主库以及其他从库都不能相同,否则后面将会配置不成功。

这里有三个方法都能重启MySQL,最简单的无疑就是一关一开:

登录进去MySQL之后才能够执行下面的命令,因为这是SQL命令

参数说明:

这个时候还 不用退出MySQL ,因为下面的命令还是SQL命令,执行下面的SQL,可以看到从库的状态信息。通过状态信息中的 Slave_IO_running 和 Slave_SQL_running 可以看出主从同步是否就绪,如果这两个参数全为 Yes ,表示主从同步已经配置完成。

这可能是由于linux 是复制出来的,MySQL中还有一个 server_uuid 是一样的,我们也需要修改。 vim /var/lib/mysql/auto.cnf

这应该就是各位大牛设置server_id的时候不小心设置相同的id了,修改过来就行,步骤在上面的配置中。

这是狗子在操作过程中搞出来的一个错误……

出错的原因是在主库中删除了用户信息,但是在从库中同步的时候失败导致同步停止,下面记录自己的操作(是在进入MySQL的操作且是从库)。

在数据库中操作时,一定要注意当前所在的数据库是哪个,作为一个良好的实践:在SQL语句前加 USE dbname 。

Sharding-JDBC定位为 轻量级Java框架 ,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以 jar包 形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动, 完全兼容JDBC和各种ORM框架 。

使用Sharding-JDBC可以在程序中轻松的实现数据库 读写分离 。

Sharding-JDBC具有以下几个特点:

下面我们将用ShardingJDBC在项目中实现MySQL的读写分离。

在pom.xml文件中导入ShardingJDBC的依赖坐标

在application.yml中增加数据源的配置

这时我们就可以对我们项目中的配置进行一个测试,下面分别调用一个更新接口和一个查询接口,通过查看日志中记录的数据源来判断是否能够按照我们预料中的跑。

搞定!!!程序正常按照我们预期的成功跑起来了,成功借助ShardingJDBC在我们项目中实现了数据库的读写分离。

请问mysql读写分离原理是什么?如果我要实现mysql读写分离,需要怎么操作呢?(如果有具体教程就最好了)

在老版本的MySQL 3.22中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 3.23开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。

而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略是分为两种的,一种是共享表空间存储方式,还有一种是独享表空间存储方式。

当使用共享表空间存储方式的时候,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单 表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。

而当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。

mysql读写分离,我怎么设置让那一台读哪一台写,还是说设置好主从默认就是主是读

根据要求配置MySQL主从备份、读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记;

现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用。

为了避免不必要的麻烦,主从服务器MySQL版本尽量保持一致;

环境:192.168.0.1 (Master)

192.168.0.2 (Slave)

MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i686) using readline 5.1

server-id = 1 //数据库ID号, 为1时表示为Master,其中master_id必须为1到232–1之间的一个正整数值;

log-bin=mysql-bin //启用二进制日志;

binlog-do-db=data //需要同步的二进制数据库名;

binlog-ignore-db=mysql //不同步的二进制数据库名;这个同步后听说很麻烦,我没有同步;

log-bin=/var/log/mysql/updatelog //设定生成的log文件名;

log-slave-updates //把更新的记录写到二进制文件中;

slave-skip-errors //跳过错误,继续执行复制;

2、建立复制所要使用的用户;

mysqlgrant replication slave on *.* to identified by '********'

3、重启mysql;

/usr/bin/mysqladmin -uroot shutdown;

/usr/bin/mysql_safe

4、现在备份Master上的数据;

锁定后我直接tar.gz data这个库文件;

mysqlFLUSH TABLES WITH READ LOCK;

cd /var/lib/mysql

tar data.tar.gz data

接着直接执行了远程scp;

scp ./data.tar.gz

5、登录Slave数据库服务器,修改my.cnf;

server-id = 3 //2已经被用在另一个服务器上了,如果以后要再加Slave号接着往后数就OK了;


分享文章:mysql读写分离怎么用,mysql 读写分离
文章分享:http://cdxtjz.cn/article/hspped.html

其他资讯