我正在恢复200GB数据库到新安装的RHEL机器。然而,在恢复时我遇到了no space available
问题。
是否可以更改数据库的存储目录?
答案1
首先,我仅使用以下查询即可验证它是否与空间问题相关mysql
。
mysql -uUSER -p -e 'SHOW VARIABLES WHERE Variable_Name LIKE "%dir"'
上面的命令返回给我的输出为,
+---------------------------+----------------------------+
| Variable_name | Value |
+---------------------------+----------------------------+
| basedir | /usr |
| character_sets_dir | /usr/share/mysql/charsets/ |
| datadir | /var/lib/mysql/ |
| innodb_data_home_dir | |
| innodb_log_group_home_dir | ./ |
| lc_messages_dir | /usr/share/mysql/ |
| plugin_dir | /usr/lib/mysql/plugin/ |
| slave_load_tmpdir | /tmp |
| tmpdir | /tmp |
+---------------------------+----------------------------+
从上面的命令我们可以看到,数据目录存在于/var/lib/mysql
.现在,我需要确保/var
没有足够的空间来容纳数据库,在这种情况下我的检测是正确的。我使用以下命令实现了它。
df -P /var | tail -1 | cut -d' ' -f 1
上面的命令基本上告诉了特定目录的挂载点。正如我怀疑的那样,挂载点在/dev/sda2
其下只有40GB空间。现在,更改数据目录非常简单。
使用停止 mysql 服务,
service mysqld stop
编辑该文件/etc/my.cnf
以使其具有数据目录到有足够空间的某个分区。(这是针对 RHEL 的,可能因操作系统版本而异)。更改数据目录,使用命令重新启动mysql服务,
service mysqld start
参考
答案2
是的,您可以通过更改 .db 文件中的 datadir 变量来更改 MySQL 数据库数据所在的位置/etc/my.cnf
。
在尝试以下步骤之前,请确保备份您的数据。
- 停止 mysqld 服务 (
systemctl mysqld stop
)。 - 编辑
/etc/my.cnf
datadir 变量并将其更改为您想要的位置 (datadir='insert_path_to_new_location'
),并确保记下之前的位置以供下一步使用。 - 将数据从旧的 datadir 位置复制到新位置。
- 启动 mysqld 服务 (
systemctl mysqld start
)。 - 验证 mysqld 服务是否在新位置正常工作。
- 清理旧数据目录中的残留物!
答案3
是的,您可以使用 my.cnf 文件中的设置来更改 MySQL 数据库的驻留位置。