0x01 前言

我家里有一台1年前安装的centos,跑着一些小脚本,而这些脚本需要用到maraidb。因为当时采用了默认的分区方案,所以绝大部分的磁盘空间都在home目录下,面对日益增长的数据库,我只好迁移mariadb的data文件夹。

因为我一般会将selinux关闭,所以迁移的过程并没有任何问题,如果你系统里的selinux处于启用状态,那么我这篇文章可能不适合你。如果需要确认selinux的状态,则可以执行以下命令:

如果显示为disable则为已关闭。

0x02 准备

一般情况下,mariadb的data文件夹会在以下路径:

但为了安全起见,需要通过CLI确认路径:

然后关闭所有需要用到mariadb的程序,再执行以下命令关闭mariadb:

一定要确认mariadb已经安全地关闭,否则很有可能会使数据库损坏:

一定要确认最后一行出现了以上内容,否则请不要进行迁移的工作。

0x03 迁移

再三确认mariadb已经安全地关闭后,在目标路径建立新的data文件夹,在这里我以以下路径作为示例:

在根目录下新建一个名为mysql_database的文件夹,并将所有权与组修改为mysql:

然后将原data目录中的所有文件同步或复制到新的目录中,在这里需要注意保留相关文件的权限。为此,这里有两种方法:

如果使用cp命令则需要使用“-p”选项,以便保留文件的属性;如果使用rsync则需要使用“-a”选项,同时建议使用“-v”选项以便观察同步进度。

以上命令选一即可,完成后即可查看相关文件的属性:

确认无误后,即可将原目录重命名:

注意!在确认迁移成功之前请不要删除原目录,也不要使用mv命令将原目录移动至新路径中!!!

0x04 配置

完成数据的迁移后还不能启动,还需要修改mariadb的配置文件,以便让mariadb知道自己的data目录。为此,我们需要在以下文件中添加几行内容:

完成后的文件类似下图:

因为服务器的socket路径变了,为方面本地client的使用方便,还需要修改client的配置文件,以便让client知道socket的路径:

完成后的文件如下:

至此已完成配置文件的修改,此时再打开一个console窗口,执行以下命令以便观察启动的日志:

最后执行以下命令,立即启动mariadb:

如果一切正常,那么通过以下命令即可发现mariadb处于运行状态:

从箭头处也可以发现data目录也变更为我们自定义的目录,再回头查看message中的日志:

没有发现异常或告警,至此可以确认迁移成功。

0x05 其他

在centos中迁移的过程比较简单,其实也可以将data目录迁移至其他mariadb实例中,但新旧实例的版本号须一致。

而在某些情况下,如果出现类似以下的错误日志:

则可以尝试修改以下文件:

将[Service]块中ProtectHome的值修改为false。但升级版本后有可能使得mariadb的daemon被还原,因此可以将该配置添加至以下文件中:

但通过查询相关资料发现,当mariadb的data文件放置在/home目录中才需要将上述选项设置为false。

另外,还可以将ProtectSystem设为off,具体的说明请参考以下地址:

最后还需要注意一个安全系统apparmor,这个并没有预设在centos中,因为centos有selinux,但如果你用的是OpenSUSE或Ubuntu,则需要修改以下文件:

搜索/var/lib/mysql,会发现两处高亮的地方,第一处是:

为此,我们需要照搬上面的内容,并添加到文档中:

第二处如下:

将以下内容添加到文档中: