mysql读写分离

mysql主从复制要点

拈花ヽ惹草 提交于 2019-12-07 15:41:59
普通文件的数据同步 1.NFS 网络共享可以同步数据 2samba共享数据 3定时任务或守护进程结合rsync +scp 4 inotify +rsync触发实时数据同步 5ftp数据同步 6ssh key+scp/rsync mysql支持单向,双向,链式级联,实时异步复制,一台服务器充当服务器,而另一个服务器充当 slave服务器 应用场景有利于数据库架构的健壮性,提升访问速度和易于管理 主从服务器互为备份 主从服务器架构的设置,可以大大的加强数据库架构的健壮性,例如:当主服务器 出现问题时,我们可以人工或自动的切换到服务器继续提供服务 这类似我们前面课程中的nfs存储数据通过inotify+rsync同步备份到备份的nfs 非常类似,只不过mysql的同步方案,是其自带的工具 非人为的硬件,服务故障,对于人为的drop,delete无能为力 主从服务器读写分离承担网站的压力 主从服务器架构可通过php(大型网站),java或代理软件(mysqlproxy,amoeba)对用户的请求实现读写分离,则通过 从服务器上仅仅用户的select查询请求,降低用户 门户网站分布式dbproxy,(读写分离,hash负债均衡,健康检查) 一主多从 如何实现mysql主从读写分离 1.通过程序实现读写分离性能,效率最佳,推荐

MySQL大表优化方案

☆樱花仙子☆ 提交于 2019-12-07 15:07:34
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在 千万级 以下,字符串为主的表在 五百万 以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用 TINYINT 、 SMALLINT 、 MEDIUM_INT 作为整数类型而非 INT ,如果非负则加上 UNSIGNED VARCHAR 的长度只分配真正需要的空间 使用枚举或整数代替字符串类型 尽量使用 TIMESTAMP 而非 DATETIME , 单表不要有太多字段,建议在20以内 避免使用NULL字段,很难查询优化且占用额外索引空间 用整型来存IP 索引 索引并不是越多越好,要根据查询有针对性的创建,考虑在 WHERE 和 ORDER BY 命令上涉及的列建立索引,可根据 EXPLAIN 来查看是否用了索引还是全表扫描 应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段 字符字段只建前缀索引 字符字段最好不要做主键 不用外键,由程序保证约束 尽量不用 UNIQUE

mysql router使用配置

早过忘川 提交于 2019-12-06 16:42:47
mysql router使用配置 参考资料: https://www.jianshu.com/p/7fc8d77bea59 一、架构图 介绍: MySQL Router是处于应用client和dbserver之间的轻量级代理程序,它能检测,分析和转发查询到后端数据库实例,并把结果返回给client。是mysql-proxy的一个替代品。 Router实现读写分离,程序不是直接连接数据库IP,而是固定连接到mysql router。MySQL Router对前端应用是透明的。应用程序把MySQL Router当作是普通的mysql实例,把查询发给MySQL Router,而MySQL Router会把查询结果返回给前端的应用程序。 从数据库服务器故障,业务可以正常运行。由MySQL Router来进行自动下线不可用服务器。程序配置不需要任何修改。 主数据库故障,由MySQL Router来决定主从自动切换,业务可以正常访问。程序配置不需要做任何修改。 二、读写分离原理 MySQL Router接受前端应用程序请求后,根据不同的端口来区分读写,把连接读写端口的所有查询发往主库,把连接只读端口的select查询以轮询方式发往多个从库,从而实现读写分离的目的。读写返回的结果会交给MySQL Router,由MySQL Router返回给客户端的应用程序。 三、实验环境 编号 主机名 IP

mysql数据库的主从复制

