文件特殊权限位详解,SUID,SGID,SBIT,有效用户,特殊权限原理和设置,特殊权限对应的字母,特殊权限对应的数字,无效的特殊权限等实操
文章目录
SetUID(SUID)
用途
之前章节讲解权限的时候,重点讲解了文件的rwx 权限;其实文件的权限还会用到 s 权限,例如/usr/bin/passwd文件:
[root@prometheus ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
原本文件所有者权限中的 x 权限位,却出现了 s 权限,此种权限称为 SetUID,简称 SUID 。
SUID 特殊权限仅适用于可执行文件,所具有的功能是对设有 SUID 的文件在执行的时候,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。(如果没有设置suid,则是谁调用命令,就会以谁的身份执行)
进程运行的是有效用户ID(euid egid)
系统内核是根据什么来确定一个进程对资源的访问权限的?
用户在运行脚本的时候,系统根据用户的euid,egid来确定脚本/进程对资源的访问权限。
绝大部分情况下 euid=uid,egid=guid;
uid,gid 是之前讲解过的用户id和用户组id,可以id命令查到用户的user id和group id。
effective uid,effective gid也就是euid,egid;全称就是有效用户id,有效组id。
suid/sgid作用
1. 不使用suid/sgid(常见情况)
普通文件zaishu是属于shuge,赋予可执行权限,没有设置SUID位:
-rwxr-xr-x 1 shuge dba 0 Nov 30 10:40 helloworld
[root@zaishu zaishu]# id shuge
uid=1108(shuge) gid=1105(dba) groups=1105(dba)
[root@zaishu zaishu]# id mysql
uid=1003(mysql) gid=1003(mysql) groups=1003(mysql)
当执行脚本或运行进程的时候,这个脚本没有SUID或SGID位,则euid=uid egid=gid,就是调用这个程序的用户uid和gid。
shuge运行helloworld ,有效用户就是shuge
mysql运行helloworld ,有效用户就是mysql
2. 使用suid/sgid
一个程序/脚本设置了SUID,则euid和egid变成被运行的程序的所有者的uid和gid
-rwsr-xr-x 1 shuge dba 0 Nov 30 10:40 helloworld //设置了suid
[root@zaishu zaishu]# id shuge
uid=1108(shuge) gid=1105(dba) groups=1105(dba)
[root@zaishu zaishu]# id mysql
uid=1003(mysql) gid=1003(mysql) groups=1003(mysql)
此时即使用mysql用户执行helloworld,它实际有效用户还是shuge在调用。
SUID和SGID是在执行程序时起作用。
suid应用(passwd命令)
普通用户为什么能更改自己的密码?
1. 原因
Linux 系统中用户密码数据记录在 /etc/shadow 这个文件中,
[root@zaishu zaishu]# ll /etc/shadow
---------- 1 root root 1216 Nov 29 09:47 /etc/shadow
通过 ll /etc/shadow 命令可以看到,此文件的权限是 0(---------),正常情况下普通用户对此文件没有任何操作权限。 但为什么普通用户passwd 命令可以修改自己的密码?
[root@zaishu zaishu]# which passwd
/usr/bin/passwd
[root@zaishu zaishu]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
因为命令拥有 SUID 特殊权限,普通用户也有执行权限,所以用户执行passwd命令的时候,是以 root 的身份去执行 。
2. 取消SetUID
将 /usr/bin/passwd 文件的 SUID 权限取消,则普通用户不能修改密码成功。
#属主取消SetUID权限
[root@zaishu zaishu]# chmod u-s /usr/bin/passwd
[root@zaishu zaishu]# ll /usr/bin/passwd
-rwxr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
[r[root@zaishu zaishu]# su - mysql
Last login: Tue Nov 30 11:35:28 CST 2021 on pts/0
[mysql@zaishu ~]$ passwd
Changing password for user mysql.
Changing password for mysql.
(current) UNIX password:
New password:
Retype new password:
password:Authentication token manipulation error <--鉴定令牌操作错误
#最后密码没有生效
用户有执行 passwd 命令的权限,但无修改 /etc/shadow 文件的权限,因此最终密码修改失败。
suid原理
有效用户ID和有效组ID则决定了进程在运行时的权限。
当一个程序设置了为SUID位时,内核就知道了运行这个程序的时候,认定是文件的所有者在运行这个程序。即该程序运行的时候,有效用户ID是该程序的所有者。
当以mysql用户调用passwd更改密码时,由于passwd设置了SUID位,因此虽然进程的实际用户ID是mysql,但是进程的有效用户ID则是passwd文件的所有者root,因此可以修改/etc/passwd文件。
suid 特点
1. 只有可执行文件才能设定 SetUID 权限,对目录设定 SUID,是无效的。
2. 用户要对该文件拥有 x(执行)权限。
3. 用户在执行该文件时,会以文件所有者的身份执行。
4. SetUID 权限只在文件执行过程中有效,一旦执行完毕,身份的切换也随之消失。
SetGID(SGID)
当 s 权限位于文件所属组的 x 权限位时,就被称为 SetGID,简称 SGID 特殊权限。例如:
[root@zaishu zaishu]# ll /usr/bin/write
-r-xr-sr-x. 1 root tty 15344 Jun 10 2014 /usr/bin/write
SGID 既可以对文件进行配置,也可以对目录进行配置。
SetGID(SGID)对文件的作用
SGID 针对可执行文件有效,普通文件赋予 SGID 没有意义。
用户组需要对此可执行文件有 x 权限;
用户在执行具有 SGID 权限的可执行文件时,用户的群组身份会变为文件所属群组;
SGID 权限赋予用户改变组身份的效果,只在可执行文件运行过程中有效;
SGID 和 SUID 的不同之处就在于,SUID 是文件所有者的权限,而 SGID 文件所属组的权限。
[root@zaishu zaishu]# ll /usr/bin/write
-r-xr-sr-x. 1 root tty 15344 Jun 10 2014 /usr/bin/write
crw--w---- 1 root tty 4, 1 Nov 30 10:38 /dev/tty1
write 命令是用于在系统中发送消息给其他终端的用户,当用户执行命令,会实际成tty组的身份来执行。所以可以写入内容到/dev/tty1(例)。
SetGID(SGID)对目录的作用
sgid更常见的用途是针对目录,当目录赋予 SGID 权限后,进入目录的用户,其有效群组会变为该目录的所属组,用户在创建文件(或目录)时,该文件(或目录)的所属组将不再是用户的所属组,而使用的是目录的所属组。
[root@localhost ~]# cd /tmp
[root@zaishu tmp]# mkdir zaishu //建立测试目录
[root@zaishu tmp]# chmod g+s zaishu/ //给测试目录赋予SetGID权限
[root@zaishu tmp]# ll -d zaishu/ // 查看
drwxr-sr-x 2 root root 6 Nov 30 14:28 zaishu/
[root@zaishu tmp]# chmod 777 zaishu/ //授权,让普通用户可以进入
[mysql@zaishu ~]$ cd /tmp/zaishu/
[mysql@zaishu zaishu]$ ls
[mysql@zaishu zaishu]$ touch abc
[mysql@zaishu zaishu]$ mkdir d1
[mysql@zaishu zaishu]$ ll -d d1/ //可看到属组是root
drwxrwsr-x 2 mysql root 6 Nov 30 14:30 d1/
[mysql@zaishu zaishu]$ ll abc //可看到属组是root
-rw-rw-r-- 1 mysql root 0 Nov 30 14:30 abc
SBIT
sbit 用途含义
Sticky BIT,简称 SBIT 特殊权限,可意为粘着位、粘滞位、防删除位等。
SBIT 权限仅对目录有效,一旦目录设定了 SBIT 权限,则用户在此目录下创建的文件或目录,就只有自己和 root 才有权利修改或删除该文件,其他用户即使有权限,也只能新增。
当甲用户以目录所属组或其他人的身份进入 A 目录时,如果甲对该目录有 w 权限,则表示对于 A 目录中任何用户创建的文件或子目录,甲都可以进行修改甚至删除等操作。但是,如果 A 目录设定有 SBIT 权限,那甲用户只能操作自己创建的文件或目录,而无法修改及删除其他用户创建的文件或目录。
SBIT示例
举个例子,linux 系统中,存储临时文件的 /tmp 目录就设定有 SBIT 权限:
[root@zaishu ~]# chmod 1777 /shu/ //授予了777权限,同时也授予了sbit的权限
[root@zaishu ~]# ll -d /shu/
# 其他用户权限设定中,x 权限位被 t 权限替换,表示此目录有 SBIT 权限。
drwxrwxrwt 2 mysql mysql 6 Dec 1 09:35 /shu/
[mysql@zaishu shu]$ touch my2
[mysql@zaishu shu]$ mkdir mydir2
[root@zaishu ~]# su - shuge //切换用户
[shuge@zaishu ~]$ cd /shu/ //进入目录验证
[shuge@zaishu shu]$ ls
my2 mydir2
[shuge@zaishu shu]$ rm my2 //不允许删除文件,即使设定是 777 有x的权限
rm: remove write-protected regular empty file ‘my2’? y
rm: cannot remove ‘my2’: Operation not permitted
[shuge@zaishu shu]$ rm -rf mydir2 //不允许删除目录,即使设定是 777 有x的权限
rm: cannot remove ‘mydir2’: Operation not permitted
[shuge@zaishu shu]$ cat "abc" > my2 //不允许修改文件,即使设定是 777
-bash: my2: Permission denied
这就是 SBIT 权限的作用。仅允许在目录中新建文件,不允许删除修改不是属主自己的文件。
特殊权限设置(SUID、SGID和SBIT)
上面详细讲解了SUID、SGID、SBIT 特殊权限和各自的功能,这一章节重点介绍如何设置
从坐往右数,第9-7位、6-4位、3-1位分别表示文件所有者的权限,同组用户的权限,其他用户的权限。
r表示可读,可以读出文件的内容
w表示可写,可以修改文件的内容
x表示可执行,可运行这个程序
没有权限的位置用 -表示
[root@zaishu tmp]# ls -l /usr/bin/vi
-rwxr-xr-x. 1 root root 910176 Oct 31 2018 /usr/bin/vi
特殊权限对应的字母
设置了SUID或SGID位,会表现在所有者或组的权限位:
1、-rwsr-xr-x 表示SUID和所有者权限中可执行位被设置
2、-rwSr--r-- 表示SUID被设置,但所有者权限中可执行位没有被设置
3、-rwxr-sr-x 表示SGID和同组用户权限中可执行位被设置
4、-rw-r-Sr-- 表示SGID被设置,但同组用户权限中可执行位没有被设置
通过chmod 命令进行修改,给文件加SUID和SUID的命令如下:
chmod u+s filename # 设置SUID位
chmod u-s filename # 去掉SUID设置
chmod g+s filename # 设置SGID位
chmod g-s filename # 去掉SGID设置
特殊权限对应的数字
文件权限实际由12个二进制位构成(之前是用9位构成),示有相应的权限:
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|
suid | sgid | t | r | w | x | r | w | x | r | w | x |
s:suid,简写是s
s: sgid,简写也是s
t : sbit,简写是t
1. 查看passwd文件
[mysql@zaishu zaishu]$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
-rwsr-xr-x 对应完整的字母是: s-- rwx r-x r-x ;对应的数字是 4 7 5 5
[root@zaishu tmp]# chmod 4755 /usr/bin/passwd //结果同上
[root@zaishu tmp]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
2. umask的默认权限值
umask的用法可参照之前讲解的章节。
通过umask也可以看到实际是应用12位
[root@node2 tmp]# umask
0022
代表含义 --- --- -w- -w-
chmod 通过字母授权
使用字母的形式。
通过 “u+s” 给文件赋予 SUID 权限;通过 “g+s” 给文件或目录赋予 SGID 权限;通过 “o+t” 给目录赋予 SBIT 权限。
1. 添加权限
[root@zaishu zaishu.cn]# chmod u+s,g+s,o+t test //设置特殊权限
[root@zaishu zaishu.cn]# ll
-rwSr-Sr-T 1 root root 0 Nov 30 15:58 test
大写字母 ,表示没有执行位
rwSr-Sr-T 等同于是: sgt rw-r--r-- 如果用数字表示: 7644
[root@zaishu zaishu.cn]# chmod 7644 test2
[root@zaishu zaishu.cn]# ll
total 0
-rwSr-Sr-T 1 root root 0 Nov 30 15:58 test
-rwSr-Sr-T 1 root root 0 Nov 30 15:59 test2 // 效果一样
2. 取消特殊权限
[root@zaishu zaishu.cn]# chmod u-s,g-s,o-t test
[root@zaishu zaishu.cn]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 30 15:58 test
-rwSr-Sr-T 1 root root 0 Nov 30 15:59 test2
注意:没有执行权限的文件,授予特殊权限没有意义。
chmod 通过数字授权
SUID、SGID、SBIT 分别对应的数字:
SUID --> 100 , 4
SGID --> 010 , 2
SBIT --> 001 , 1
将一个文件权限设置为 -rwsr-xr-x,如何用数字授权?
文件的普通权限为 755,另外,此文件还有 SUID 权限,因此只需在 755 的前面,加上 SUID 对应的数字 4 。也就是说,只需执行chmod 4755 文件名命令,就完成了-rwsr-xr-x 权限的设定。
同样的道理,如果某文件拥有 SUID 和 SGID 权限,需要 chmod 命令传递 6;如果某目录拥有 SGID 和 SBIT,需要给 chmod 命令传递 3— 。
给文件设置 7—,也就是将 SUID、SGID、SBIT赋予一个文件或目录,例如:
[root@zaishu ~]# chmod 7777 shu
#一次赋予SetUID、SetGID和SBIT权限
[root@zaishu ~]# ll shu
-rwsrwsrwt. 1 root root Apr 19 23:54 shu
大写S/T
无论是 SUID、SGID 还是 SBIT,它们只针对具有 x 权限的文件或目录有效。没有 x 权限的文件或目录,即便赋予特殊权限,也无法发挥它们的功能,没有任何意义。
例如,我们就是要给不具有 x 权限的文件或目录赋予特殊权限,看看有什么效果:
[root@zaishu ~]# chmod 7666 shu //666 表示没有x权限 rw-rw-rw-
[root@zaishu ~]# ll shu
-rwSrwSrwT. 1 root root Apr 23:54 shu
可以看到,相应的权限位会被标记为 S(大写)和 T(大写),指的就是设置的 SUID、SGID 和 SBIT 权限没有意义。
总结
文件特殊权限位详解,SUID,SGID,SBIT,有效用户,特殊权限原理和设置,特殊权限对应的字母,特殊权限对应的数字,无效的特殊权限等实操
友情链接
目录 | 章节 |
---|---|
版本说明 | 版本说明 |
安装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 清理数据 |