背景

在Ubuntu系统中,如果原先划分的磁盘分区空间不均匀,可能会遇到将MySQL数据库数据存储路径更改到更有空间的分区的情况。本文将详细介绍如何在Ubuntu上轻松更改MySQL数据库存储位置,并避免在数据迁移过程中遇到的问题。

1. 备份现有数据库数据

在更改datadir之前,建议备份现有的MySQL数据,以防数据丢失。以下是备份所有数据库的命令:

mysqldump --all-databases > all-databases-backup.sql

2. 停止MySQL服务

查看MySQL当前状态:

service mysql status

或者使用:

systemctl status mysql

停止MySQL服务:

sudo systemctl stop mysql

再次查看MySQL的状态以确保服务已停止。

3. 复制现有的MySQL数据到新目录

首先,需要确定MySQL的数据文件地址。可以使用以下命令查看:

show global variables like "%datadir%";

假设原始的MySQL数据文件保存路径为/var/lib/mysql/,而新目录为/home/soft/mysqldatadir,可以使用以下命令进行数据迁移:

sudo cp -R /var/lib/mysql /home/soft/mysqldatadir

4. 修改MySQL配置文件

编辑MySQL的配置文件,通常位于/etc/my.cnf/etc/mysql/my.cnf。找到datadir参数并将其值更改为新路径:

[mysqld]
datadir=/home/soft/mysqldatadir

如果使用的是my.ini文件(Windows系统),则修改如下:

[mysqld]
datadir=/home/soft/mysqldatadir

5. 更新AppArmor或SELinux配置(如有启用)

如果AppArmor或SELinux配置已启用,可能需要更新其配置以允许MySQL访问新目录。以下是对AppArmor配置的示例:

sudo nano /etc/apparmor.d/usr.sbin.mysqld

找到与/var/lib/mysql相关的行,并更改为新路径:

/data/mysql r,
/data/home/soft/mysqldatadir r,

对于SELinux,可以使用以下命令更新:

sudo semanage fcontext -a -t mysqld_t "/home/soft/mysqldatadir(/.*)?"

6. 修改MySQL系统文件中的datadir

编辑/etc/mysql/debian.cnf(对于Debian/Ubuntu系统):

sudo nano /etc/mysql/debian.cnf

找到datadir参数并将其值更改为新路径:

datadir=/home/soft/mysqldatadir

7. 启动MySQL服务

启动MySQL服务:

sudo systemctl start mysql

8. 验证更改

确认MySQL服务正在运行,并检查新路径下的数据文件:

mysql -u root -p

在MySQL命令行中,执行以下命令以验证datadir是否已更改:

SHOW VARIABLES LIKE 'datadir';

输出应显示新路径。

通过以上步骤,您可以轻松地将MySQL数据库存储位置更改到新的磁盘分区,同时确保数据迁移过程中的安全性。