msyql数据库主从架构
在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一。尤其是在大规模系统中,数据库集群已经成为必备的配置之一。集群的好处主要有:查询负载、数据库复制备份等。
MySQL数据库支持数据库的主从复制功能,因此在集群方面具有其独特的优势。众多国内外大型网站架构体系中,均采用了MySQL的主从数据库配置来实现查询负载、数据库热备等功能。本人在实际的Web项目中也涉及到这一需求,在此将如何配置实现做个简单小结。
1、实验环境
主库:Ubuntu IP:192.168.1.189
从库:Ubuntu IP:192.168.1.188
2、主数据库配置
A、修改配置文件/etc/mysql/my.cnf
任何一台MySQL数据库服务器都可以配置为集群主服务器,打开MySQL的配置文件,在配置文件中加入下面两行:
server-id = 1
log-bin = binlog_repl
binlog-do-db = test //设置需要同步的数据库,如果需要设置多个,则加入多条这行语句。
注:MySQL是通过二进制的日志文件来进行主从数据库复制的,所以必须开启日志功能,即上述的log-bin;另外在集群中,每台数据库服务器都需要指定一个唯一ID,这里我们指定为1。
给主数据库授权一个可以进行复制的用户,执行如下命令:
grant replication slave on *.* to 'slave'@'%' identified by '123';
执行成功后,重启MySQL。
B、锁定数据库并备份
mysql>flush tables with read lock;
备份数据库,传输到从数据库的数据目录下/var/lib/mysql;
C、用show master status;命令查看主数据库状态
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| binlog_repl.000001 | 106 | test | |
+--------------------+----------+--------------+------------------+
记录下File和Position的值。
D、主数据库解锁:unlock tables;
3、从数据库配置
A、修改配置文件/etc/mysql/my.cnf
在mysqld下加入如下代码:
server-id=2
master-host=192.168.1.189
master-user=slave
master-password=123
保存后,重启mysql服务。
B、设置slave参数,启动
在mysql下执行slave stop命令,停止slave服务;
mysql> change master to
-> master_host='192.168.1.189',
-> master_user='slave',
-> master_password='123',
-> master_log_file='binlog_repl.000001',
-> master_log_pos=106;
注意:这里的master_log_file,master_log_pos的值要和master的值一致。否则会无法同步。
执行slave start命令,启动服务。
4、验证同步
从数据库下运行show slave status \G;
如果能看到:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
说明已经成功启动了主从数据库的数据同步。
在主数据库中执行插入语句 insert into user values('kangqing','1234567890');
在从数据库中执行查询,可以看到主数据库插入的数据已经同步到从数据库表中。
本人在配置的时候出现过这样的问题:
Slave_IO_Running和Slave_SQL_Running的值都为Yes,但是无法和主数据库同步。在主数据库插入记录时,从数据库表无任何变化,执行show slave status时可以看到这样的错误:
Last_SQL_Error: Error 'Table 'user' is read only' on query. Default database: 'test'. Query: 'insert into user values('gaga','5436897')'
估计是权限问题。
解决方法:修改/var/lib/mysql文件夹的权限,对mysql.mysql用户赋予读写权限即可。
msyql数据库主从架构的更多相关文章
- Mysql数据库主从配置
一.为什么要使用数据库主从架构 一个网站损耗资源最厉害的就是数据库,最易崩溃的也是数据库,而数据库崩溃带来的后果是非常严重的.数据库分为读和写操作,在实际的应用中,读操作的损耗远比写操作多太多,因此读 ...
- 基于 EntityFramework 的数据库主从读写分离架构 - 目录
基于 EntityFramework 的数据库主从读写分离架构 回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目 ...
- 基于 EntityFramework 的数据库主从读写分离架构(1) - 原理概述和基本功能实现
回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目录: src\ NDF.Data.EntityFramew ...
- Mysql实现数据库主从复制架构
MySQL复制 (1)扩展方式: Scale Up ,Scale Out (2)MySQL的扩展 读写分离 复制:每个节点都有相同的数据集 向外扩展 二进制日志 单向 (3)复制的功用: 数据分布 负 ...
- MySQL 数据库主从复制架构
前文<MySQL 数据库事务与复制>分析了 MySQL 复制过程中如何保证 binlog 和事务数据之间的一致性,本文进一步分析引入从库后需要保证主从的数据一致性需要考虑哪些方面. 原生复 ...
- MySQL 主从架构配置详解
无论是哪一种数据库,数据的安全都是至关重要的,因此熟练掌握数据库的安全备份功能,是作为开发人员,特别是后端开发人员的一项必备技能.MySQL 数据库内建的复制功能,可以帮助我们对数据进行异地备份,读写 ...
- 实战项目——mysql主从架构的实现
一主一从 1.1 环境准备: centos系统服务器2台. 一台用户做Mysql主服务器, 一台用于做Mysql从服务器, 配置好yum源. 防火墙关闭. 各节点时钟服务同步. 各节点之间可以通过主机 ...
- Mysql实现企业级数据库主从复制架构实战
场景 公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司 ...
- 项目实战7—Mysql实现企业级数据库主从复制架构实战
Mysql实现企业级数据库主从复制架构实战 环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公 ...
随机推荐
- (六)6.10 Neurons Networks implements of softmax regression
softmax可以看做只有输入和输出的Neurons Networks,如下图: 其参数数量为k*(n+1) ,但在本实现中没有加入截距项,所以参数为k*n的矩阵. 对损失函数J(θ)的形式有: 算法 ...
- 【英语】Bingo口语笔记(64) - Beat系列
- NHibernate实例化类部分属性
NHibernate 为习惯SQL的开发者提供了接口,将查询的结果转变为持久化对象.虽然该方法不是很提倡. GetCurrentSession().CreateSQLQuery(sql) 参数sql就 ...
- 微信 ua
Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; GT-S5660 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, l ...
- Spring cron 表达式
前言: 最近做的项目有用到定时器,每周只在特定时间运行一次,考虑到Spring Task的简单易用性,就果断选择了,我是配置在配置文件里面,没有用注解@Scheduled,推荐配置,注解虽方便,但更改 ...
- concat、reverse面试题
1.concat数组连接 ,,]; ,,]; ,,]; alert(arr3.concat(arr1,arr2)); 结果:9,9,9,2,3,4,5,6,7 2.reverse将数组内容颠个个 ,, ...
- 学好Javascript是有方法的
先声明下噢,这篇文章不是自个儿写的,看着好,希望前端小孩们可以和我一起加油,大家都来借鉴借鉴吧- 首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门. 谈不上经验,都是一些教训. 这 ...
- PHP Header 缓存 --- Header 参数说明
1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Charset: 浏览器申 ...
- hdu 3537(博弈,翻硬币)
题意:给定了每个正面朝上的硬币的位置,然后每次可以翻1,2,3枚硬币,并且最右边的硬币开始必须是正面朝上的. 分析: 约束条件6:每次可以翻动一个.二个或三个硬币.(Mock Turtles游戏) 初 ...
- 8、NFC技术:让Android自动打开网页
创建封装Uri的NdefRecord public NdefRecord createUri(String uriString); public NdefRecord cre ...