2.文件属性讲解(类型 时间属性 ls touch stat)

这一小节会详细讲解文件的部分属性,包括文件类型,时间属性,索引节点,涉及到的操作系统命令包括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: -

可以看到这个属性包括:

  1. File: 文件名称
  2. Size: 文件的字节数(大小)
  3. Blocks: 文件占用的扇区个数,一个扇区的大小是512字节。
  4. IO Block:逻辑块的大小为4096个字节 。文件占用空间的最小单位。
  5. regular file : 文件类型,普通文件
  6. Device: 设备编号
  7. Inode: 索引节点
  8. Access: 文件权限
  9. 文件拥有者的 User ID uid
  10. 文件的 Group ID gid
  11. 链接数,即有多少文件名指向这个 inode
  12. 文件的时间戳,共有三个: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仅列出目录本身,而不是列出目录内的文件数据。
-fls 默认会以文件名排序,使用 -f 选项会直接列出结果,而不进行排序。
-F在文件或目录名后加上文件类型的指示符号,例如,* 代表可运行文件,/ 代表目录,= 代表 socket 文件,
-h以人们易读的方式显示文件或目录大小,如 1KB、234MB、2GB 等。
-i显示 inode 节点信息。
-l使用长格式列出文件和目录信息。
-n以 UID 和 GID 分别代替文件用户名和群组名显示出来。
-r将排序结果反向输出,比如,若原本文件名由小到大,反向则为由大到小。
-R连同子目录内容一起列出来,等於将该目录下的所有文件都显示出来。
-S以文件容量大小排序,而不是以文件名排序。
-t以时间排序,而不是以文件名排序。
–color=nevernever 表示不依据文件特性给予颜色显示。
–color=alwaysalways 表示显示颜色,ls 默认采用这种方式。
–color=autoauto 表示让系统自行依据配置来判断是否给予颜色。
–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

四、时间属性

文件属性当中,包含三个文件时间

  1. Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
  2. Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
  3. 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、MySQL在金融互联网行业的企业级安装部署

目录章节
版本说明版本说明
安装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(多实例第二种安装方式)

2、mysql启动关闭原理和实战_及常见错误排查

目录章节
生产中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
找回丢失的用户密码找回丢失的用户密码

3、MySQL字符集和校对规则

目录章节
MySQL字符集和校验规则MySQL字符集和校验规则
查看字符集方法1、查看mysql支持的字符集
2、查看字符集的校对规则
3、查看当前数据库的字符集
4、查看当前数据库的校对规则
MySQL字符集设置1、字符集设置层级关系
2、设置MySQL服务器级别字符集
3、设置创建对象的字符集
字符集案例1、常用字符集每个汉字占用字节多少
2、大小案例
插入中文乱码解决插入中文乱码解决
数据库常见字符集及如何选择字符集数据库常见字符集及如何选择字符集
生产中如何彻底避免出现乱码生产中如何彻底避免出现乱码

4、史上最详细的Mysql用户权原理和实战_生产案例

目录章节
访问控制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、创建管理员账号

5、InnoDB引擎原理和实战_通俗易懂

目录章节
缓冲池1、默认引擎
2、设置缓冲池大小
3、优化缓冲池
4、管理缓冲池
5、数据页类型
线程1、IO线程
2、主线程
index pageindex page
insert buffer pageinsert buffer page
重做日志重做日志
回滚日志回滚日志
checkpoint,刷写脏页check pointcheckpoint
关键特性1、插入缓冲
2、数据写入可靠性提升技术-doublewrite
3、自适应哈希索引-AHI
innodb预读预写技术预读写

6、MySQL文件详解_物理结构_逻辑结构_原理和案例

