本文背景:
现有项目系统是使用OVA镜像的方式给到用户,用户直接虚拟机导入进行部署的。但是运行一段时期后,发现系统中数据库的文件不断增大,当时打包给用户使用的OVA系统镜像初始设置空间是固定的,所以导致了系统在写数据的时候无法再写入,同时导致了操作MYSQL的时候发生如图的异常信息:
所以接下来要进行的操作是如何将当前系统的数据文件直接放到外部挂载的磁盘上面。
实现步骤:
说明:后面的操作因为要使用root权限,所以此时直接进行root赋权操作:
sudo -i
如图,用户名变为了root了。
随后输入密码即可。
- 分区和挂载配置
- 查看可用存储设备
fdisk -l
如下图,可以看到,其中不仅仅有/dev/sda一个存储设备(当前系统默认使用的),还有一个/dev/sdb的存储设备。存储设备如果有第三个,那么会有个/dev/sdc,以此类推:
- 设置存储设备分区
fdisk /dev/sdb
上面命令是对存储设备sdb进行分区设置,输入该命令后,随后会出现Command(m for help)的设置引导,如下图:
m
输入m查看帮助:
简要说明一下:
a设置启动分区,加上装了双系统,则次项可设置
d删除分区,如果分错了,可以用来删除
m打印帮助界面
n创建一个新的分区
p打印当前分区表
q退出不保存
w退出保存
因为我要进行一个新的分区设置,所以此时输入n
n
接下来选择设置主分区,即P
p
选择分区编号,默认即可,可以直接回车,接下来的选项都可回车(下图椭圆部分),等到出现下图的时候,输入w进行保存退出:
w
可以看到,上面生成了一个sdb1的分区了。如果一个分区的编号大于等于5,就说明这个分区是一个逻辑分区。
结束后,如果查看当前设备下面的分区内容,查看不到,则可以使用partprobe命令进行执行,相当于类似于重启有效。
- 格式化要挂载的存储设备
说明:当前系统默认使用RHEL6的格式化命令,即:mkfs.ext4 /dev/sdb1 或者 mkfs -t ext4 /dev/sdb1,两种命令方式均可。
mkfs -t ext4 /dev/sdb1
- 创建挂载点
格式化完毕后,创建挂载点,相当于创建一个目录,即:
mkdir /data-distance
上图中的data-distance目录,即我们需要挂载的外部存储目录,也就是后面要将mysql数据文件存储的位置。
- 关联挂载点
使用mount命令进行挂载,挂载成功后,使用df -h查看挂载状况
mount /dev/sdb1 /data-distance/
df -h
如上图,而已看到sdb1已经挂载到了新建的文件目录/data-distance中。
- 设置挂载点开机启动
系统开机会自动去读取一个配置文件,决定挂载那些文件系统。该文件即/etc下的fstab文件。所以,我们如果设置开机自动挂载外部磁盘,也就是我们上面的data-distance目录有效可用,将需要编辑这个文件。
但是,通常自动挂载不推荐使用名称的方式进行,而是使用UUID唯一标识进行设置,所以我们可用先查看挂载点对应的UUID。
blkid | grep sdb1
结果如图:
将上面的UUID进行复制,接下来进行编辑/etc/fstab操作:
vi /etc/fstab
编辑完毕后保存即可。
- 配置MYSQL
在进行完毕上述操作之后,接下来就是对mysql数据内容的迁移操作了。在ubuntu系统中,mysql默认的文件存放位置说明:
/usr/bin 客户端程序和脚本
/usr/sbin mysqld 服务器
/var/lib/mysql 日志文件,数据库 [重点要知道这个]
/usr/share/doc/packages 文档
/usr/include/mysql 包含(头)>文件
/usr/lib/mysql 库
/usr/share/mysql 错误消息和字符集文件
/usr/share/sql-bench 基准程序
所以,如果要修改MYSQL的存储路径,即将上面/var/lib/mysql的指向给变更为我们挂载的目录即可。
- 停止系统服务
systemctl stop lixun
- 停止MYSQL服务
service mysqld stop
- 复制原有数据到挂载目录
cp -arp /var/lib/mysql /data-distance
- 修改挂载目录权限
chown -R mysql:mysql /data-distance
- 修改配置文件
vi /etc/mysql/mysql.conf.d/mysqld.cnf
找到文件中的datadir = /var/lib/mysql,将其注释(前面添加#)掉,随后新增一行,内容为
datadir=/data-distance/mysql,随后保存退出。
# datadir = /var/lib/mysql
datadir = /data-distance/mysql
- 修改启动文件
vi /etc/apparmor.d/usr.sbin.mysqld
找到文件中的/var/lib/mysql r 和/var/lib/mysql/** rwk ,将其改为如下:
# /var/lib/mysql r,
#/var/lib/mysql/** rwk,
/data-distance/mysql r,
/data-distance/mysql/** rwk,
然后保存退出。
- 重启MYSQL服务
/etc/init.d/apparmor restart
/etc/init.d/mysql restart
- 登录MYSQL查看当前配置是否生效
mysql -u root -p
输入密码后,查看配置信息:
show variables like '%data%';
即如果datadir已生效,则说明当前操作已完成。