Mysql挂盘指的是将新的磁盘挂载到系统中,把Mysql的数据存储目录迁移到新磁盘上,从而扩展数据库的存储空间,解决原有磁盘空间不足的问题。这个操作需要按照规范的步骤执行,避免影响Mysql服务的正常运行。

前期准备工作
首先需要确认新磁盘已经正确连接到服务器,并且已经完成分区和格式化操作。可以通过fdisk -l命令查看当前系统的磁盘列表,确认新磁盘的设备名称,比如/dev/sdb。如果新磁盘还没有分区,可以先使用fdisk /dev/sdb命令创建分区,之后使用mkfs.ext4 /dev/sdb1命令将分区格式化为ext4文件系统,具体文件系统类型可以根据实际需求选择。
创建挂载目录并临时挂载
接下来需要创建一个目录作为新磁盘的挂载点,通常可以选择/data/mysql作为Mysql的新数据目录。执行以下命令创建目录:
# 创建挂载目录 mkdir -p /data/mysql # 临时挂载新磁盘到该目录 mount /dev/sdb1 /data/mysql # 查看挂载结果 df -h
执行df -h命令后,如果能看到/dev/sdb1挂载到了/data/mysql,说明临时挂载成功。
迁移Mysql原有数据
在迁移数据之前,需要先停止Mysql服务,避免数据写入导致迁移后数据不一致。执行以下命令停止服务:
# 停止Mysql服务,不同系统命令可能不同 systemctl stop mysqld # 或者 service mysql stop
停止服务后,需要把原有Mysql数据目录下的所有文件复制到新的挂载目录中。默认的Mysql数据目录通常是/var/lib/mysql,执行以下命令复制数据:
# 复制原有数据到新目录,-a参数保留文件权限和属性 cp -a /var/lib/mysql/* /data/mysql/ # 修改新目录的所有者为mysql用户,避免权限问题 chown -R mysql:mysql /data/mysql
修改Mysql配置文件
数据迁移完成后,需要修改Mysql的配置文件,指定新的数据目录。Mysql的配置文件通常是/etc/my.cnf或者/etc/mysql/my.cnf,找到[mysqld]配置段,修改datadir和socket参数:
[mysqld] # 原配置可能是datadir=/var/lib/mysql datadir=/data/mysql # 原配置可能是socket=/var/lib/mysql/mysql.sock socket=/data/mysql/mysql.sock [client] # 客户端也需要指定新的socket路径,避免连接失败 socket=/data/mysql/mysql.sock
修改完成后保存配置文件。
配置开机自动挂载
为了避免服务器重启后新磁盘挂载失效,需要修改/etc/fstab文件,添加自动挂载配置。先通过blkid /dev/sdb1命令获取新磁盘分区的UUID,然后在/etc/fstab文件末尾添加以下内容:
# UUID替换为实际查询到的值,文件系统类型根据实际格式化类型调整 UUID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data/mysql ext4 defaults 0 0
添加完成后可以执行mount -a命令验证配置是否正确,如果没有报错说明自动挂载配置生效。
启动Mysql服务并验证
完成以上所有步骤后,就可以启动Mysql服务了:
# 启动Mysql服务 systemctl start mysqld # 或者 service mysql start
服务启动后,可以登录Mysql执行以下命令验证数据目录是否修改成功:
-- 登录Mysql后执行 SHOW VARIABLES LIKE 'datadir';
如果返回的结果是/data/mysql/,说明Mysql挂盘操作已经成功完成。之后可以查看新磁盘的使用情况,确认数据存储已经切换到新磁盘上。
注意事项
- 操作前一定要备份原有Mysql数据,避免操作失误导致数据丢失。
- 复制数据时要保留文件的权限和属性,否则可能出现Mysql无法读取数据的问题。
- 修改配置文件后要检查语法是否正确,避免服务启动失败。
- 如果服务器上开启了SELinux,可能需要调整SELinux的上下文配置,允许Mysql访问新的数据目录。