mysql数据库没有可用空间

Ram*_*esh 3 directory-structure mysql

我正在将200 GB 的数据库恢复到新安装的RHEL机器中。但是,在恢复时我遇到了no space available问题。

是否可以更改存储数据库的目录?

Ram*_*esh 5

首先,我只能使用以下mysql查询来验证它是否与空间问题有关。

mysql -uUSER -p -e 'SHOW VARIABLES WHERE Variable_Name LIKE "%dir"'
Run Code Online (Sandbox Code Playgroud)

上面的命令将输出返回给我,

+---------------------------+----------------------------+
| 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                       |
+---------------------------+----------------------------+
Run Code Online (Sandbox Code Playgroud)

从上面的命令中我们可以看到,datadir存在于/var/lib/mysql. 现在,我需要确保/var没有足够的空间来容纳数据库,在这种情况下我的检测是正确的。我使用以下命令实现了它。

df -P /var | tail -1 | cut -d' ' -f 1
Run Code Online (Sandbox Code Playgroud)

上面的命令基本上告诉了特定目录的挂载点。正如我所怀疑的,挂载点在/dev/sda2其下只有40 GB 的空间。现在,更改 datadir 很简单。

停止使用mysql服务,

service mysqld stop
Run Code Online (Sandbox Code Playgroud)

编辑文件/etc/my.cnf以将datadir放到我们有足够空间的某个分区。(这适用于 RHEL,可能因操作系统版本而异)。更改datadir 后,使用命令重新启动 mysql 服务,

service mysqld start
Run Code Online (Sandbox Code Playgroud)

参考

/sf/ask/1257780121/

/sf/ask/229204811/