这一小节会详细讲解文件的部分属性,包括文件类型,时间属性,索引节点,涉及到的操作系统命令包括ls stat touch 几个非常常见的linux命令。
文章目录
一、文件属性
文件属性可以通过 ls 或者 stat查看,这一小节会重点讲解文件的部分属性,包括inode节点,文件类型,时间属性,其他的属性信息会在后面讲用户 权限等知识点时重点讲解。
1.stat输出详解
通常可以用通过stat命令查看文件的详细属性。
[root@prometheus ~]# stat err
File: ‘err’
Size: 32 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 67161813 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-10-30 15:38:16.475156988 +0800
Modify: 2021-10-26 21:53:22.801670737 +0800
Change: 2021-10-26 21:53:22.801670737 +0800
Birth: -
可以看到这个属性包括:
- File: 文件名称
- Size: 文件的字节数(大小)
- Blocks: 文件占用的扇区个数,一个扇区的大小是512字节。
- IO Block:逻辑块的大小为4096个字节 。文件占用空间的最小单位。
- regular file : 文件类型,普通文件
- Device: 设备编号
- Inode: 索引节点
- Access: 文件权限
- 文件拥有者的 User ID uid
- 文件的 Group ID gid
- 链接数,即有多少文件名指向这个 inode
- 文件的时间戳,共有三个:ctime 指 inode 上一次变动的时间,mtime 指文件内容上一次变动的时间,atime 指文件上一次打开的时间。
2. ls -lih输出详解
Llinux系统的文件包括:索引节点、文件类型、文件权限、链接数、所属的用户和用户组、最近修改时间等。
[root@prometheus ~]# ls -l err
-rw-r--r-- 1 root root 32 Oct 26 21:53 err
flags | 功能 |
---|---|
第一列 | inode索引节点编号-系统文件首先通过文件名找到inode,通过它找到文件内容 |
第二列 | 文件类型和权限-10个字符,第一个为文件类型,后9个为文件权限 |
第三列 | 硬链接个数 |
第四列 | 文件所属用户(属主) |
第五列 | 文件所有用户组(属组) |
第六列 | 文件的大小 |
第七列 | 文件修改时间,默认月日时分,-access |
第八列 | 文件名 |
一、索引节点(了解)
第一列(101122449)就是这个文件的节点编号(inode),inode当中的内容就是记录这个文件的属性信息。
[root@zaishu zaishu]# ls -lih sed2
101122449 -rw-r--r-- 1 root root 80 Nov 2 11:36 sed2
文件系统会将文件的实际内容和属性分开存放:
文件的属性保存在 inode 中(i 节点)中,每个 节点都有自己的编号。每个文件各占用一个 inode。
可以将文件系统是一部数据字典,访问文件的数据内容的时候,需要先通过目录节点找到文件数据的位置。所以node 中记录着文件数据所在 block 块的编号;实际数据保存在 block 中。每个 block 都有属于自己的编号。通常文件可能会占用多个 block 块。
还有一个 super block(超级块)用于记录整个文件系统的整体信息,包括 inode 和 block 的总量、已经使用量和剩余量,以及文件系统的格式和相关信息等。
只要能找到文件 inode 所在的位置,自然就能知道这个文件存放数据的 block 号,从而找到文件的实际数据。整个过程如图 1 所示。
图 1 文件系统的数据存取示意图
图 1 中,文件系统先格式化出 inode 和 block 块,假设某文件的权限和属性信息存放到 inode 4 号位置,这个 inode 记录了实际存储文件数据的 block 号有 4 个,分别为 2、7、13、15,由此,操作系统就能快速地找到文件数据的存储位置。
这种管理文件的系统称为索引式文件系统,Linux 文件系统就属于索引式文件系统。
注意,inode 节点并不存储文件的文件名,因为文件名是文件所在目录的数据,所以会保存在上一级目录的 block 块中。后面讲权限命令的时候,要对文件的上一级目录拥有 w 权限,才能删除目录中的文件,就是因为文件名是保存在目录的 block 中的。
stat 查看inode 信息
可以stat使用inode查看节点信息,也就是属性信息。
[root@zaishu zaishu]# stat sed2
File: ‘sed2’
Size: 80 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 101122449 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-11-02 11:36:38.719911259 +0800
Modify: 2021-11-02 11:36:35.265911334 +0800
Change: 2021-11-02 11:36:35.265911334 +0800
Birth: -
二、Linux的文件类型
在linux系统中,可以说一切设备(包括目录、普通文件等)皆文件。文件类型包含有普通文件、目录、字符设备文件、块设备文件、符号链接文件、管道文件等等
1、 d(directory)表示目录
[root@yidong spool]# ls -l . |grep ^d
drwxr-xr-x. 2 root root 63 Aug 9 2019 anacron
drwx------. 2 root root 6 Aug 9 2019 cron
drwxr-xr-x. 2 root root 6 Apr 11 2018 lpd
drwxrwxr-x. 2 root mail 30 Oct 18 2019 mail
drwxr-xr-x. 2 root root 22 Aug 8 2019 plymouth
drwxr-xr-x. 16 root root 201 Oct 16 2019 postfix
2、 -(regular file) 普通文件
(1)、纯文本文件(ascll)文件内容可以直接读到的数据,例如:字母、数字、特殊字条串等,可以用cat命令读取的文,比如配置文件几乎都是这种类型。
[root@yidong test]# file 2
2: ASCII text
(2)、二进制文件(binary)linux中的命令程序就属于这个格式。例如ls 命令就是一个二进制文件。
[root@yidong test]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9, stripped
(3)、数据格式文件(data)有些程序运行过程中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件。例如:linux 在用户登录时都会将登录数据记录在/var/log/wtmp 那个文件内,该文件是一个数据文件,通过last命令读出来。/var/log/lastlog也是一个数据文件,可以使用lastlog命令读出来。cat命令读取会是乱码,因为他属于特殊格式的文件。file 命令也可以查看文件类型
[root@yidong test]# file /var/log/wtmp
/var/log/wtmp: data
3、l (link)链接文件(一般指得是软链接文件或符号链接)
[root@yidong test]# ls -lih /lib
80 lrwxrwxrwx. 1 root root 7 Oct 16 2019 /lib -> usr/lib
4、b(block)块设备和其它外围设备,是特殊类型的文件
[root@yidong test]# find /dev/ -type b | xargs ls -l | head -3
brw-rw---- 1 root disk 2, 0 Jun 15 14:26 /dev/fd0
brw-rw---- 1 root disk 8, 0 Jun 15 14:26 /dev/sda
brw-rw---- 1 root disk 8, 1 Jun 15 14:26 /dev/sda1
5、c(character)字符设备文件(一般是指串设备或终端设备等)
[root@yidong test]# find /dev/ -type c | xargs ls -l | head -3
crw-rw---- 1 root video 10, 175 Jun 15 14:26 /dev/agpgart
crw------- 1 root root 10, 235 Jun 15 14:26 /dev/autofs
crw------- 1 root root 248, 0 Jun 15 14:26 /dev/bsg/0:0:0:0
6、s(socket)套接字文件
当多个应用程序进程必须通过同一个 TCP协议端口传输数据,为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。
[root@yidong test]# find /dev/ -type s | xargs ls -l | head -3
srw-rw-rw- 1 root root 0 Jun 15 14:26 /dev/log
7、p(named pipe)管道文件
ps -elf //查看系统进程
管道,半双工,一端写一端读
[root@yidong spool]# mkfifo 1.pipe
[root@yidong spool]# ls -l
total 0
prw-r--r-- 1 root root 0 Jun 15 15:06 1.pipe
三、ls命令详解
ls 命令,是最常见的目录操作命令,其主要功能是显示当前目录下的内容。此命令的基本格式为:
Llinux系统的文件包括:索引节点、文件类型、文件权限、链接数、所属的用户和用户组、最近修改时间等。、
选项
选项 | 功能 |
---|---|
-a | 显示全部的文件,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一。 |
-A | 显示全部的文件,连同隐藏文件,但不包括 . 与 … 这两个目录。 |
-d | 仅列出目录本身,而不是列出目录内的文件数据。 |
-f | ls 默认会以文件名排序,使用 -f 选项会直接列出结果,而不进行排序。 |
-F | 在文件或目录名后加上文件类型的指示符号,例如,* 代表可运行文件,/ 代表目录,= 代表 socket 文件, |
-h | 以人们易读的方式显示文件或目录大小,如 1KB、234MB、2GB 等。 |
-i | 显示 inode 节点信息。 |
-l | 使用长格式列出文件和目录信息。 |
-n | 以 UID 和 GID 分别代替文件用户名和群组名显示出来。 |
-r | 将排序结果反向输出,比如,若原本文件名由小到大,反向则为由大到小。 |
-R | 连同子目录内容一起列出来,等於将该目录下的所有文件都显示出来。 |
-S | 以文件容量大小排序,而不是以文件名排序。 |
-t | 以时间排序,而不是以文件名排序。 |
–color=never | never 表示不依据文件特性给予颜色显示。 |
–color=always | always 表示显示颜色,ls 默认采用这种方式。 |
–color=auto | auto 表示让系统自行依据配置来判断是否给予颜色。 |
–full-time | 以完整时间模式 (包含年、月、日、时、分)输出 |
–time-style=long-iso | 以格式化输出时间进行输出,yyyy-mm-dd hh24:mi |
–time={atime,ctime,mtime} | 输出 access 时间或改变权限属性时间(ctime),而不是内容变更时间。 |
常见输出
示例
-a
[root@zaishu ~]# ls -a(包含隐藏文件.开头的文件,当前目录和上级目录)
. anaconda-ks.cfg .bash_logout .bashrc lamp-master .mysql_history sdcms_php_ee_2.4.2.zip web
.. .bash_history .bash_profile .cshrc lamp-master.zip .pki .tcshrc
-A
[root@zaishu ~]# ls -A(包含隐藏文件但不包括当前目录和上级目录)
anaconda-ks.cfg .bash_logout .bashrc lamp-master .mysql_history sdcms_php_ee_2.4.2.zip web
.bash_history .bash_profile .cshrc lamp-master.zip .pki .tcshrc
-d
[root@zaishu ~]# ls -d lamp-master(仅列出目录,不列出目录下的文件信息)
lamp-master
-f
[root@zaishu ~]# ls -f(不按名称进行排序,简而言之就是不排序)
. .bash_logout .bashrc .tcshrc .bash_history lamp-master sdcms_php_ee_2.4.2.zip web
.. .bash_profile .cshrc anaconda-ks.cfg lamp-master.zip .pki .mysql_history
-F
[root@zaishu ~]# ls -F(展示文件名的时候,带有展示符)
anaconda-ks.cfg ip.sh* lamp-master/ lamp-master.zip sdcms_php_ee_2.4.2.zip web/
-lh
[root@zaishu ~]# ls -lh(以K KB GB TB单位展示文件大小)
total 4.5M
-rw-------. 1 root root 1.4K Oct 8 2020 anaconda-ks.cfg
-rwxr-xr-x 1 root root 0 Oct 21 15:31 ip.sh
drwxr-xr-x. 6 root root 194 Oct 14 17:22 lamp-master
-rw-r--r--. 1 root root 220K Oct 14 15:41 lamp-master.zip
-rw-r--r--. 1 root root 4.3M Oct 14 16:47 sdcms_php_ee_2.4.2.zip
drwxr-xr-x. 2 root root 6 Oct 14 17:52 web
等其他例子,可以参照列表给的含义展示。
文件大小
当用文件属性查看文件大小的时候,可能跟实际占用磁盘空间的大小不一致
对于目录
目录的大小不要通过ls来查看,通常只显示8
实际目录占用磁盘空间是2.1G
[root@zaishu ~]# du -sh /usr/
2.1G /usr/
但如果用 ls 查看这个目录的时候,可以看到对于目录。空间提示的大小都是8。
[root@zaishu zaishu]# ls -lihd /usr/
67192091 drwxr-xr-x. 13 root root 155 Oct 8 2020 /usr/
对于文件
查看文件
[root@zaishu zaishu]# cat test
ab
文件实际占用磁盘空间大小。一个文件即使只有几个字节,也会占用一个文件块(Block size)大小,通常是4096bytes。
[root@zaishu zaishu]# du -sh test
4.0K test
属性中的文件大小,可以看到只有3个字节
[root@zaishu zaishu]# ls -lbi test
104148230 -rw-r--r-- 1 root root 3 Nov 9 14:04 test
四、时间属性
文件属性当中,包含三个文件时间
- Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
- Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
- Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
atime:访问时间,读取文件或者执行文件时会更改,命令如cat,vi
mtime:修改时间,文件的内容被改变时,就会更改,如vi
ctime:改变时间,文件的标签如属性、用户、用户组、权限、内容等被改变时,就会更改,如chmod,chown,vi
创建空文件的时候,三个属性值一样
[root@zaishu ~]# touch timetest
[root@zaishu ~]# stat timetest
File: ‘timetest’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 68114955 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-11-11 11:40:27.078052421 +0800
Modify: 2021-11-11 11:40:27.078052421 +0800
Change: 2021-11-11 11:40:27.078052421 +0800
Birth: -
当通过vi修改文件的时候,访问时间和修改时间变更,改变时间不会
[root@zaishu ~]# vi timetest
[root@zaishu ~]# stat timetest
File: ‘timetest’
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 68114958 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-11-11 11:43:42.797053622 +0800
Modify: 2021-11-11 11:43:42.797053622 +0800
Change: 2021-11-11 11:43:42.800053622 +0800
Birth: -
当查看文本内容的时候,只有访问时间会变更
[root@zaishu ~]# cat timetest
nihao
[root@zaishu ~]# stat timetest
File: ‘timetest’
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 68114958 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-11-11 11:44:45.855054009 +0800
Modify: 2021-11-11 11:43:42.797053622 +0800
Change: 2021-11-11 11:43:42.800053622 +0800
Birth: -
更改权限的时候只有,改变时间会变更
[root@zaishu ~]# chmod 444 timetest
[root@zaishu ~]# stat timetest
File: ‘timetest’
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 68114958 Links: 1
Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-11-11 11:44:45.855054009 +0800
Modify: 2021-11-11 11:43:42.797053622 +0800
Change: 2021-11-11 11:45:28.814054272 +0800
Birth: -
五、touch命令详解
touch命令用于创建文件和修改文件时间戳
[root@localhost ~]# touch [选项] 文件名
选项:
-a:只修改文件的访问时间;
-c:仅修改文件的时间属性(3 个时间属性都改变),如果文件不存在,则不建立新文件。
-d:后面指定时间,把文件的 atime 和 mtime 时间改为指定的时间。
-m:只修改文件的数据修改时间。
-t:后面指定时间,时间书写格式为 YYMMDDhhmm,把文件的 atime 和 mtime 时间改为指定的时间。
touch 命令可以只修改文件访问时间(atime),也可以只修改文件修改时间(mtime),但不能只修改文件改变时间(ctime)。因为,不论是修改访问时间,还是修改文件的数据时间,对文件来讲,状态都会发生改变。
【例 1】 touch 命令创建文件。
[root@zaishu zaishu]# touch test
[root@zaishu zaishu]# stat test
File: ‘test’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 101085613 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-11-11 13:56:47.273009222 +0800
Modify: 2021-11-11 13:56:47.273009222 +0800
Change: 2021-11-11 13:56:47.273009222 +0800
Birth: -
【例 2】 更改文件时间为当前时间。
如果文件已经存在,这个使用用touch这个文本,修改文件的时间属性全部为当前时间。
[root@zaishu zaishu]# touch test
[root@zaishu zaishu]# ll --time=atime test
-rw-r--r-- 1 root root 0 Nov 11 13:58 test
[root@zaishu zaishu]# stat test
File: ‘test’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 101085613 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-11-11 13:58:28.922009846 +0800
Modify: 2021-11-11 13:58:28.922009846 +0800
Change: 2021-11-11 13:58:28.922009846 +0800
【例 3】 更改文件的 atime 和 mtime 为指定时间
注意: ctime也会变更,但不会变为设定时间,更新为当前服务器的时间。
[root@zaishu zaishu]# touch -d 2020-01-01 12:12:12 test
[root@zaishu zaishu]# stat test
File: ‘test’
Size: 3 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 101800237 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-01-01 00:00:00.000000000 +0800
Modify: 2020-01-01 00:00:00.000000000 +0800
Change: 2021-11-11 14:01:06.421010812 +0800
Birth: -
[root@zaishu zaishu]# ll --time=atime test; ll --time=ctime test
-rw-r--r-- 1 root root 3 Jan 1 2020 test
-rw-r--r-- 1 root root 3 Nov 11 14:01 test
总结
这一小节会详细讲解文件的部分属性,包括文件类型,时间属性,索引节点,涉及到的操作系统命令包括ls stat touch 几个非常常见的linux命令。
友情链接
目录 | 章节 |
---|---|
版本说明 | 版本说明 |
安装MySQL规范 | 1 安装方式 2 安装用户 3 目录规范 |
MySQL 5.7 安装部署 | 1 操作系统配置 2 创建用户 3 创建目录 4 安装 5 配置文件 6 安装依赖包 7 配置环境变量 8 初始化数据库 9 重置密码 |
MySQL8 安装 | MySQL8 安装 |
源码安装 | 1 安装依赖包 2 生成源码包 3 创建用户 4 编译安装 5 配置数据库 6 连接mysql |
多实例部署及注意事项 | 1 多实例概念 2 多实例安装 3 mysqld_multi(多实例第二种安装方式) |
目录 | 章节 |
---|---|
生产中MySQL启动方式 | 1、 启动原理 2、参数文件默认位置及优先级 3、 以server方式启动 4、 mysqld_safe方式 5、 mysqld 方式 6、 systemctl 方式 |
关库 | 1、相关参数innodb_fast_shutdown 2、相关参数innodb_force_recovery 3、关闭mysql多种方式 |
常见MySQL启动失败案例 | 1.、目录权限 2、参数问题 3、配置文件 4、端口占用 5、误删二进制文件 6、undo表空间异常 7、binlog缓冲异常 |
MySQL启动失败排查方法 | MySQL启动失败排查方法 |
连接MySQL数据库的方式 | 连接MySQL数据库的方式 |
MySQL数据库用户安全策略 | 1、初始化数据库 2、修改密码 3、删除无用的用户 4、mysql_secure_installation |
找回丢失的用户密码 | 找回丢失的用户密码 |
目录 | 章节 |
---|---|
MySQL字符集和校验规则 | MySQL字符集和校验规则 |
查看字符集方法 | 1、查看mysql支持的字符集 2、查看字符集的校对规则 3、查看当前数据库的字符集 4、查看当前数据库的校对规则 |
MySQL字符集设置 | 1、字符集设置层级关系 2、设置MySQL服务器级别字符集 3、设置创建对象的字符集 |
字符集案例 | 1、常用字符集每个汉字占用字节多少 2、大小案例 |
插入中文乱码解决 | 插入中文乱码解决 |
数据库常见字符集及如何选择字符集 | 数据库常见字符集及如何选择字符集 |
生产中如何彻底避免出现乱码 | 生产中如何彻底避免出现乱码 |
目录 | 章节 |
---|---|
访问控制 | 1、连接验证(阶段一) 2、允许的连接 3、连接优先级 4、请求验证(阶段二) |
用户管理 | 1、新增用户 2、修改用户 3、删除用户 4、查看用户 |
密码管理 | 1、密码修改 2、密码过期设置 3、set password 4、密码过期策略 5、密码插件 |
MySQL用户权限管理 | 1、权限粒度 2、显示账户权限 3、显示账户非权限属性 4、库级权限 5、表级权限 6、列级权限 7、权限回收 |
资源限制 | 1、用户创建指定配额 2、修改配额 |
MySQL用户权限案例 | 1、断掉已清理的用户 2、忘记密码 3、如何禁止一个ip段的某个用户登录 4、创建开发账号 5、创建复制账号 6、创建管理员账号 |
目录 | 章节 |
---|---|
缓冲池 | 1、默认引擎 2、设置缓冲池大小 3、优化缓冲池 4、管理缓冲池 5、数据页类型 |
线程 | 1、IO线程 2、主线程 |
index page | index page |
insert buffer page | insert buffer page |
重做日志 | 重做日志 |
回滚日志 | 回滚日志 |
checkpoint,刷写脏页check point | checkpoint |
关键特性 | 1、插入缓冲 2、数据写入可靠性提升技术-doublewrite 3、自适应哈希索引-AHI |
innodb预读预写技术 | 预读写 |
目录 | 章节 |
---|---|
参数和配置文件 | 1、文件位置 2、查找参数 3、参数类型 4、参数修改 5、示例一 6、示例二 7、注意事项 |
错误日志文件 | 错误日志 |
通用日志 | 通用日志 |
慢查询日志 | 慢日志 |
binlog | 1、记录什么 2、用途 3、开启和参数配置 4、日志查看 5、日志刷新 6、删除日志 7、日志分析(mysqlbinlog) 8、利用二进制日志文件恢复误删的表 |
InnoDB存储引擎表空间文件 | 表空间文件 |
主从同步相关文件 | 主从同步文件 |
套接字文件 | 套接字文件 |
pid 文件 | pid 文件 |
redo log | 1、redo初识 2、日志组 3、与oracle redo的区别 4、相关参数 5、和binlog的区别 6、redo 缓冲区(innodb_flush_log_at_trx_commit) |
InnoDB存储引擎逻辑结构 | 1、表空间 2、段 3、区 4、页 |
表碎片清理 | 1、判断是否有碎片 2、整理碎片 |
表空间文件迁移 | 1、需求 2、操作 |
目录 | 章节 |
---|---|
常用语句 | 1、导入数据 2、库操作 3、表操作 4、数据操作 5、use性能影响 6、delete、truncate、drop的区别 7、SQL语句分类 |
数据类型与性能 | 1、整型 2、浮点型 3、字符串类型 4、日期类型 |
MySQL约束 | 1、unsigned/signed 2、not null 3、count(*) 为什么慢 4、default 5、unique 6、 auto_increment 7、primary key |
SQL编程高级 | 1、查询Syntax 2、查询列 3、where子句 4、group by … having子句 5、order by子句 6、limit子句(分页) 7、聚合函数 8、合并查询 9、多表查询 10、子查询 |
表的元数据库管理 | 1、统计应用库哪些表没有使用innodb存储引擎 2、如何查看表中是否有大对象 3、统计数据库大小 4、统计表的大小 |
目录 | 章节 |
---|---|
MySQL索引与二分查找法 | 1、什么是索引 2、索引的优缺点 3、索引的最大长度 4、二分查找法:折半查找法 5、mysql一张表存多少数据后,索引性能就会下降? |
剖析b+tree数据结构 | 1、B和B+树的区别 2、索引树高度 3、非叶子节点 4、指针 5、叶子节点 6、双向指针 7、b+tree插入操作 8、b+tree删除操作 |
相辅相成的聚集索引和辅助索引 | 1、聚集索引 2、聚集索引特点 3、聚集索引的优势 4、辅助索引 |
覆盖索引与回表查询 | 1、回表查询 2、覆盖索引 |
创建高性能的主键索引 | 1、主键索引创建的原则 2、主键索引的特点 3、为什么建议使用自增列作为主键 |
唯一索引与普通索引的性能差距 | 1、唯一索引特点 2、普通索引特点 3、唯一索引与普通索引的性能差距 |
前缀索引带来的性能影响 | 1、作用 2、坏处 |
如何使用联合索引 | 1、什么是联合索引 2、创建原则 3、排序 |
Online DDL影响数据库的性能和并发 | 1、5.6版本之前 2、新版本 3、online ddl语法 4、相关参数 5、示例 6、影响 |
pt-ocs原理与应用 | 1、安装pt-osc 2、pt-osc语法 3、案例 4、pt-osc原理 |
生产中索引的管理 | 1、建表时创建索引 2、建表后创建索引 3、查看索引 |
SQL语句无法使用索引的情况 | 1、where条件 2、联合索引 3、联表查询 4、其他情况 |
目录 | 章节 |
---|---|
最常用的STATISTICS和TABLES | 1、STATISTICS:用于存放索引的信息 2、TABLES:用于存放库表的元数据信息 |
判断索引创建是否合理 | 1、选择性 2、索引创建的建议 |
检查联合索引创建是否合理 | 1、联合索引创建是否合理 2、有了联合索引(a,b),还需要单独创建a索引吗? |
如何查找冗余索引 | 查找冗余索引 |
查找产生额外排序的sql语句 | 额外排序的sql语句 |
查找产生临时表的sql语句 | 临时表的sql语句 |
全表扫描的sql语句 | 全表扫描的sql语句 |
统计无用的索引 | 无用的索引 |
索引统计信息 | 1、存储索引统计信息 2、如何查看索引统计信息 |
目录 | 章节 |
---|---|
简单嵌套查询算法-simple nested-loop join | simple nested-loop join |
基于索引的嵌套查询算法-index nested-loop join | index nested-loop join |
基于块的嵌套查询算法- block nested-loop join | block nested-loop join |
Multi-Range Read | MRR |
bached key access join | BKA |
mysql三层体系结构 | 体系结构 |
Index Condition Pushdown | 索引条件下推 |
一条查询SQL语句是怎样运行的 | 查询SQL语句 |
一条更新SQL语句是怎样运行的 | 更新SQL语句 |
MySQL长连接与短连接的选择 | 1、相关参数 2、断开连接 |
执行计划explain | 1、语法 2、执行计划解析 |
目录 | 章节 |
---|---|
MySQL查询优化技术 | 概览 |
子查询优化 | 1、优化器自动优化 2、优化措施:子查询合并 3、优化措施:子查询上拉技术 |
外连接消除 | 外连接消除 |
生产环境不使用join联表查询 | 不使用join |
group by分组优化 | 1、group by执行流程 2、为什么group by要创建临时表 |
order by排序优化 | 排序优化 |
MySQL性能抖动问题 | 性能抖动问题 |
count(*)优化 | count(*)优化 |
磁盘性能基准测试 | 1、安装sysbench 2、生成文件 3、测试文件io 4、清除文件 |
MySQL基准测试 | 1、生成数据 2、测试(读) 3、测试(写) 4、清理数据 |
目录 | 章节 |
---|---|
认识事务 | 认识事务 |
事务控制语句 | 1、开启事务 2、事务提交 3、事务回滚 |
事务的实现方式 | 1、原子性 2、一致性 3、隔离性 4、持久性 |
purge thread线程 | purge thread线程 |
事务统计QPS与TPS | 1、QPS 2、TPS |
事务隔离级别 | 1、隔离级别 2、查看隔离级别 3、设置隔离级别 4、不同隔离级别下会产生什么隔离效果 |
事务组提交group commit | 组提交 |
事务两阶段提交 | 两阶段提交 |
MVCC多版本并发控制 | 1、MVCC原理 2、MVCC案例 |
目录 | 章节 |
---|---|
认识锁 | 1、锁的作用 2、加锁的过程 3、锁对象:事务 |
innodb行锁 | 1、行锁类型 2、共享锁(S锁) 3、排他锁(X锁) |
索引对行锁粒度的影响 | 1、行锁粒度有哪些 2、在RC隔离级别下不同索引产生的锁的范围 3、RR隔离级别下不同索引产生锁的范围 |
FTWRL全局读锁 | FTWRL全局读锁 |
innodb表锁 | innodb表锁 |
innodb意向锁与MDL锁 | 1、意向锁 2、意向锁作用 3、意向锁冲突情况 4、MDL锁 |
自增锁 | 自增锁 |
插入意向锁 | 插入意向锁 |
死锁 | 1、什么是死锁 2、相关参数 3、避免死锁 4、锁的状态 |
两阶段锁协议 | 两阶段锁协议 |
目录 | 章节 |
---|---|
1. 系统状态 | show status |
2. 慢查询 | 2.1 慢查询开启 2.2 简单示例 2.3 数据准备 |
3. mysqldumpslow | 3.1 语法 3.2 常见用法 |
4. pt-query-digest | 4.1 安装 4.2 语法选项 4.3 报告解读 4.4 用法示例 |
5. 优化工具(soar) | 5.1 安装配置 5.2 添加数据库 5.3 语句优化 |
15、备份恢复原理和实战_逻辑备份_物理备份_金融行业备份还原脚本
目录 | 章节 |
---|---|
1.生产中备份方式 | 1.1 物理备份与逻辑备份 1.2 联机与脱机备份 1.3 完整备份与增量备份 1.4 常用命令 |
2.mysqldump备份 | 2.1 相关参数 2.2 备份所有数据库 2.3 备份指定数据库 2.4 备份指定表 2.6 只导出结构 2.7 只导出数据 2.8 --tab(生成文本,类似load) 2.8 mysqldump原理 2.9 binlog异步备份 2.10 利用mysqldump全备及binlog恢复数据 |
3.xtrabackup | 3.1 Xtrabackup安装 3.2 原理 3.2 备份过程 3.4 恢复原理 3.3 相关参数 3.4 xtrabackup相关文件 3.5 备份示例 3.6 还原示例 |
4.binlog备份和恢复(数据库恢复) | 4.1 找到恢复时间点 4.2 增量恢复 |
5. 生产环境的备份恢复实战 | 5.1 实施部署 5.1.1 环境清单 5.1.2 备份目的 5.1.3 备份说明 5.1.4 实施步骤 5.1.5 全备脚本 5.1.6 差异备份脚本 5.2 实施部署备份还原 5.2.1 Xtraback还原全量/差异备份 5.2.2 故障点数据恢复 5.2.3 增量恢复 |
16、主从复制,gtid,并行复制_半同步复制_实操案例_常用命令_故障处理
目录 | 章节 |
---|---|
1.认识主从复制 | 1.1 主从复制原理深入讲解 1.2 主从复制相关参数 1.3.主从复制架构部署 1.4从库状态详解 1.5 .过滤复制 |
2 .gtid复制 | 2.1 什么是GTID? 2.2 GTID主从配置 2.5 gtid维护 2.4 GTID的特点 2.3 工作原理 2.4 gtid相关状态行和变量 |
3. 并行复制 | 3.1 延迟的原因 3.2 并行复制设置 3.3 查看并行复制 |
4. 增强半同步复制 | 4.1 异步复制 4.2 半同步复制 4.3 增强半同步复制 4.4 配置增强半同步 |
5. 案例 | 5.1 主库删除操作导致sql线程关闭案例 5.2 主从复制中断解决方案及案例 5.3 延迟复制 5.4 主库drop误操作利用延迟复制恢复案例 |
6 常用命令 | 6.1 启动线程 6.2 关闭线程 6.3 查看 6.4 重置 6.5 主从数据一致性校验 |
目录 | 章节 |
---|---|
MHA | 介绍 |
架构和相关组件 | 架构和相关组件 |
工作流程 | 工作流程 |
MHA高可用架构部署 | 1、环境准备 2、软件安装 3、创建软链接 4、配置各节点互信 5、节点免密验证 6、mha管理用户 7、配置文件 8、状态检查 9、开启MHA |
主库宕机故障模拟及处理 | 主库宕机故障模拟及处理 |
MHA VIP自动切换 | VIP自动切换 |
MHA主从数据自动补足 | MHA主从数据自动补足 |
目录 | 章节 |
---|---|
Atlas读写分离高性能架构 | 介绍 |
安装配置 | 安装配置 |
配置注解 | 配置注解 |
启动和关闭 | 启动和关闭 |
读写分离架构应用 | 读写分离架构应用 |
创建应用用户 | 创建应用用户 |
Atlas在线管理 | Atlas在线管理 |
读写分离避坑指南 | 读写分离避坑指南 |
目录 | 章节 |
---|---|
1.MyCAT分布式架构入门及双主架构 | 1.1 主从架构 1.2 MyCAT安装 1.3 启动和连接 1.4 配置文件介绍 |
2.MyCAT读写分离架构 | 2.1 架构说明 2.2 创建用户 2.3 schema.xml 2.4 连接说明 2.5 读写测试 2.6 当前是单节点 |
3.MyCAT高可用读写分离架构 | 3.1 架构说明 3.3 schema.xml(配置) 3.4 文件详解 3.4.1 schema标签 3.4.2 table标签 3.4.3 dataNode标签 3.4.4 dataHost 3.4 读写测试 3.5 故障转移 |
4.MyCAT垂直分表 | 4.1 架构 4.2 新建表 4.3 配置mycat 4.4 验证 |
5 MyCAT水平分表-范围分片 | 5.1 新建表 5.2 schema.xml 5.2 rule.xml 5.3 autopartition-long.txt 5.4 验证 |
6. MyCAT水平分表-取模分片 | 取模分片 |
7. MyCAT水平分表-枚举分片 | 枚举分片 |
8. MyCAT全局表与ER表 | 全局与ER表 |
8.1 全局表 | 8.1.1 特性 8.1.2 建表 8.1.3 配置 8.1.4 验证 8.1.5 分析总结(执行计划) |
8.2 ER表 | 8.2.1 特性 8.2.2 建表 8.2.3 配置 8.2.4 测试验证,子表是否跟随父表记录分片 8.2.5 分析总结(执行计划) |
目录 | 章节 |
---|---|
1. sysbench | 1.1 用途 1.2 安装 1.3 版本 1.4 查看帮助 1.5 测试过程阶段 |
2 CPU 性能测试 | 2.1 测试原理 2.2 查看帮助 2.3 测试 |
3. 内存性能测试 | 3.1 查看帮助信息 3.2 测试过程 |
4.磁盘性能基准测试 | 4.1 查看帮助 4.2 生成文件(prepare) 4.3 测试文件io(run) 4.4 结果分析 4.5 清除文件(cleanup) |
5. 线程测试 | 5.1 查看帮助信息 5.2 测试过程 |
6. MySQL基准测试 | 6.1 语法参数 6.2 生成数据 6.3 测试(读) 6.4 测试(写) 6.5 清理数据 |