萝らか妹 提交于 2019-12-06 15:17:20
数据库的主从复制 MySQL中的复制功能用于将数据变更从一个服务器(Master)复制到一个或多个从属服务器(Slave) 主服务器将更改写入二进制日志(binlog),从服务器请求主服务器的binlog并应用其内容日志文件的格式影响从属服务器应用更改的方式 MySQL支持基于语句的(statment)、基于行的(row)以及混合格式的(mixed)日志格式 在复制过程中主服务器使用基于行(row)的日志格式可以大幅降低主服务器和从属服务器数据不一致的情况发生 从属服务器数量 一个主服务器可以具有的从属服务器数量理论上没有限制 每个额外的从库都会占用主库较少资源,所以在生产环境配置从库时应该仔细斟酌每个从库的必要性 最佳从属服务器数量取决于许多因素:模式大小、写入次数、主服务器和从属服务器的相对性能以及 CPU 和内存可用性等因素 网络故障对主从复制的影响 MySQL中的复制功能在网络故障时暂停工作,在网络故障恢复后复制工作将继续进行 每个从属服务器跟踪其已经处理了多少日志并在网络连接恢复时自动继续处理,此行为是自动的,不需要特殊配置 主库和从库的关系 Master和Slave是一对多的关系(MySQL5.5,5.6版本) 一个Master主服务器可以对应多个Slave从属服务器,一个Slave从属服务器只能有一个Master主服务器

mysql主从延迟原理

不想你离开。 提交于 2019-12-06 13:50:23
一、mysql主从同步原理   主库针对读写操作,顺序binlog,从库单线程去主库读“写操作的binlog”,从库取到binlog在本地原样执行(随机写),来保证主从数据逻辑上一致。   mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率比较高,下一步问题来了,slave的slave_sql_running线程将主库的DDL和DML操作在slave实施。DML,DDL的IO操作是随机的,不能顺序的,成本高很多,还又跨年slave上的其他查询产生lock,由于slave_sql_running也是单线程的,所以一个DDL卡住了,需要执行一段时间,那么所有之后的DDL会等待这个DDL执行完才会继续执行,这就导致了延迟。   由于master可以并发,Slave_sql_running线程却不可以,所以主库执行DDL需求一段时间,在slave执行相同的DDL时,就产生了延迟。 二、主从同步延迟产生原因   当主库的TPS并发较高时,产生的DDL数量超过Slave一个sql线程所能承受的范围,那么延迟就产生了,当然还有跨年与slave的大型query语句产生了锁等待   首要原因:数据库在业务上读写压力太大,CPU计算负荷大,网卡负荷大,硬盘随机IO太高  

MySQL读写分离技术

懵懂的女人 提交于 2019-12-06 10:58:28
文章转载自: https://www.jianshu.com/p/8903423f78ed 一、读写分离(主从复制) 主从复制: 当主服务器有写入(insert / update / delete)语句时候,从服务器自动获取 读写分离: insert / update / delete 语句操作一台服务器, select 操作另一个服务器 从库生成两个线程,一个 I/O 线程,一个 SQL 线程; I/O 线程去请求主库的 binlog ,并将得到的 binlog 日志写到 relay log (中继日志)文件中; 主库会生成一个 log dum 线程,用来给从库 I/O 线程传 binlog; SQL 线程,会读取 relay log 文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致 二、bin-log 日志 概念: binlog 即二进制日志,它记录了数据库上的所有改变并以二进制的形式保存在磁盘中,它可以用来查看数据库的变更历史、数据库备份和恢复、Mysql 的复制(主从数据库的复制)。 简单概括:binlog 日志就是记录 MySQL 数据库增 / 删 / 改 SQL语句 作用:实现主从复制、灾难恢复 1.开启 binlog 日志 步骤1:打开 配置文件 vi /etc/my.cnf 并修改 步骤2:重启服务 步骤3:登录 MySQL 查看 bin-log

MYSQL主从复制--传统方式

