mysql读写分离

MySQL相关知识

一世执手 提交于 2020-03-12 11:58:06
目录 1. MySQL背景介绍 2. MySQL发展史 3. MySQL分支介绍 4. MySQL的优点 5. MySQL数据库组成 6. MySQL的原理 7. MySQL执行流程 8. MySQL日志 9. MySQL事务、锁、索引与SQL优化 ## MySQL背景介绍 随着互联网企业的兴起,例如阿里巴巴、网易、Yahoo、Facebook等大型互联网公司的推动,目前Mysql已经成为世界上最流行的数据库,并一步步开始占领了原有商业数据库的市场,目前Mysql已经成为互联网公司甚至部分传统公司的首选数据库。 ## MySQL发展史 最初为AB公司的产品,Mysql5.0及之前的版本均由AB公司管理,在2008年的时候AB公司被Sun公司收购,Mysql也就归属到了Sun公司下,但在Sun还没待多久,Sun公司就被Oracle公司收购了,此期间诞生了一个Sun向Oracle的过渡版本:Mysql5.5(5.1-5.5之间没有发布过版本),直至5.6Mysql就彻底归属于Oracle公司旗下了,从Oracle收购Mysql以来,Mysql发展的速度及新的功能越来越强大,逐步向Oracle靠拢,如:表空间、redo、undo分离、隐藏索引,至2019年,Mysql8.0.15已经GA(官方发布稳定版本),整体发展过程如下(AB版本不做加入): 5.1 → 5.5 → 5.6 → 5

笔记:MySQL相关知识

孤街醉人 提交于 2020-03-12 09:03:48
MySQL背景介绍 MySQL发展史 MySQL分支介绍 MySQL的优点 MySQL数据库组成 MySQL的原理 MySQL执行流程 MySQL日志 MySQL事务、锁、索引与SQL优化 MySQL背景介绍 随着互联网企业的兴起,例如阿里巴巴、网易、Yahoo、Facebook等大型互联网公司的推动,目前Mysql已经成为世界上最流行的数据库,并一步步开始占领了原有商业数据库的市场,目前Mysql已经成为互联网公司甚至部分传统公司的首选数据库。 MySQL发展史 最初为AB公司的产品,Mysql5.0及之前的版本均由AB公司管理,在2008年的时候AB公司被Sun公司收购,Mysql也就归属到了Sun公司下,但在Sun还没待多久,Sun公司就被Oracle公司收购了,此期间诞生了一个Sun向Oracle的过渡版本:Mysql5.5(5.1-5.5之间没有发布过版本),直至5.6Mysql就彻底归属于Oracle公司旗下了,从Oracle收购Mysql以来,Mysql发展的速度及新的功能越来越强大,逐步向Oracle靠拢,如:表空间、redo、undo分离、隐藏索引,至2019年,Mysql8.0.15已经GA(官方发布稳定版本),整体发展过程如下(AB版本不做加入): 5.1 → 5.5 → 5.6 → 5.7 → 8.0 MySQL分支介绍 MySQL 是一个开源数据库

MySQL优化(6):分表和读写分离

╄→尐↘猪︶ㄣ 提交于 2020-03-11 17:28:32
分表 通常指:通过应用程序层,将数据划分到不同的表中进行存储 对比分区,分区是在服务器层完成的分区算法 分表会导致客户端明显的改变,在服务器端出现结构相同的多张表,甚至可以把多张表分到不同的服务器上 以账单表为例:数据库可能会有这样的情况 create table bill201710( id int unsigned auto_increment primary key, user_ud int unsigned, amount decimal(10,2), date int ); create table bill201711( id int unsigned auto_increment primary key, user_ud int unsigned, amount decimal(10,2), date int ); create table bill201712( id int unsigned auto_increment primary key, user_ud int unsigned, amount decimal(10,2), date int ); 而是又Java等代码进行处理,区分应该选择哪一张表,根据传递的时间参数进行划分 实际中,有一个比较麻烦的问题, 主键ID的问题 ,理论上ID是不可以重复的 解决方案: (1)代码层面,手动做一个自增ID,不稳妥

mysql主从库配置

