本章详细讲解:文件挂载,卸载,mount,语法选项示例,挂载光盘,挂载分区,挂载u盘,挂载移动硬盘,卸载,fuser的使用和示例
文章目录
- mount
- 语法选项
- fstab文件
- /etc/fstab文件的作用
- 挂载的限制
- 参数详解
- mtab 文件的作用(了解)
- mount 示例
- mount 或者 mount -l 显示系统中已挂载设备信息
- mount -a
- 挂载分区
- 使用标签和只读的方式挂载
- 设置特殊权限
- 挂载光盘
- 光盘真正对应的设备
- 挂载U盘或移动硬盘
- 挂载U盘
- 挂载移动硬盘
- 卸载
- fuser
- 示例
- 总结
- 友情链接
mount
Linux mount命令详解:挂载文件
Linux中文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是“挂载点”,解除关联称之为“卸载”。
语法选项
用法:
mount [-lhV]
mount -a [选项]
mount [选项] <device> <挂载点目录>
mount <操作> <挂载点>
- device:指明要挂载的设备,设备名可用如下形式表示;
(1) 设备文件名:例如/dev/sdb1
(2) 卷标:-L ‘LABEL’, 例如 -L ‘MYDATA’
(3) UUID, -U ‘UUID’:例如 -U ‘0e50523c-43f1-45e7-85c0-a126711d406e’
卷标和UUID可以通过 blkid 查看,具体语法和用途可查看 https://blog.csdn.net/wangzhicheng987/article/details/121859630
[root@zaishu ~]# blkid
/dev/sda1: UUID="cfbd122f-1673-4180-b520-aa7e07be522a" TYPE="xfs"
/dev/sda2: UUID="16f02c42-631b-4352-af76-6d5827b180cf" TYPE="swap"
/dev/sda3: UUID="60ca7c99-54c3-4a2a-93c4-5a5f61895c8b" TYPE="xfs"
/dev/sdb5: UUID="d4fdd717-0caa-4d5c-9e9a-8d36b9eea29e" TYPE="ext4"
/dev/sr0: UUID="2020-11-04-11-36-43-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
-
挂载点目录
事先存在;建议使用空目录;
进程正在使用中的设备无法被卸载;挂载点目录不可被其他进程使用到;挂载点下原有文件将被隐藏。 -
常用选项:
选项 | 说明 |
---|---|
-t type: | 指定要挂载的设备上的文件系统类型; Linux 常见的支持类型有 EXT2、EXT3、EXT4、iso9660(光盘格式)、vfat、reiserfs 等。如果不指定具体类型,挂载时 Linux 会自动检测。 |
-r: | readonly,只读挂载; |
-rw: | read and write, 读写挂载; |
-n: | 不更新/etc/mtab;在默认情况下,系统会将实际挂载的情况实时写入 /etc/mtab 文件中,但在某些场景下(例如单用户维护模式),为了避免出现问题,会刻意不写入,此时就需要使用这个选项; |
-a: | 自动挂载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能) |
-L ‘LABEL’: | 以卷标指定挂载设备;除了使用设备文件名(例如 /dev/hdc6)之外,还可以利用文件系统的卷标名称进行挂载。 |
-U ‘UUID’: | 以UUID指定要挂载的设备; |
-B, --bind: | 绑定目录到另一个目录上;注意:查看内核追踪到的已挂载的所有设备:cat /proc/mounts |
-o 特殊选项: | 可以指定挂载的额外选项,比如读写权限、同步/异步等。; |
- [-o 特殊选项]
选项 | 功能 |
---|---|
rw/ro | 是否对挂载的文件系统拥有读写权限,rw 为默认值,表示拥有读写权限;ro 表示只读权限。 |
async/sync | 此文件系统是否使用同步写入(sync)或异步(async)的内存机制,默认为异步 async。 |
dev/nodev | 是否支持在此文件系统上使用设备文件 即能否从该文件系统的 block 文件中提取数据,默认是 dev。 |
auto/noauto | 是否允许此文件系统被以 mount -a 的方式进行自动挂载,默认是 auto。 |
suid/nosuid | 设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有。 |
exec/noexec | 设定在文件系统中是否允许执行可执行文件,默认是允许。 |
user/nouser | 设定此文件系统是否允许让普通用户使用 mount 执行实现挂载,默认是不允许(nouser),仅有 root 可以。 |
defaults | 定义默认值,相当于 rw、suid、dev、exec、auto、nouser、async 这 7 个选项。 |
remount | 重新挂载已挂载的文件系统,一般用于指定修改特殊权限。 |
- 对挂载点的操作:
操作 | 功能 |
---|---|
-B, --bind | 挂载其他位置的子树(同 -o bind) |
-M, --move | 将子树移动到其他位置 |
-R, --rbind | 挂载其他位置的子树及其包含的所有挂载 |
–make-shared | 将子树标记为 共享 |
–make-slave | 将子树标记为 从属 |
–make-private | 将子树标记为 私有 |
–make-unbindable | 将子树标记为 不可绑定 |
–make-rshared | 递归地将整个子树标记为 共享 |
–make-rslave | 递归地将整个子树标记为 从属 |
–make-rprivate | 递归地将整个子树标记为 私有 |
–make-runbindable | 递归地将整个子树标记为 不可绑定 |
fstab文件
/etc/fstab文件的作用
挂载之后需要把分区挂载信息写入/etc/fstab这个文件中,让其永久生效。
开机时会主动读取/etc/fstab这个文件中的内容挂载磁盘。这样将磁盘挂载信息写入文件中就不需要每次开机启动之后手工进行挂载。
挂载的限制
- 1、根目录必须挂载的,其他目录都是由根目录 /衍生出来。
- 2、挂载点必须是已经存在。
- 3、挂载点同一时间只能被挂载一次
- 4、所有分区在同一时间只能挂载一次
- 5、进行卸载,挂载点当中原先子目录或文件会消失。
参数详解
[root@zaishu ~]# cat /etc/fstab #
# /etc/fstab
# Created by anaconda on Thu Oct 8 19:56:44 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=60ca7c99-54c3-4a2a-93c4-5a5f61895c8b / xfs defaults 0 0
UUID=cfbd122f-1673-4180-b520-aa7e07be522a /boot xfs defaults 0 0
UUID=16f02c42-631b-4352-af76-6d5827b180cf swap swap defaults 0 0
-
第1列: 需要挂载的设备
可以用【磁盘设备文件、设备label、设备uuid】 -
使用设备名和uuid作为标识的不同
使用设备名称(/dev/sda)来挂载分区时是固定的,一旦磁盘的插槽顺序发生了变化,就会出现名称不对应的问题。
至于UUID,每个分区被格式化以后都会有一个UUID作为唯一的标识号。使用uuid挂载的话就不用担心会发生错乱的问题了。 -
查看分区的label和uuid
[root@zaishu ~]# blkid
/dev/sda1: UUID="cfbd122f-1673-4180-b520-aa7e07be522a" TYPE="xfs"
/dev/sda2: UUID="16f02c42-631b-4352-af76-6d5827b180cf" TYPE="swap"
/dev/sda3: UUID="60ca7c99-54c3-4a2a-93c4-5a5f61895c8b" TYPE="xfs"
/dev/sdb5: UUID="d4fdd717-0caa-4d5c-9e9a-8d36b9eea29e" TYPE="ext4"
/dev/sr0: UUID="2020-11-04-11-36-43-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
-
第2列:Mount point:设备的挂载点,对应挂载到哪个目录。
-
第3列:filesystem:文件系统的格式,包括ext3、reiserfs、ntfs、xfs等
-
第4列:parameters:文件系统的参数
参数 | 含义 |
---|---|
Async/sync | 设置是否为同步方式运行,默认为async |
auto/noauto | 当使用mount -a 的命令时,此文件系统是否被主动挂载。默认为auto |
rw/ro | 是否以以只读或者读写模式挂载 |
exec/noexec | 限制此文件系统内是否能够进行"执行"的操作 |
user/nouser | 是否允许用户使用mount命令挂载 |
suid/nosuid | 是否允许SUID的存在 |
Usrquota | 启动文件系统支持磁盘配额模式 |
Grpquota | 启动文件系统对群组磁盘配额模式的支持 |
Defaults | 同事具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置 |
- 第5列:能否被dump备份命令作用:dump是一个用来作为备份的命令。通常这个参数的值为0或者1
选项 | 含义 |
---|---|
0 | 代表不要做dump备份 |
1 | 代表要每天进行dump的操作 |
2 | 代表不定日期的进行dump操作 |
- 第6列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)。
选项 | 含义 |
---|---|
0 | 不要检验 |
1 | 启动检验(一般根目录会选择) |
2 | 1级别检验完成之后进行检验 |
mtab 文件的作用(了解)
/etc/mtab文件的作用:
记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等;而/etc/fstab是系统准备装载的。 每当 mount 挂载分区、umount 卸载分区,都会动态更新 mtab,mtab 总是保持着当前系统中已挂载的分区信息,fdisk、df 这类程序,必须要读取 mtab 文件,才能获得当前系统中的分区挂载情况。也可以通过读取/proc/mount也可以来获取当前挂载信息
mount 示例
mount 或者 mount -l 显示系统中已挂载设备信息
[root@zaishu ~]# mount -l
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
...
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/sda3 on / type xfs (rw,relatime,attr2,inode64,noquota) <--含义是将 /dev/sda3 分区挂载到了 / 目录上,文件系统是 xfs ,具有读写权限
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=22,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=13496)
mqueue on /dev/mqueue type mqueue (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=99568k,mode=700)
mount -a
-a : 检查 fstab 文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。
stab 自动挂载文件,系统开机时会主动读取 /etc/fstab 这个文件中的内容,根据该文件的配置,系统会自动挂载指定设备。
[root@localhost ~]# mount
#查看系统中已经挂载的文件系统,注意有虚拟文件系统
/dev/sda3 on / type ext4 (rw) <–含义是,将 /dev/sda3 分区挂载到了 / 目录上,文件系统是 ext4,具有读写权限
proc on /proc type proc (rw)
sysfe on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw, gid=5, mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fe/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfe/rpc_pipefs type rpc_pipefs (rw)
挂载分区
[root@node1 device]# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 7 23:37 2
-rw-r--r-- 1 root root 0 Aug 7 23:37 3
fdisk -l 查看分区
[root@node1 device]# blkid /dev/sdb1
/dev/sdb1: UUID="4e3a5159-298d-41bb-bd0d-0595eea10927" TYPE="xfs"[root@node1 device]# mount /dev/sdb1 /device/
[root@node1 device]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 48G 4.5G 44G 10% /
devtmpfs 223M 0 223M 0% /dev
tmpfs 235M 0 235M 0% /dev/shm
tmpfs 235M 5.5M 229M 3% /run
tmpfs 235M 0 235M 0% /sys/fs/cgroup
/dev/sda1 197M 124M 74M 63% /boot
tmpfs 47M 0 47M 0% /run/user/0
/dev/sdb1 2.0G 33M 2.0G 2% /device
[root@node1 device]# ls -l
total 0
1)没有指定文件系统,块设备也可以正常挂载;2)指定与块设备不一致的文件系统类型则命令报错;3)挂载点有内容的文件夹,在挂载后内容消失,卸载后内容重现,也就是说挂载后会将原文件内容掩盖,但并不对其进行其他操作。[root@node1 /]# umount /device/
[root@node1 /]# mount -t ext4 /dev/sdb1 /device/
mount: wrong fs type, bad option, bad superblock on /dev/sdb1,missing codepage or helper program, or other errorIn some cases useful info is found in syslog - trydmesg | tail or so.
默认是使用xfs的类型,所以不需要指定
使用标签和只读的方式挂载
格式化文件系统,添加设置标签
[root@node1 /]# mkfs -L /sdbb1 /dev/sdb1 //dev/sdb1 标签为/sdbb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=/sdbb1
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524032 blocks
26201 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
查看设备信息
[root@node1 /]# blkid /dev/sdb1
/dev/sdb1: LABEL="/sdbb1" UUID="d0ff3872-2855-4e48-aa08-ccfccfc9ee6a" TYPE="ext2"
以标签的形式来挂载,并且设置成只读
[root@node1 device]# mount -L '/sdbb1' -r /device/
[root@node1 /]# cd /device/
[root@node1 device]# ls
lost+found[root@node1 device]# touch tx2
touch: cannot touch ‘tx2’: Read-only file system
1)指定卷标挂载可行,以只读方式挂载后,无法对挂载点中的内容进行修改、创建等操作;2)目录的挂载实质上是硬链接,挂载后可以对里面的文件内容进行修改与删除。
设置特殊权限
例如对当前已经挂载的/boot 分区,而且采用的是 defaults 选项。
重新挂载分区,并采用 noexec 权限禁止执行文件执行
[root@localhost ~]# mount -o remount noexec /boot
#重新挂载 /boot 分区,并使用 noexec 权限
[root@localhost sh]# cd /boot
#写一个 shell 脚本,看是否会运行
[root@localhost boot]#vi hello.sh
#!/bin/bash
echo "hello!!"
[root@localhost boot]# chmod 755 hello.sh
[root@localhost boot]# ./hello.sh
-bash:./hello.sh:权限不够
#虽然赋予了hello.sh执行权限,但是仍然无法执行
[root@localhost boot]# mount -o remount exec /boot
#记得改回来,否则会影响系统启动
对于特殊选项的修改,除非特殊场景下需要,否则不建议大家随意修改,非常容易造成系统出现问题,而且还找不到问题的根源。
挂载光盘
将光盘放入光驱之后,需执行如下挂载命令:
建立挂载点
[root@localhost ~]# mkdir /mnt/cdrom/
挂载光盘
bash
[root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/
monunt /dev/cdrom /mnt/cdrom //效果一样光盘的文件系统是 iso9660,文件系统类型可以省略不写,系统会自动检测。
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
#挂载光盘。两个挂载光盘的命令使用一个就可以了
[root@localhost ~]# mount
#查看已经挂载的设备
.....
/dev/srO on /mnt/cdrom type iso9660 (ro)
#光盘已经挂载了,但是挂载的设备文件名是/dev/sr0
#挂载点 /mnt/cdrom 是手工建立的空目录
光盘真正对应的设备
光驱的真正设备文件名是保存在 /proc/sys/dev/cdrom/info 文件中的,通过查看可以得知光盘真正设备文件名,命令如下:
[root@localhost ~]# cat /proc/sys/dev/cdrom/info
CD-ROM information, ld: cdrom.c 3.20 2003/12/17
drive name: sr0
/dev/cdrom 的源文件是 /dev/sr0。/dev/sr0 是光驱的真正设备文件名,代表 SCSI 接口或 SATA 接口的光驱,所以刚刚查询挂载时看到的光驱设备文件命令是 /dev/sr0。
[root@localhost ~]#ll /dev/cdrom
lrwxrwxrwx 1 root root 3 1月31 01:13/dev/cdrom ->sr0
所以挂载命令也可以写成这样:
[root@localhost ~]# mount /dev/sr0 /mnt/cdrom/
挂载U盘或移动硬盘
挂载 U 盘和挂载光盘的方式是一样的,不过光盘的设备文件名是固定的,而 U 盘的设备文件名是在插入 U 盘后系统自动分配的。需要查找出来识别的设备然后挂载
挂载U盘
通过使用 fdisk 命令,即可查看到 U 盘的设备文件名,执行命令如下:
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.5GB, 21474836480 bytes
#系统硬盘
…省略部分输出…
Disk/dev/sdb: 8022 MB, 8022654976 bytes
#这就是识别的U盘,大小为8GB
94 heads, 14 sectors/track, 11906 cylinders
Units = cylinders of 1316 * 512 = 673792 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 1 11907 7834608 b W95 FAT32 #系统给U盘分配的设备文件名
fat32格式用-t vfat(linux默认支持)
查看到 U 盘的设备文件名,接下来就要创建挂载点了。命令如下:
[root@localhost ~]# mkdir /mnt/usb
然后就是挂载了,挂载命令如下:
[root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/
挂载U盘。因为是Windows分区,所以是vfat文件系统格式
输出可能是乱码
出现乱码,是因为编码格式不同,U 盘是 Windows 中保存的数据,而 Windows 中的中文编码格式和 Linux 中的不一致
[root@localhost ~]# cd /mnt/usb/
#去挂载点访问U盘数据
[root@localhost usb]# ls
解决乱码
在挂载的时候指定正确的编码格式解决乱码问题:
[root@localhost ~]# mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb/
#挂载U盘,指定中文编码格式为UTF-8
[root@localhost ~]# cd /mnt/usb/
[root@localhost usb]# ls
你好.txt
#可以正确地查看中文了
因为我们的 Linux 在安装时采用的是 UTF-8 编码格式,
所以要让 U 盘在挂载时也指定为 UTF-8 编码格式,才能正确显示。
系统默认编码格式
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
挂载移动硬盘
Linux 默认是不支持 NTFS 文件系统的,要想让 Linux 支持移动硬盘,主要有三种方法:
重新编译内核,加入 ntfs 模块,然后安装 ntfs 模块;
不编译内核,而是下载已经编译好的内核,直接安装内核;
安装 NTFS 文件系统的第三方插件,也可以支持 NTFS 文件系统(最常用);
yum install ntfs-3g
mount -t ntfs -o iocharset=utf8 /dev/sdb1 /mnt/usb/ //ntfs格式用 -t ntfs
df -h
卸载
卸载文件:umount
命令使用格式:# umount DEVICE# umount MOUNT_POINT
在卸载的过程中,经常遇到目录或当中的子目录被使用,导致挂载点无法卸载,所以经常结合fuser来配合卸载。
fuser
fuser:查看正在访问指定文件系统的进程:
命令使用格式:# fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程:慎用# fuser -km MOUNT_POINT
示例
[root@node1 device]# umount /device/ //文件被使用无法卸载
umount: /device: target is busy.(In some cases useful info about processes that usethe device is found by lsof(8) or fuser(1))[root@node1 ~]# which fuser
/usr/bin/which: no fuser in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/sh:/usr/local/mysql/bin)
[root@node1 ~]# yum install psmisc //安装fuser[root@node1 ~]# fuser -v /device/ //查看正在访问指定文件系统的进程USER PID ACCESS COMMAND
/device: root kernel mount /deviceroot 6947 ..c.. bash[root@node1 ~]# ps aux|grep 6947 //查看进程信息
root 6947 0.0 0.4 115572 2180 pts/0 Ss+ 23:03 0:00 -bash
root 7170 0.0 0.2 112708 972 pts/1 S+ 23:58 0:00 grep --color=auto 6947[root@node1 ~]# fuser -km /device/ //终止所有在正访问指定的文件系统的进程
/device: 6947c[root@node1 ~]# umount /device/ //成功卸载目录
总结
本章详细讲解:文件挂载,卸载,mount,语法选项示例,挂载光盘,挂载分区,挂载u盘,挂载移动硬盘,卸载,fuser的使用和示例
友情链接
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 page | index page |
insert buffer page | insert buffer page |
重做日志 | 重做日志 |
回滚日志 | 回滚日志 |
checkpoint,刷写脏页check point | checkpoint |
关键特性 | 1、插入缓冲 2、数据写入可靠性提升技术-doublewrite 3、自适应哈希索引-AHI |
innodb预读预写技术 | 预读写 |
6、MySQL文件详解_物理结构_逻辑结构_原理和案例
目录 | 章节 |
---|---|
参数和配置文件 | 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、操作 |
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和TABLES | 1、STATISTICS:用于存放索引的信息 2、TABLES:用于存放库表的元数据信息 |
判断索引创建是否合理 | 1、选择性 2、索引创建的建议 |
检查联合索引创建是否合理 | 1、联合索引创建是否合理 2、有了联合索引(a,b),还需要单独创建a索引吗? |
如何查找冗余索引 | 查找冗余索引 |
查找产生额外排序的sql语句 | 额外排序的sql语句 |
查找产生临时表的sql语句 | 临时表的sql语句 |
全表扫描的sql语句 | 全表扫描的sql语句 |
统计无用的索引 | 无用的索引 |
索引统计信息 | 1、存储索引统计信息 2、如何查看索引统计信息 |
10、MySQL优化器算法与执行计划
目录 | 章节 |
---|---|
简单嵌套查询算法-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、执行计划解析 |
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与TPS | 1、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. 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 主从数据一致性校验 |
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. 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 清理数据 |