将MySQL数据库移动到单独的磁盘

时间:2020-01-09 10:42:41  来源:igfitidea点击:

说明

Mysql数据库都存储在同一磁盘上,存在严重的IO瓶颈,如何将负载分散到多个存储设备上?

MySQL没有像其他企业数据库服务器那样为每个数据库配置单独的存储路径的选项。解决方案是将新存储设备中的数据库符号链接到MySQL数据主目录

只要新位置具有适当的所有权和SELINUX上下文,这就会使MySQL认为我们迁移的数据库仍然存在于数据主目录中。

数据库服务器情况

我们有一台MySQL 5.1服务器,在单个磁盘上托管五个数据库。
需要将其移动到单独的存储中。数据库信息如下所示。

数据库旧数据位置新数据位置
webapp02/var/lib/mysql/webapp02/Databases/webapp02

数据库的存储。

设备名称类型配置
RAID 10中的sdbSCSI4个物理磁盘

准备新存储

  • 将新的存储设备连接到服务器。
  • 创建一个分区并使用文件系统对其进行格式化。创建一个根目录,该目录将用于包含新存储的安装点。
mkdir /Databases
  • 对于每个要迁移的数据库,创建一个文件夹以供其存储设备装入。
mkdir /Databases/webapp02
  • 将新目录的SELINUX上下文类型设置为mysqld_db_t以允许MySQL访问它们。
chcon -r -t mysqld_db_t /Database
  • 修改fstab

将数据库复制到新存储

  • 使用cp and-preserve = all将数据库文件复制到新位置以维护所有权和SELINUX上下文。
cp -r -preserve=all /var/lib/mysql/mydb1 /new-mydb1-location
  • 验证SELINUX上下文是否正确应用于目录和文件。
ls -lZ /Databases && ls -lZ /Databases/*

将MySQL指向新的数据库位置

  • 停止MySQL守护程序。
service mysqld stop
  • 导航到MySQL数据主目录,默认情况下为/ var / lib / mysql。
  • 删除要迁移的数据库的数据库目录,并记下目录名称。下一步将需要它们。
  • 创建指向要迁移的每个数据库的存储的软链接。链接文件名必须与数据库目录名相同。
ln -s /Databases/myappdb1 myappdb1
  • 对要移动的每个数据库重复该过程。
  • 迁移所有数据库后,重新启动MySQL守护程序。
  • 如果一切顺利,MySQL应该正确启动。如果不是,请检查系统日志中是否存在Selinux上下文错误。