浪子不回头ぞ 提交于 2020-03-11 02:31:10
1.场景描述 废话不多说了,简单记录下mysql主从库配置,实现读写分离,还可以设置延迟同步,防止误操作,起到备库作用。。 2.解决方案 简单记录下如何快速对现有mysql库实现读写分离,至于可能遇到的数据不一致等问题,后续再解释,本次只介绍如何快速对现有mysql做主从库配置/读写分离。 2.1 原理 MySQL主从库或者读写分离配置,其实依靠的mysql自带二进制日志。 简单说就是在主库上做的动作(增删改)会全部记录在主库中的日志中,从库通过查询主库(主库要给权限)日志,然后照着主库日志再从库上操作一遍,这样就实现了主从复制。 说明: 两台服务器,每个上面一个数据库,主库ip:192.168.10.14,从库ip:192.168.10.16 2.2 主库设置(192.168.10.14): (1)root下进入mysql用户 su - mysql (2) 修改配置文件my.cnf ,并给从库设置日志查询权限。 vi /etc/my.cnf server_id =14 log-bin=mysql-bin binlog_do_db=test :wq #软件老王,重启mysql service mysqld restart 创建用户并赋权: GRANT replication slave ON *.* TO 'slave'@'%' identified by 'laowang';

Linux MySQL数据库集群实战 读写分离

扶醉桌前 提交于 2020-03-10 20:39:54
一、MySQL读写分离 Mysql的主从复制和Mysql的读写分离两者有着紧密联系,首先部署主从复制,只有主从复制完了,才能在此基础上进行数据的读写分离。 Master数据库处理事务性增、删除、修改、更新操作(CREATE、INSERT、UPDATE、DELETE),而让Slave数据库处理SELECT操作,MYSQL读写分离前提是基于MYSQL主从复制,这样可以保证在Master上修改数据,Slave同步之后,WEB应用可以读取到Slave端的数据。 简单来说 ,读写分离就是只在主服务器上写,只在从服务器上读,基本的原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的改变更新同步到集群中的从数据库。 基于中间代理层实现 代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有两个代表性程序。 (1)mysql-proxy 为mysql开源项目,通过其自带的lua脚本进行SQL判断,虽然是mysql的官方产品,但是mysql官方不建议将其应用到生产环境 (2)Amoeba (变形虫)由陈思儒开发,曾就职与阿里巴巴,该程序由java语言进行开发,阿里巴巴将其应用于生成环境,它不支持事物和存储过程 如果业务压力不是很大的时候要做读写分离,取决于硬盘读取的性能,客户才满意, 读库(配置低),写库(配置高

MySQL事务的实现原理

扶醉桌前 提交于 2020-03-09 08:47:27
天天用事务,但是你知道MySQL事务的实现原理吗? 1. 开篇 相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等。今天想跟大家一起研究下事务内部到底是怎么实现的,在讲解前我想先抛出个问题: 事务想要做到什么效果? 按我理解,无非是要做到可靠性以及并发处理。 可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候需要保障数据的操作前后的一致,想要做到这个,我需要知道我修改之前和修改之后的状态,所以就有了undo log和redo log。 并发处理:也就是说当多个并发请求过来,并且其中有一个请求是对数据修改操作的时候会有影响,为了避免读到脏数据,所以需要对事务之间的读写进行隔离,至于隔离到啥程度得看业务系统的场景了,实现这个就得用MySQL 的隔离级别。 下面我首先讲实现事务功能的三个技术,分别是日志文件(redo log 和 undo log),锁技术以及MVCC,然后再讲事务的实现原理,包括原子性是怎么实现的,隔离型是怎么实现的等等。最后在做一个总结,希望大家能够耐心看完 redo log与undo log介绍 mysql锁技术以及MVCC基础 事务的实现原理 总结 2 redo log 与 undo log介绍 1. redo

mysql 集群 数据同步

旧街凉风 提交于 2020-03-07 14:34:32
mysql集群配置在网站负载均衡中是必不可少的; 首先说下我个人准备的负载均衡方式;   1、通过nginx方向代理来将服务器压力分散到各个服务器上;   2、每个服务器中代码逻辑一样;   3、通过使用redis缓存来保存内存中数据,使用redis同步功能来同步不同服务器内存中的数据;   4、在通过mysql的集群配置来实现数据库数据同步; 这里我整理了几种数据同步方式; 一:主从服务器同步;   顾名思义:主服务器负责数据的增删改查,从服务器负责同步数据;   主服务器建立二进制文件;每产生语句变化或磁盘变化写入日至;   从服务器读主服务二进制日至;将读到的日至转成从服务的relaylog,从服务读取relaylog同步主主服务器;   主服务器建立授权复制账号;   从服务器利用账号来监听主服务器;   步骤:   1、首先需要至少两台服务器,我这边118.xxx.xxx.1(主),118.xxx.xxx.2(从)两台服务器;两台搭建mysql方式不同,一台安装mysql,和mysql-server;一台通过直接安装mariadb方式;没什么影响;   2、主服务器修改/etc/my.cnf;     #在[mysqld]下添加,建立二进制日至 #server-id一般用服务器后一位 server-id=1 log-binary=mysql-bin #监听变化方式

Windows上模拟MySQL主从设置,读写分离

折月煮酒 提交于 2020-03-07 04:08:34
对于互联网架构来说,MySQL读写分离是很重要的。所以今天我决定在我自己的电脑上模拟下。 我一开始本以为可以用一个MySQL服务,建立两个数据库来模拟。但是网上的教程都是修改MySQL的配置文件,所以我只好另外又安装了个MySQL。为了避免不必要的麻烦,我们尽量保证MySQL版本一致。 我第一个MySQL是msi安装包安装的,在网上我下载的第二个MySQL是压缩包形式的。所以,我们从配置这种解压好的MySQL开始,如果自己会配置的话请忽略。 为了避免命令冲突,第二个MySQL我并不打算配置环境变量。以MySQL5.7版本为例,新建my.ini配置文件和data文件夹用来保存数据(有的版本带有此文件或文件夹,那就请可以直接编辑这个文件了)。 [mysqld] port = 3307 basedir=F:/mysql5.7 datadir=F:/mysql5.7/data max_connections=200 character-set-server=utf8 default-storage-engine=INNODB sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysql] default-character-set=utf8 然后把上面的内容复制到my.ini文件里面,注意port,端口号不要冲突

