记录一次迁移MySQL数据文件到新硬盘的过程

迁移前的环境

MySQL Server 程序编译安装于 qmysql 用户的 /home/qmysql/qmysql/packages 目录下,文件夹结构如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
.
├── data
│   ├── auto.cnf
│   ├── binlog
│   ├── conf
│   ├── ib_buffer_pool
│   ├── ibdata1
│   ├── ib_logfile0
│   ├── ib_logfile1
│   ├── innodb_log
│   ├── innodb_ts
│   ├── log
│   ├── mydata
│   ├── qcs-server.err
│   ├── relaylog
│   ├── slowlog
│   ├── sock
│   ├── tmpdir
│   └── undo
├── mysql -> /home/qmysql/qmysql/packages/mysql-5.7.21-linux-glibc2.12-x86_64
└── mysql-5.7.21-linux-glibc2.12-x86_64
    ├── bin
    ├── COPYING
    ├── data -> /home/qmysql/qmysql/packages/data  [recursive, not followed]
    ├── docs
    ├── include
    ├── lib
    ├── man
    ├── README
    ├── share
    └── support-files

现在在服务器上新加了一块固态硬盘,想将原来存放在机械硬盘的数据库的所有数据文件即 data 文件夹迁移到新硬盘中,以加快数据库的读写效率。

通过 fdisk -l 获取硬盘信息如下:

1
2
3
4
Disk /dev/sdb: 1197.8 GB, 1197759004672 bytes, 2339373056 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

考虑到现在挂载的硬盘均以 lvm 的方式进行分卷,计划从固态硬盘中创建 300G 的逻辑卷,挂载到系统根目录的 /data 目录,然后将 mysql 的数据文件拷贝至该位置,再软链接到原来的位置,这样可以在不更改任何mysql配置的情况下完成迁移。

创建数据卷

  1. 初始化物理卷

    将物理硬盘分区初始化为物理卷,以便LVM使用。参数为要创建的物理卷对应的设备文件名。

    1
    
    pvcreate /dev/sdb
    
  2. 创建卷组

    vgcreate命令用于创建LVM卷组。卷组(Volume Group)将多个物理卷组织成一个整体,屏蔽了底层物理卷细节。在卷组上创建逻辑卷时不用考虑具体的物理卷信息。

    1
    
    vgcreate data_vg /dev/sdb
    
  3. 创建逻辑卷

    创建大小300G大小的逻辑卷 ,-L 指定大小,-n指定名称,最后指定卷组名称

    1
    
    lvcreate -L 300G  -n mysqldata data_vg
    
  4. 格式化逻辑卷

    对逻辑卷进行xfs格式化

    1
    
    mkfs.xfs  /dev/data_vg/mysqldata
    
  5. 挂载文件目录

    1
    
    mount /dev/data_vg/mysqldata  /data
    
  6. 设置开机磁盘自动挂载

    要让系统开机自动挂载磁盘,需要将挂载信息写入到/etc/fstab文件中,否则重启后需要手动挂载。

    1
    2
    3
    4
    5
    6
    7
    8
    
    $ vim /etc/fstab
    
    /dev/mapper/centos00-root /                       xfs     defaults        0 0
    UUID=80f8fe62-70ab-4c9e-8d28-52c0d5e97979 /boot   xfs     defaults        0 0
    /dev/mapper/centos00-home /home                   xfs     defaults        0 0
    /dev/mapper/centos00-swap swap                    swap    defaults        0 0
    /dev/centos00/backup /backup                      xfs     defaults        0 2
    /dev/mapper/data_vg-mysqldata /data               xfs     defaults        0 2
    

    添加最下面一行命令后保存退出。完成。

迁移数据文件

开始迁移前需要关闭 mysql 服务,终止运行数据库。

  1. 切换用户

    为保证文件复制前后的所有者一致,避免出现文件权限问题,首先切换到当前mysql程序下文件的所有者用户 qmysql

  2. 复制文件

    复制所有 mysql 数据文件到固态硬盘的新目录,并保留所有文件目录属性。

    1
    
    cp -ar /home/qmysql/qmysql/packages/data /data/
    
  3. 备份原文件

    保险起见,将原来的数据文件进行备份。

    1
    
    mv data data.bak
    
  4. 重新链接数据文件

    将固态硬盘中的数据文件目录软链接到原来的数据文件位置

    1
    
    ln -s /data/data /home/qmysql/qmysql/packages/
    

重启数据库服务,大功告成!

updatedupdated2022-08-032022-08-03