MySQL 报错 Lost connection to MySQL server at 'reading initial communication packet'的解决办法

使用 mysql 连接远程服务器时报错,在百度和 google 查找都没有找到能解决问题的办法:

分析应该是以下两个原因导致的: 服务器有防火墙,禁止 3306 端口的访问。 用户没有授权远程访问。 第二个错误首先被排除掉了,根据多年的经验来看, ... 阅读更多

MySQL 中的聚簇索引、非聚簇索引、联合索引和唯一索引

一、索引类型

索引根据底层实现可分为 B-Tree 索引和哈希索引,大部分时候我们使用的都是 B-Tree 索引,因为它良好的性能和特性更适合于构建高并发系统。

根据索引的存储方式来划分,索引可以分为聚簇索引非聚簇索引。聚簇索引的特点是叶子节点包含了完整的记录行,而非聚簇索引的叶子节点只有所以字段和主键 ID 。

根据聚簇索引和非聚簇索引还能继续下分还能分为普通索引、覆盖索引、唯一索引以及联合索引等。

阅读更多

MySQL 中的 B+树索引和哈希索引

一、为什么要使用索引 索引是存储引擎用于快速找到记录的一种数据结构。索引对于数据库良好的性能十分关键,尤其是表中的数据量越来越大时,索引对性能的影响十分明显。 《高性能 MySQL 》中对索引的评价是:索引优化应该是对查询性能优化最有效的手段了,索引能够轻而易举将查询性能提高几个数量级。 以 innodb ... 阅读更多

数据库中的多版本并发控制 (MVCC)

一、概述 事务的出现给并发带来了巨大的便利性,它的 ACID 特性使得数据在并发时更加可靠。但是对于事务而言,它也会导致出现第一类丢失更新、第二类丢失更新、脏读、不可重复读以及幻读的问题,当然又出现了多种事务隔离级别来避免在产生这几类问题。那么隔离级别是如何实现的呢? 这就是多版本并发控制 (MVCC) 要 ... 阅读更多

MySQL 中的行锁、两阶段锁协议以及死锁

一、行锁和两阶段锁协议 行锁:顾名思义,就是对某一行加锁,修改的时候不会锁住整个表。相对于表锁来说,行锁的开销更大 (因为涉及到 MVCC 等需要保存快照),但是粒度更小,更适合于高并发场景。行锁是每个引擎单独实现的,但是并不是所有的引擎都实现了行锁。例如 MyISAM 就没有实现行锁,它只支持表锁,而 Inn ... 阅读更多

MySQL 两种引擎的区别

一、区别 区别一:MyISAM 是非事务安全的,InnoDB 是事务安全的 事务安全的特点为更安全,遇到问题会自动恢复或从备份加事务日志回复,如果更新失败,你的所有改变都变回原来。 非事务安全的优点为更快,所需的磁盘空间更小,执行更新时需要的内存更小,但是所有发生的改变都是永久的。 InnoDB 用于事务 ... 阅读更多

MySQL 中的 redolog/undolog/binlog

一、概述 binlog/redolog/undolog 都是 msql 中的日志模块,binlog 一般被称为二进制日志 (也成为归档日志),redolog 成为重做日志,undolog 称为回滚日志。其中二进制日志是 mysql 服务层实现的,redolog 和 undolog 是引擎层实现的。 binlog 记录的数据库 ... 阅读更多

使用 mysqldump 备份和数恢复数据库

一、备份数据库 mysql 自带了数据库备份工具 mysqldump 可以很方便的对数据库进行备份:

以上命令就完成了一次数据备份,备份后的数据保存在文件 db.sql,参数--all-databases 是指备份所有数据库。 如果只想备份特定 ... 阅读更多

给 MySQL 终端 prompt 设置颜色

昨天给 shell 的 prompt 设置了终端颜色,今天突然奇想能不能给 mysql 的 prompt 也设置颜色,网上查了一下还真有,在.bashrc 中添加以下设置即可开启颜色:

显示效果如下: 上面的代码中,\x1B 表示颜色设置开始,紧接着 [0 ... 阅读更多

MYSQL 基础之 SELECT 语句 (一):SELECT 的基本用法

一、 SELECT 介绍 1.1 SELECT SELECT 是数据库四大基本操作的一种,用于查询表中的数据信息。 基本的查询语法为:SELECT 列 1, 列 2, ... FROM 表,表示从表中取出对应的列。 SELECT 语句的用法多种多样,并且还有很多高级的操作 (如排序、分组以及联合等等),是增删改查 ... 阅读更多