数据库优化方案

感情迁移 提交于 2020-03-06 20:02:31
目录 一、 选择合适的存储引擎: InnoDB 1.1 怎样将现有的 MyISAM 数据库转换为 InnoDB: 1.2 为每一个表分别创建 InnoDB FILE: 二、 保证从内存中读取数据。讲数据保存在内存中 2.1 足够大的 innodb_buffer_pool_size 2.1.1 怎样确定 innodb_buffer_pool_size 足够大。数据是从内存读取而不是硬盘? 2.1.2 server上是否有足够内存用来规划 2.2 数据预热 2.3 不要让数据存到 SWAP 中 三、定期优化重建数据库 四、降低磁盘写入操作 4.1 使用足够大的写入缓存 innodb_log_file_size 4.2 innodb_flush_log_at_trx_commit 4.3 避免双写入缓冲 五、提高磁盘读写速度 六、充分使用索引 6.1 查看现有表结构和索引 6.2 加入必要的索引 6.2.1 比方,优化用户验证表: 6.2.2 使用自己主动加索引的框架或者自己主动拆分表结构的框架 七、分析查询日志和慢查询日志 八、激进的方法。使用内存磁盘 九、用 NOSQL 的方式使用 MYSQL 十、其它 MYSQL 应该是最流行了 WEB 后端数据库。WEB 开发语言近期发展非常快,PHP, Ruby, Python, Java 各有特点,尽管 NOSQL 近期越來越多的被提到

PostgreSQL与MySQL对比

强颜欢笑 提交于 2020-03-06 11:59:32
都属于开放源码的一员,性能和功能都在高速地提高和增强。MySQL AB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。 PostgreSQL : 免费 原则: 对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会日益提供。而随着硬件性能的飞速提高,速度也不再是什么太大的问题。 1 架构对比 MySQL: 多线程 PostgreSQL: 多进程 多线程架构和多进程架构之间没有绝对的好坏,例如oracle在unix上是多进程架构,在windows上是多线程架构。 PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。 pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因) 2 对存储过程[1]及事务的支持能力 1) MySQL对于无事务的MyISAM表,采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新,而PostgreSQL不存在这样的问题。 2) PostgreSQL支持存储过程