一、MySQL数据库管理系统
1、mysql的 4个默认数据库
information_schema: information_schema:是一个信息数据库,它保存着关于MySQL服务器所维护的所有其他数据库的信息。(如数据库名,数据库的表,表栏的数据类型与访问数限等)
Mysql:主要负责存储数据库的用户、权限设置、关键字等mysal自己需要使用的控制和管理信息
performance_schema:主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为 PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表
Sys: Sys库所有的数据源来自: performance_schema。目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解DB的运行情况
2、给数据升顺
格式: select 编号,姓名,职业 from yg order by 编号 asc/desc;
例:以编号进行排序
mysql> select 编号,姓名,职业 from yg order by 编号;
+--------+-----------+-----------------+
| 编号 | 姓名 | 职业 |
+--------+-----------+-----------------+
| 100 | 小光 | 云计算 |
| 170 | 小乔 | IT工程师 |
| 180 | 小i | 云计算 |
| 200 | 王小红 | java工程师 |
| 220 | 小V | 云计算 |
| 666 | 蒙牛 | apache工程师 |
+--------+-----------+-----------------+
6 rows in set (0.00 sec)
3、count统计、group by 分组
例:统计总共
mysql> select count(*) from yg;
+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (0.00 sec)
例:统计有多少个重复的
mysql> select 职业,count(*) from yg group by 职业;
+-----------------+----------+
| 职业 | count(*) |
+-----------------+----------+
| apache工程师 | 1 |
| IT工程师 | 1 |
| java工程师 | 1 |
| 云计算 | 3 |
+-----------------+----------+
4 rows in set (0.00 sec)
4、事务(transaction)
保证成批操作要么完全执行,要么完全不执行,维护数据的完整性。简单来说就是要么成功要么不成功
5、一个事务中包含多条 SQL 语句,在 SQL 语句之间的关系
1、事务可以是 N 条 SQL 语句(N >= 0)
2、不是所有数据库存储引擎都支持事务,InnoDB 存储引擎支持事务处理
6、数据库事务特性(ACID)
事务特性 | 作用 |
原子性(Atomic) | 事务的所有操作,要么全部完成,要么全部不完成,不会结束在某个中间环节 |
一致性(Consistency) | 事务开始之前和事务结束之后,数据库的完整性限制未被破坏 |
隔离性(Isolation) | 当多个事务并发访问数据库中的同一数据时,所表现出来的是相互关系 |
持久性(Durability) | 事务完成之后,所做的修改会进行持久化保存,不会丢失 |
7、 事务并发不进行事务隔离
脏读 | 事务 A 读到未提交事务 B 修改的数据,如果此时事务 B 中途执行失败回滚,那么此时事务 A 读取到的就是脏数据 |
不可重复读 | 同一个事务中,对同一份数据读取的结果不一致(针对某一个数据) |
幻读 | 同一个事务中,同一个查询多次返回的结果不一样(针对表中总行) |
区别 | |
脏读和不可重复读 | 脏读是事务读取了还未提交事务的更新数据。不可重复读是同一个事务中,几次读取的数据不同 |
不可重复读和幻读 | 都是在同一个事务中,前者是几次读取数据不同,后者是几次读取数据整体不同 |
8、隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交(read-uncommitted) | 是 | 是 | 是 |
不可重复读(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
9、MySQL常用的索引
普通索引 | |
唯一索引 | |
联合索引 | |
全文索引 | |
空间索引 |
index | 加速查找 |
10、在什么时候二进制日志会重新生成?
1、重启mysql服务:systemctl restart mysql
2、进入myslq数据库:输入 flush logs; 刷新二进制日志
3、配置my.cnf 文件,根据二进制文件大小进行切割
11、二进制日志的格式
由 bin_log_format={ statement | row | mixed
statement | 基于语句,记录生成数据的语句 |
缺点:在于如果当时插入信息为函数生成,有可能不同时间点执行结果不一样 | |
row | 基于行数据 |
缺点:有时候数据量会过大 | |
mixed | 混合模式 |
mysql自行决定何时使用statement, 何时使用row 模式 |
查看当前二进制日志记录格式
mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
修改二进制日志记录格式
mysql> set session binlog_format=statement; #修改二进制记录格式
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)
注意:5.7之前是statement,5.7之后是基于行的
12、工作原理
1、innobackupex 在启动 xtrabackup 进程后,会一直等 xtrabackup 备份完 InnoDB 文件,方式就是等待 xtrabackup_suspended_2 这个文件被创建出来
2、xtrabackup 在备完 InnoDB 数据后,就在指定目录下创建出这个文件,然后等这个文件被 innobackupex 删除
3、innobackupex 检测到文件 xtrabackup_suspended_2 被创建出来后,就继续往下走
4、innobackupex 在备份完非 InnoDB 表后,删除 xtrabackup_suspended_2 这个文件,这样就通知 xtrabackup 可以继续了,然后等 xtrabackup_log_copied 被创建
5、xtrabackup 检测到 xtrabackup_suspended_2 文件删除后,就可以继续往下了
13、mysql的主从复制工作原理
主从复制过程中,主服务器有一个工作线程 I/O dump线程,从服务器有两个工作线程I/O 线程和SQL 线程
主库把接收的SQL请求记录到自己的binlog日志中,从库的 I/O 线程去请求主库的 binlog 日志,并将 binlog 日志写到中继日志中,然后从库重做中继日志的 SQL 语句。主库通过I/O dump 线程给从库 I/O 线程传送 binlog 日志
1、异步复制
异步复制是MySQL默认的复制方式,主库写入binlog日志后即可成功返回客户端,无须等待binlog日志传递给从库的过程,但是一旦主库宕机,就有可能出现丢失数据的情况
2、半同步复制
MySQL默认的复制方式是异步复制,但是当主库宕机,在高可用架构坐准备切换,就会造成新的主库丢失数据的现象
MySQL5.5版本之后引入了半同步复制,但是主从服务器必须同时安装半同步复制插件。在该功能下,确保从库接收完成主库传递过来的binlog内容已经写入到自己的relay log后才会通知主库上面的等待线程。如果等待超时(超时参数:rpl_semi_sync_master_timeout),则关闭半同步复制,并自动转换为异步复制模式,直到至少有一台从库通知主库已经接收到binlog信息为止
14、经常用Redis做什么?
redis:常用做数据库的缓存,缓存一些经常被客户端访问的数据,从而减轻后端数据库的压力
15、redis的持久化
实现方式
RDB持久化:将Reids在内存中的数据库记录定时dump到磁盘上,类似于快照功能
AOF持久化:append only file:原理是将Reids的操作日志以追加的方式写入文件,近似实时性
二者的区别
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储
16、搭建redis群集需要几个主从复制
3对:即3主3从