目录章节
参数和配置文件1、文件位置
2、查找参数
3、参数类型
4、参数修改
5、示例一
6、示例二
7、注意事项
错误日志文件错误日志
通用日志通用日志
慢查询日志慢日志
binlog1、记录什么
2、用途
3、开启和参数配置
4、日志查看
5、日志刷新
6、删除日志
7、日志分析(mysqlbinlog)
8、利用二进制日志文件恢复误删的表
InnoDB存储引擎表空间文件表空间文件
主从同步相关文件主从同步文件
套接字文件套接字文件
pid 文件pid 文件
redo log1、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、操作

7、SQL编程开发与优化事项

目录章节
常用语句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、统计表的大小

8、MySQL索引原理和案例

目录章节
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、其他情况

9、information_schema和sys中性能查看

目录章节
最常用的STATISTICS和TABLES1、STATISTICS:用于存放索引的信息
2、TABLES:用于存放库表的元数据信息
判断索引创建是否合理1、选择性
2、索引创建的建议
检查联合索引创建是否合理1、联合索引创建是否合理
2、有了联合索引(a,b),还需要单独创建a索引吗?
如何查找冗余索引查找冗余索引
查找产生额外排序的sql语句额外排序的sql语句
查找产生临时表的sql语句临时表的sql语句
全表扫描的sql语句全表扫描的sql语句
统计无用的索引无用的索引
索引统计信息1、存储索引统计信息
2、如何查看索引统计信息

10、MySQL优化器算法与执行计划

目录章节
简单嵌套查询算法-simple nested-loop joinsimple nested-loop join
基于索引的嵌套查询算法-index nested-loop joinindex nested-loop join
基于块的嵌套查询算法- block nested-loop joinblock nested-loop join
Multi-Range ReadMRR
bached key access joinBKA
mysql三层体系结构体系结构
Index Condition Pushdown索引条件下推
一条查询SQL语句是怎样运行的查询SQL语句
一条更新SQL语句是怎样运行的更新SQL语句
MySQL长连接与短连接的选择1、相关参数
2、断开连接
执行计划explain1、语法
2、执行计划解析

11、MySQL查询优化

目录章节
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、清理数据

12、事务原理和实战

目录章节
认识事务认识事务
事务控制语句1、开启事务
2、事务提交
3、事务回滚
事务的实现方式1、原子性
2、一致性
3、隔离性
4、持久性
purge thread线程purge thread线程
事务统计QPS与TPS1、QPS
2、TPS
事务隔离级别1、隔离级别
2、查看隔离级别
3、设置隔离级别
4、不同隔离级别下会产生什么隔离效果
事务组提交group commit组提交
事务两阶段提交两阶段提交
MVCC多版本并发控制1、MVCC原理
2、MVCC案例

13、锁的原理和应用

目录章节
认识锁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、锁的状态
两阶段锁协议两阶段锁协议

14、慢查询原理和实战_快速优化方法_优化工具

目录章节
1. 系统状态show status
2. 慢查询2.1 慢查询开启
2.2 简单示例
2.3 数据准备
3. mysqldumpslow3.1 语法
3.2 常见用法
4. pt-query-digest4.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.xtrabackup3.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 主从数据一致性校验

17、MySQL高可用和读写分离架构
MHA

目录章节
MHA介绍
架构和相关组件架构和相关组件
工作流程工作流程
MHA高可用架构部署1、环境准备
2、软件安装
3、创建软链接
4、配置各节点互信
5、节点免密验证
6、mha管理用户
7、配置文件
8、状态检查
9、开启MHA
主库宕机故障模拟及处理主库宕机故障模拟及处理
MHA VIP自动切换VIP自动切换
MHA主从数据自动补足MHA主从数据自动补足

Atlas

目录章节
Atlas读写分离高性能架构介绍
安装配置安装配置
配置注解配置注解
启动和关闭启动和关闭
读写分离架构应用读写分离架构应用
创建应用用户创建应用用户
Atlas在线管理Atlas在线管理
读写分离避坑指南读写分离避坑指南

18、MySQL分库分表_原理实战

目录章节
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 分析总结(执行计划)

19、基准性能测试_sysbench

目录章节
1. sysbench1.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 清理数据
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值