如何在 Linux 中更改默认 MySQL/MariaDB 数据目录
在 CentOS/RHEL 7 服务器上安装 LAMP 堆栈的组件后,您可能需要执行一些操作。
其中一些与提高 Apache 和 MySQL/MariaDB 的安全性有关,而另一些则根据我们的设置或需求可能适用或不适用。
例如,根据数据库服务器的预期用途,我们可能希望将默认的data目录(/var/lib/mysql
)更改为不同的位置。当此类目录由于高使用率而预计会增长时,就会出现这种情况。
否则,存储 /var
的文件系统可能会在某一时刻崩溃,导致整个系统失败。更改默认目录的另一种情况是当我们有一个专用网络共享想要用来存储实际数据时。
因此,在本文中,我们将解释如何在 CentOS/RHEL 7 服务器和 Ubuntu/Debian 发行版上将默认的 MySQL/MariaDB 数据目录更改为不同的路径。
尽管我们将使用 MariaDB,但除非另有说明,本文中解释的概念和采取的步骤都适用于 MySQL 和 MariaDB。
更改默认 MySQL/MariaDB 数据目录
注意:我们假设新的数据目录是/mnt/mysql-data
。需要注意的是,该目录应该属于 mysql:mysql
所有。
mkdir /mnt/mysql-data
chown -R mysql:mysql /mnt/mysql-data
为了您的方便,我们将该过程分为 5 个易于遵循的步骤:
第1步:识别当前MySQL数据目录
首先,使用以下命令来识别当前数据目录是值得且很好的。不要仅仅假设它仍然是 /var/lib/mysql
因为它在过去可能已被更改。
mysql -u root -p -e "SELECT @@datadir;"
输入 MySQL 密码后,输出应类似于以下内容。
步骤 2:将 MySQL 数据目录复制到新位置
为了避免数据损坏,请先停止该服务(如果该服务当前正在运行),然后再继续。使用 systemd 众所周知的命令来执行此操作:
------------- On SystemD -------------
systemctl stop mariadb
systemctl is-active mariadb
------------- On SysVInit -------------
service mysqld stop
service mysqld status
OR
service mysql stop
service mysql status
如果服务已关闭,则最后一个命令的输出应如下所示:
然后将 /var/lib/mysql
的内容递归复制到 /mnt/mysql-data
并保留原始权限和时间戳:
cp -R -p /var/lib/mysql/* /mnt/mysql-data
第3步:配置新的MySQL数据目录
编辑配置文件 (my.cnf
) 以指示新数据目录(在本例中为 /mnt/mysql-data
)。
vi /etc/my.cnf
OR
vi /etc/mysql/my.cnf
找到 [mysqld]
和 [client]
部分并进行以下更改:
Under [mysqld]:
datadir=/mnt/mysql-data
socket=/mnt/mysql-data/mysql.sock
Under [client]:
port=3306
socket=/mnt/mysql-data/mysql.sock
保存更改,然后继续下一步。
步骤 4:将 SELinux 安全上下文设置为数据目录
此步骤仅适用于RHEL/CentOS及其衍生产品。
在重新启动 MariaDB 之前,将 SELinux 安全上下文添加到 /mnt/mysql-data
中。
semanage fcontext -a -t mysqld_db_t "/mnt/mysql-data(/.*)?"
restorecon -R /mnt/mysql-data
接下来重新启动 MySQL 服务。
------------- On SystemD -------------
systemctl stop mariadb
systemctl is-active mariadb
------------- On SysVInit -------------
service mysqld stop
service mysqld status
OR
service mysql stop
service mysql status
现在,使用与步骤 1 中相同的命令来验证新数据目录的位置:
mysql -u root -p -e "SELECT @@datadir;"
步骤5:创建MySQL数据库以确认数据目录
登录MariaDB,创建一个新数据库,然后检查/mnt/mysql-data
:
mysql -u root -p -e "CREATE DATABASE tecmint;"
恭喜!您已成功更改 MySQL 或 MariaDB 的数据目录。
概括
在这篇文章中,我们讨论了如何更改在 CentOS/RHEL 7 和 Ubuntu/Debian 发行版上运行的 MySQL 或 MariaDB 服务器中的数据目录。
您对本文有任何疑问或意见吗?请随时使用下面的表格告诉我们 – 我们很高兴收到您的来信!