Redis Cluster 介绍与实战
一、Redis Cluster 分布式分片集群Redis Cluster简介
Redis集群是一个可以在多个Redis节点之间进行数据共享的设施(installation)。
Redis集群不支持那些需要同时处理多个键的Redis命令,因为执行这些命令需要在多个Redis节点之间移动数据,并且在高负载的情况下,这些命令将降低Redis集群的性能,并导致不可预测的行为。
Redis集群通过分区(partition)来提供一定程度的可用性(availability):即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。
Redis集群有将数据自动切分(split)到多个节点的能力。
Redis Cluster中槽(slot)的概念
Redis Cluster中一共有16384个槽位,他们的编号为0、1、2、3……16382、16383,这些槽是虚拟的。
这些槽位会平均分配给Redis Cluster中的每个master节点,当有某个key被映射到某个master负责的槽,那么这个master负责为这个key提供服务。
当需要在redis集群中写入一个key ...
MySQL 异步复制
一、异步复制原理
主库有一个线程:binlog dump线程。
从库有两个线程:IO线程、SQL线程。
1.异步复制原理
用户对数据的修改进行提交,然后Master(主库)把所有数据库的变更写进binlog中,主库线程binlog dump把binlog内容推送给Slave(从库)。
注意:
启动复制通道后,第一次是从库告诉主库要从哪个位置点或者gtid位执行,然后主库启动一个dump线程,向从库推数据。
从库I/O线程读取主库上的binlog信息,并把binlog写到本地中继日志 (relay log)中。
从库SQL线程读取并解析ralay log内容,按照主库中的提交顺序进行事务回放,写 入本地数据文件中,这样就实现了数据在主从实例之间的同步。
注意:
主库在写入binlog并落盘之后,通知dump线程有新的 binlog 产生,并发送到从库中。然后主库并不理会从库是否接收到binlog,而是自顾自地照常进行事务的提交,如下图。
2.异步复制过程
从库通过执行change master to 语句连接主库,提供了连接的用户一切条件(user 、pas ...
MySQL 高可用架构之 MHA
一、MHA高可用介绍1.简介 MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover 功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,MHA会通过与其它从节点获取额外信息来避免一致性方面的问题。MHA还提供了master节点的在线切换功能,即按需切换master/slave节点。
MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品 TMHA, 目前已支持一主一从。
2.MHA工作原理 当Master出现故障时,通过对比slave之间I/O线程读取master binlog的位置,选取最接近的slave做为 latest slave。 其它slave通过与latest slave对比生成差异中继日志 ...
MySQL 备份与恢复
一、数据库备份的类型备份类型分类按照服务器的运行状态,可分为:冷备、热备、温备。
冷备:数据库处于停机状态下进行备份。
热备:数据库处于运行状态下备份,在热备期间,数据库的读写操作均可正常进行。
在mysql中,MyISAM存储引擎不支持热备,InnoDB存储引擎支持热备。
温备:数据库处于运行状态下备份,但是在温备期间数据库只能进行读操作,不能进行写操作
按照备份后的内容量,可分为:全备、增备、差异备份。
全量备份:对所有数据进行一个完全的备份。
增备备份:对上一次”备份”以后变化的数据的备份。
差异备份:对上一次”全量备份”以后变化的数据的备份。
按照备份的方式,可分为:逻辑备份、物理备份。
逻辑备份:将数据从数据库中导出,并将导出的数据进行存档备份。
物理备份:直接备份数据库所对应的数据文件。物理备份相对逻辑备份来说,性能更强。
备份方式优缺点MySQL进行全量数据备份时,可以选择物理备份(如 Xtrabackup)和逻辑备份(如 mysqldump)两种方式。这两种备份方法各有优缺点,适用于不同的场景:
物理备份 ...
MySQL 日志管理
一、日志简介MySQL数据库中支持多种日志类型,通过分析日志,我们可以优化数据库性能,排除故障,甚至能够还原数据,本节内容将带你了解MySQL数据库中的日志管理
二、日志分类
错误日志
查询日志
慢查询日志
二进制日志
中继日志
事务日志
滚动日志
三、日志详解1.错误日志1.1 错误日志作用
记录服务器运行中产生的错误信息
记录服务器启动、停止时产生的信息
如果服务器启动了复制进程,复制进程的信息也会被记录
记录event错误日志
1.2 查看错误日志查看mysql中错误日志的位置
在mysql命令行中查看
mysql> show variables like "log_error";
在bash命令行中使用mysqladmin查看
[root@db01 ~]# mysqladmin -uroot -p123 variables | grep -w "log_error"
1.3 设置错误日志修改mysql的主配置文件/etc/my.cnf,在服务端中添加如下配置:
[root@db01 ...
MySQL 事务详解
1.事务介绍
在 MySQL 中只有使用了 InnoDB 存储引擎的数据库或表才支持事务
事务主要针对DML语句(UPDATE、INSERT、DELETE)
一组数据操作执行步骤,这些步骤被视为一个工作单元
用于对多个语句进行分组
可以在多个客户机并发访问同一个表中的数据时使用
在事务中,所有步骤都执行成功或都执行失败
如果所有步骤正常,则执行
如果步骤出现错误或不完整,则取消
2.事务ACID特性
原子性(Atomicity,或称不可分割性)
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性(Consistency)
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变。
隔离性(Isolation,又称独立性)
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致 ...
MySQL 表空间管理
1.表空间概念InnoDB 存储引擎可将所有数据存放于 ibdata* 的共享表空间,也可将每张表存放于独立的 .ibd 文件的独立表空间.共享表空间以及独立表空间都是针对数据的存储方式而言的。
MySQL从5.5版本以后出现共享表空间概念,在MySQL5.6版本中默认使用的是独立表空间。
表空间的管理模式的出现是为了数据库的存储更容易扩展。
共享表空间
某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名为:ibdata1 初始化为10M。
独立表空间
每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
2.共享表空间2.1 查看共享表空间
物理文件查看
$ cd /usr/local/mysql/data$ ll ibdata*-rw-rw---- 1 mysql mysql 79691776 Jun 17 16:26 ibdata1
在数据库命令 ...
MySQL 多种结构介绍
MySQL 体系结构
连接层
验证用户身份
提供了两种连接方式(TCP/IP连接、socket连接)
建立与SQL层交互的线程
SQL 层
接收连接层传过来的SQL语句,如DDL、DML和存储过程等。并把结果返回给连接层。
验证SQL语句的语法、语义。
解析器:解析SQL语句,最终生成执行计划。
优化器:从多个执行计划中选出最优的一条。
执行器:执行选出来的最优计划。
建立一个与存储引擎层交互的线程。
执行SQL获取存储引擎层传来的数据,结构化成表格。
如果有缓存的化,会把数据写入到缓存。
记录执行日志(binlog)
存储引擎层
接收SQL层传过来的执行语句
与磁盘交互,进行数据的读取、存储,将数据返回给SQL层
MySQL 逻辑结构
库
表:元数据 + 真实数据行
元数据:列 + 其他属性
列:列名 + 数据类型 + 约束(非空、主键、默认值)
MySQL 物理结构数据物理结构mysql最底层就是数据文件,可以手动在data目录下创建目录,数据库中就能看到这个库。
MySQL的最底层的物理结构是数据文件,也就是说与存储引擎层打交道的文件,是 ...
MySQL 用户及权限管理
1.mysql用户的定义在mysql中,用户由用户名和主机域组成的。
1.1 用户名的写法
mysql> create user test1@'localhost';
注意:用户名不要以数字、符号开头,如若一定要这么写,给用户名加上引号才能创建用户。
1.2 用户中的主机域的写法
单个主机地址写法
127.0.0.1::1localhostdb01
范围型主机地址写法
172.16.1.%172.16.%.%172.%.%.%%172.16.1.5%172.16.1.0/255.255.255.0
其中%代表所有,如172.16.1.%即代表172.16.1.0~172.16.1.255这个范围内的所有地址
2.用户管理2.1 创建用户
mysql> CREATE USER test2@'localhost' IDENTIFIED BY '123';Query OK, 0 rows affected (0.00 sec)
2.2 查看数据库中得所有用户
mysql> SELECT User,H ...
PHP 无法连接 MySQL 问题
问题描述今天在一台新的服务器中安装了php7.2,mysql-5.6后。测试用php连接mysql时发现无论如何php都连接不上mysql数据库,排除了数据库账号错误,并且php已经安装了连接数据库的mysqlnd扩展。
错误排查使用php连接测试脚本,查看到底是什么错误导致php连接不上mysql的。
以下是php连接mysql的php测试脚本db-connect-test.php
<?php$dbname = 'mysql';$dbuser = 'root';$dbpass = '1234';$dbhost = 'localhost';$connect=mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);// 检查连接if (!$connect){ die("连接错误: " . mysqli_connect_error());} die("连接成功...\n");?>
...