系统环境:
rooky8.0.6 | 192.168.111.111 |
一、安装mysql,下载这几个app。
[root@localhost mysql]# yum list installed | grep mysql
mysql.x86_64 8.0.26-1.module+el8.4.0+652+6de068a7 @appstream
mysql-common.x86_64 8.0.26-1.module+el8.4.0+652+6de068a7 @appstream
mysql-errmsg.x86_64 8.0.26-1.module+el8.4.0+652+6de068a7 @appstream
mysql-server.x86_64 8.0.26-1.module+el8.4.0+652+6de068a7 @appstream
[root@localhost mysql]# yum list installed | grep mariadb
mariadb-connector-c-config.noarch 3.1.11-2.el8_3 @appstream
第一次进入mysql中不需要密码。所以进入mysql需要自行设置一下密码。代码如下:
mysql> use mysql
mysql> alter user 'root'@'localhost' identified by '123456';
二、创建LVM
图片来源:Linux下的磁盘管理之LVM详解及lvm的常用磁盘操作命令_yg@hunter的博客-CSDN博客_lvm命令
1.在虚拟机中添加一块磁盘,并分区一下。
如下图,添加了一块sdb的磁盘,将sdb磁盘分了一个sdb1的分区。
[root@localhost mysql]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 2G 0 part /boot
└─sda2 8:2 0 58G 0 part
├─rl-root 253:0 0 56G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk
└─sdb1 8:17 0 8G 0 part
sr0 11:0 1 1024M 0 ro
创建过后需要重启或者执行 “partprobe” 才能用。
##重启磁盘
[root@localhost mysql]# partprobe
2.将分区更改为lvm类型。
[root@localhost mysql]# fdisk /dev/sdb
将/dev/sdb更改为linux LVM模式。
3.创建物理卷(pv)。
[root@localhost mysql]# pvcreate /dev/sdb1
WARNING: dos signature detected on /dev/sdb1 at offset 510. Wipe it? [y/n]: y
Wiping dos signature on /dev/sdb1.
Physical volume "/dev/sdb1" successfully created.
[root@localhost mysql]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name rl
PV Size <58.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 14847
Free PE 0
Allocated PE 14847
PV UUID 29vJcC-MIan-Lfc5-Rc5F-e5Um-jPOd-Sktu1f
"/dev/sdb1" is a new physical volume of "<8.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <8.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID CdPpfu-irJu-NkEM-brKk-qp3V-GKbh-P9bpLY
4.创建卷组(VG)。
创建卷组时也看出LVM的优点了,可以将多个磁盘合为一个空间,
假设:有/dev/sda1和/dev/sdb1这两块分区的空间,这两块并不在同一个磁盘上面。
我们可以,vgcreate [name] /dev/sda1 /dev/sdb1 将两块空间合为一个空间,供下面的逻辑卷(LV)使用。
而我只有一块/dev/sdb1的空间,所以我就用了一个。
### vgcreate [name] [指定的物理卷]
[root@localhost mysql]# vgcreate vgtest /dev/sdb1
Volume group "vgtest" successfully created
[root@localhost mysql]# vgdisplay
--- Volume group ---
VG Name vgtest
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <8.00 GiB
PE Size 4.00 MiB
Total PE 2047
Alloc PE / Size 0 / 0
Free PE / Size 2047 / <8.00 GiB
VG UUID K03kGL-RXk8-ZH89-NLFd-sVAV-S0mL-y4PZ6s
5.创建逻辑卷(LV)
lvcreate -L [卷的大小] -n [卷的名字] 卷组的名字
[root@localhost mysql]# lvcreate -L 5G -n lvtest vgtest
Logical volume "lvtest" created.
[root@localhost mysql]# lvdisplay
--- Logical volume ---
LV Path /dev/vgtest/lvtest
LV Name lvtest
VG Name vgtest
LV UUID DCnBvW-dBcP-tKke-unpZ-y1dT-jpeF-Ht3ujF
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-10-15 19:34:28 +0800
LV Status available
# open 0
LV Size 5.00 GiB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
6.格式化LV
[root@localhost mysql]# mkfs.
mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs
[root@localhost mysql]# mkfs.ext4 /dev/vgtest/lvtest
mke2fs 1.45.6 (20-Mar-2020)
创建含有 1310720 个块(每块 4k)和 327680 个inode的文件系统
文件系统UUID:87851c60-c35b-4db2-b4c3-fc6765973a62
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736
正在分配组表: 完成
正在写入inode表: 完成
创建日志(16384 个块)完成
写入超级块和文件系统账户统计信息: 已完成
各个格式化类型的区别可看:
linux分区xlf和ext4分区区别,Linux分区类型EXT2、EXT3、EXT4详解_weixin_39907526的博客-CSDN博客
7.进行挂载
### 这个/mnt/mysql_lv将是我们数据库数据放的目录
[root@localhost mnt]# mount -t ext4 /dev/vgtest/lvtest /mnt/mysql_lv/
[root@localhost mnt]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 2G 0 part /boot
└─sda2 8:2 0 58G 0 part
├─rl-root 253:0 0 56G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk
└─sdb1 8:17 0 8G 0 part
└─vgtest-lvtest 253:2 0 5G 0 lvm /mnt/mysql_lv
sr0 11:0 1 1024M 0 rom
[root@localhost mnt]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 324M 0 324M 0% /dev
tmpfs 343M 0 343M 0% /dev/shm
tmpfs 343M 5.0M 338M 2% /run
tmpfs 343M 0 343M 0% /sys/fs/cgroup
/dev/mapper/rl-root 56G 2.6G 54G 5% /
/dev/sda1 2.0G 191M 1.9G 10% /boot
tmpfs 69M 0 69M 0% /run/user/0
/dev/mapper/vgtest-lvtest 4.9G 20M 4.6G 1% /mnt/mysql_lv
这是暂时的挂载,下次重启服务器,挂载将会消失,所以需要永久挂载。
8.永久挂载。
[root@localhost mnt]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jun 28 13:43:47 2022
#
# 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root / xfs defaults 0 0
UUID=47f5a72c-9eb0-427a-9636-d80cf01eec7f /boot xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0
/dev/vgtest/lvtest /mnt/mysql_lv ext4 defaults 0 0
9.修改/mnt/mysql_lv的所有者和所属组。
[root@localhost mnt]# chown -R mysql:mysql /mnt/mysql_lv/
[root@localhost mnt]# ll
总用量 4
drwxr-xr-x. 2 root root 6 6月 28 21:45 hgfs
drwxr-xr-x 3 mysql mysql 4096 10月 15 19:40 mysql_lv
10.将数据库的数据迁移到/mnt/mysql_lv下。
## 在迁移之前和修改默认文件之前,我希望你都可以备份一下原文件,养成好习惯。
mv /var/lib/mysql/* /mnt/mysql_lv/
##因为我的mysql是8.0.26版本的,所以修改默认配置文件可能不一样,不过修改的内容都一样。
[root@localhost my.cnf.d]# pwd
/etc/my.cnf.d
[root@localhost my.cnf.d]# cat client.cnf
[client]
port=3306
socket=/mnt/mysql_lv/mysql.sock
[client-mariadb]
[root@localhost my.cnf.d]# cat mysql-server.cnf
[mysqld]
#datadir=/var/lib/mysql
datadir=/mnt/mysql_lv
#socket=/var/lib/mysql/mysql.sock
socket=/mnt/mysql_lv/mysql.sock
#log-error=/var/log/mysql/mysqld.log
log-error=/mnt/mysql_lv/mysqld.log
#pid-file=/run/mysqld/mysqld.pid
pid-file=/mnt/mysql_lv/mysqld.pid
## 另一个文件不用改
重启mysql
systemctl restart mysqld
10.然后完成