MyCat 是基于服务器代理模式的数据库分库的中间件,原理是对 SQL 进行转发,具体的架构图如下:

我们知道,数据的拆分必然会对事物的原子性带来影响,那如果保证在分库的同时,又能保证事务的原子性呢?
MyCat 是基于服务器代理模式的数据库分库的中间件,原理是对 SQL 进行转发,具体的架构图如下:
我们知道,数据的拆分必然会对事物的原子性带来影响,那如果保证在分库的同时,又能保证事务的原子性呢?
除了上面的几个明显的问题外,还有索引的选择问题。MySQL 在执行一段 sql 的时候,会先决定使用哪一个索引,如果 选了一个性能比较差的索引,即使走了索引,也会带来性能问题。
对上面的第 4 条做一个例子说明:
事务要保证 ACID
的完整性必须依靠事务日志做跟踪:
每一个操作在真正写入数据数据库之前,先写入到日志文件中
如要删数据会先在日志文件中将此行标记为删除,但是数据库中的数据文件并没有发生变化。
只有在(包含多个 sql 语句)整个事务提交后,再把整个事务中的 sql 语句批量同步到磁盘上的数据库文件。
在事务引擎上的每一次写操作都需要执行两遍如下过程:
先写入日志文件中
写入日志文件中的仅仅是操作过程,而不是操作数据本身,所以速度比写数据库文件速度要快很多。
然后再写入数据库文件中
写入数据库文件的操作是重做事务日志中已提交的事务操作的记录
下载包
1 | https://repo.huaweicloud.com/mysql/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz |
解压
1 | tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz |
上篇博客说了 MVCC
解决了 MySQL 在可重复的隔离情况下幻读的问题,这篇博客主要探讨下,在修改的时候,如何解决幻读的问题。
MySQL 在控制并发的时候,同样采用了锁的机制。从读写上面分,有读写和写锁
,从结构上分,有行锁和表锁
.行锁又分为行锁、间隙锁和 Next Key
读锁 :共享锁 ,S 锁
写锁:排它锁 ,X 锁
select :不加锁,加锁后,也可以使用 select
查询数据
数据库的事务一共有四个特性:
原子性
:代表事务是一个动作,要么同时成功,要么同时失败一致性
:事务开始和结束数据完整性没有发生破坏隔离性
:两个事务动作相互独立,不受干扰持久性
:事务完成后,能够保存到数据库。那 MySQL 是如何保证这个四个特性的呢?
为了弄明白这几个特性,我们需要先看下事务的隔离级别。
在不借助DB引擎情况下,想完成数据的持久化存储,最简单的方法写一个文件存在本地,读取的时候加载文件到内存,然后进行筛选。 存储一个user
在本地。
1 | id|userName|userCode|sex|phoneNumber |
上面满足了我们的需求,看到这种数据格式,查询的时间复杂度为O(n).
B树和B+树是很多数据库索引采用的数据结构,为什么会使用B树,而不采用更常见的二叉树的呢?
举个例子,有这么几个数字:1,2,3,4,5,6,7,8,9,0
,分别生成AVL树,B树
原来一直使用mysql,没有自己真正的搭建,搭建也只是本地的连接,现在手上有两台电脑,想搭建一个主从的架构,在配置mysql的环节费了一点时间,其实都是很小的问题,今天记录下:
mysql 安装和启动
1 | mysql --install |
安装完之后,发现忘了记密码,可以到 mysql-8.0.16-winx64\data
中找到.err
文件,里面有初始密码 ,本地用localhost
连上之后可以自己修改密码。
远程连接
mysql 需要远程连接需要权限,错误的信息如下:
1 | 错误号码1130 |
执行下面的代码可以解决:
1 | use mysql; |
如果碰到无法更新,因为mysql 更新使用安全模式,需要关闭.
报错信息如下:
1 | Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. |
执行以下sql:
1 | SET SQL_SAFE_UPDATES = 0; |
连接远程的mysql时报错,原因时mysql8.0的加密方法变了。
1 | 错误号码2058 |
1 | ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 |
Update your browser to view this website correctly.&npsb;Update my browser now