文章目录
一、SSD 初始化
1.1 查看 SSD 信息
1.2 分区
1.3 格式化
1.4 挂载与自动挂载
二、迁移MySQL数据文件
2.1 停止服务
2.2 迁移数据文件目录
2.3 修改目录权限
2.4 新建软链接
2.5 重启服务
最近项目遇到 MySQL 的效率瓶颈,尝试从配置及代码层面进行优化,但是并没有取得比较显著的效果,于是打算将MySQL迁移至固态硬盘,以解决效率瓶颈问题。

在迁移前,有两个要求:

原有数据必须保留
不更改 MySQL 的配置文件(因为集群服务器数比较多,更改配置文件会比较繁琐)
以下是具体步骤。

一、SSD 初始化
1.1 查看 SSD 信息
首先,输入 fdisk -l 命令查看 SSD 信息。

Disk /dev/sda: 240.1 GB, 240057409536 bytes
 255 heads, 63 sectors/track, 29185 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
 Sector size (logical/physical): 512 bytes / 4096 bytes
 I/O size (minimum/optimal): 4096 bytes / 4096 bytes
 Disk identifier: 0x00e800e8


我们发现 SSD 已经插入,但此时它还没有分区,需要先进行分区操作。

1.2 分区
输入命令 fdisk /dev/sda 进行磁盘管理窗口,然后按照以下步骤完成硬盘分区:

输入 n 按回车新建分区
输入 p 选择新建主分区
输入分区数量(1-4)
设置分区起始柱面
设置分区结束柱面
输入 p 查看是否分区成功,若成功,会有如下分区信息:

Device Boot Start End Blocks Id System
 /dev/sda1 1 29185 234428481 83 Linux
 Partition 1 does not start on physical sector boundary.


输入 w 按回车保存退出
1.3 格式化
mkfs.xfs /dev/sda1
1
1.4 挂载与自动挂载
此时,新加入的硬盘还无法使用,需要我们完成挂载,具体步骤如下:

在根目录下新建 data 文件夹
输入命令 mount /dev/sda1 /data 完成挂载
输入命令 df -h 查看文件系统使用情况,若挂载成功,会包含以下记录:
/dev/sda1 224G 6.2G 218G 3% /data
1
为防止重启后挂载失效,我们还需要设置开机自动挂载,具体步骤如下:

输入命令 vi /etc/fstab 进入 fstab 文件的编辑界面
在文件底部新增如下记录:
/dev/sda1 /data xfs defaults 0 0
1

二、迁移MySQL数据文件
2.1 停止服务
service mysql stop
1
2.2 迁移数据文件目录
MySQL 默认数据文件目录为 /var/lib/mysql,若不清楚可查看配置文件 /etc/my.cnf(也可能是 /usr/my.cnf)。

现在,我们输入以下命令,将数据文件迁移至新硬盘。如果数据文件比较大,这个过程可能会有点久。

mv /var/lib/mysql/ /data
1
2.3 修改目录权限
chown -R mysql:mysql /data/mysql/
1
2.4 新建软链接
我们在一开始的时候说过,想要迁移数据文件又不想修改配置文件,因此在这里需要通过软链接实现。

输入以下命令建立软链接:

ln -s /data/mysql /var/lib/mysql
1
若链接成功,可以查看到如下信息:

lrwxrwxrwx 1 root root 11 Jan 16 18:11 mysql -> /data/mysql
1
2.5 重启服务
service mysql restart
1
至此,我们完成了迁移 MySQL 数据文件至新硬盘的工作!

1、确定mysql数据库文件存放目录

一般默认是在/var/lib/mysql目录下。

先登录自己的mysql数据库,比如我用root账户登录,然后使用下面查询语句查询:

show variables like ‘%dir%’;

得到数据库文件配置信息:

mysql数据文件迁移(转)(亲测可用) - 东辰 - 陈晨的博客

可以看到其中datadir的值为/var/lib/mysql/即为当前数据库文件存放目录。

另外一个basedir参数表示mysql数据库的安装位置,迁移数据库文件位置不需要改动这个参数。

2、迁移数据库文件到新的目录下

先使用下面命令将mysql数据库服务停止:

sudo /etc/init.d/mysql stop

我新的数据盘挂载在/mnt/wintime/ 目录下,因此要将数据库迁移到/mnt/wintime/mysql/。

2.1 可以使用mv命令将原数据库目录文件移动到新的目录,好处是不会简单,不会修改原数据库文件的权限,以及用户和用户组归属:

sudo mv /var/lib/mysql /mnt/wintime/mysql/

2.2 也可以使用cp复制命令将原数据库目录文件复制到新的目录,好处是。。万一迁移失败,恢复工作相对简单一点,等确认迁移成功再来删掉原数据库目录文件也不迟。为了不影响复制过来数据库目录文件权限和用户用户组归属问题,使用cp命令时要加上-a参数:

sudo cp -a /var/lib/mysql /mnt/wintime/mysql/

注:由于/var/lib/mysql目录归属于mysql数据库创建的mysql用户和mysql用户组,所以迁移文件的时候需要使用root权限,命令要使用sudo

迁移成功后,可以看到/mnt/wintime/mysql/目录下已经将mysql数据库文件迁移过来了,并且目录文件的用户用户组归属还是mysql,没有变化:

3、修改配置文件

一共有三个配置文件需要修改:

3.1 my.cnf文件

mysql数据库会按顺序优先级从/etc/my.cnf、/etc/mysql/my.cnf、/usr/etc/my.cnf、~/.my.cnf四个位置找my.cnf配置文件,一旦找到就不再继续往下找。Ubuntu默认将my.cnf配置文件放在/etc/mysql/my.cnf位置,所以在/etc/my.cnf位置没有找到这个配置文件。

选择自己使用的文本编辑器编辑my.cnf配置文件,我用vim,所以sudo vim /etc/mysql/my.cnf。一样需要sudo,使用root权限编辑。将其中[mysqld]标签下的datadir属性值改为新数据库目录路径/mnt/wintime/mysql/mysql,