安稳与你 提交于 2019-12-06 04:56:30
目录 0、MYSQL主从复制概述 1、主从复制的作用 2、主从复制存在的问题 3、主从复制问题的解决办法 4、主从复制的原理(面试必问) 1、MYSQL主从复制-传统方式 1、环境准备 2、 Master 配置 3、 Slave 配置 4、报错&解决 我叫张贺,贪财好色。一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛学和跑步。 个人博客: 传送阵 笔者微信:zhanghe15069028807 0、MYSQL主从复制概述 1、主从复制的作用 用于备份,避免影响业务 实时灾备,用于切换故障 读写分离,提供查询服务 2、主从复制存在的问题 当主压力大时,复制会延时 主库宕机后,数据可能会丢失 3、主从复制问题的解决办法 并行复制,解决延时问题 全同步复制,要求5.7版本以上 4、主从复制的原理(面试必问) 我们在上一节做逻辑备份恢复时,其实就是手动将故障前的操作通过 二进制日志再执行一次,就是这么简单,而主从复制的原理就是将这个过程给自动化了,不用我们手工参与了。 1、主数据库必须要将二进制日志打开,这样主的操作才会被记录下来。 2、从数据库实时侦测主数据库二进制文件的变化,一旦变动之后,就会立马将操作下载到本地的中继日志里面。 3、从数据库进程然后再读取中继日志,将其重放备库的数据库之上。 1、MYSQL主从复制-传统方式 1

Mysql实现数据库主从复制架构

倾然丶 夕夏残阳落幕 提交于 2019-12-06 03:27:59
MySQL复制 (1)扩展方式: Scale Up ,Scale Out (2)MySQL的扩展 读写分离 复制:每个节点都有相同的数据集 向外扩展 二进制日志 单向 (3)复制的功用: 数据分布 负载均衡读 备份 高可用和故障切换 MySQL升级测试 一主多从   主从复制原理 (1)从库生成两个线程,一个I/O线程,一个SQL线程; (2)i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog; (3)SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致; 主从复制线程: 主节点: dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events 从节点: I/O Thread:向Master请求二进制日志事件,并保存于中继日志中 SQL Thread:从中继日志中读取日志事件,在本地完成重放 跟复制功能相关的文件: master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等 relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地replay

Mysql访问中间件--Atlas初探

帅比萌擦擦* 提交于 2019-12-05 22:36:47
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性,目前该项目在360公司内部得到了广泛应用。 Atlas主要有以下功能 读写分离 从库负载均衡 IP过滤 自动分表(目前只支持在同一个库中进行分表) DBA可平滑上下线DB 自动摘除宕机的DB Atlas相对于官方MySQL-Proxy有以下优势 将主流程中所有Lua代码用C重写,Lua仅用于管理接口 重写网络模型、线程模型 实现了真正意义上的连接池 优化了锁机制,性能提高数十倍 下面就一步一步带大家去安装和使用Atlas数据库中间件 安装Atlas-sharding_1.0.1-el6.x86_64.rpm包 大家可以从++ https://github.com/Qihoo360/Atlas/releases++网站下载到最新的rpm包,推荐使用rpm包安装 加密应用访问mysql数据库访问密码 安装好Atlas的rpm包之后,进入到/usr/local/mysql-proxy/bin目录,使用下面命令对密码进行加密 ./encrypt tony ANDKNNypf4k= <--这个就是加密后的密码 配置Atlas配置文件(/usr/local/mysql

ProxySQL读写分离代理

大城市里の小女人 提交于 2019-12-05 18:07:37
实现ProxySQL反向代理Mysql读写分离 简介 ProxySQL相当于小型的数据库,在磁盘上有存放数据库的目录;ProxySQL用法和mysql相似 启动ProxySQL后会有两个监听端口; 6032:ProxySQL的管理端口 6033:ProxySQL对外提供服务的端口 注意:ProxySQL区分主从节点,是通过主从服务器配置文件中的read_only来区分的;哪个服务器配置文件中有read_only,哪台服务器就是从节点,所以从节点必须加read_only选项 ProxySQL下载地址 实现ProxySQL代理最少准备4台机器 https://github.com/sysown/proxysql/releases/tag/v2.0.8 主节点配置: [root@master ~]# vim /etc/my.cnf [mysqld] server-id=17 log-bin [root@master ~]# systemctl restart mariadb [root@master ~]# mysql -e 'grant replication slave on *.* to repluser@"192.168.38.%" identified by "centos";' #授权并且创建用于主从同步的账号 [root@master ~]# mysql -e 'grant