我想更改ibtmp1
在 debian 11 上存储在 mysql 8.0.25 中的路径。如何做到这一点?我懂了:
mysql> SELECT * FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='innodb_temporary'\G
*************************** 1. row ***************************
FILE_ID: 4294967293
FILE_NAME: ./ibtmp1
我改变了mysqld.cnf
:
[mysqld]
innodb_tmpdir=/$newDir/
innodb_temporary=/$newDir/
innodb_temp_tablespaces_dir=/$newDir/
innodb_temp_data_file_path=/$newDir/
重新启动mysqld
,但这并没有改变任何事情。与:
mysql> SELECT @@innodb_temp_data_file_path;
+------------------------------+
| @@innodb_temp_data_file_path |
+------------------------------+
| ibtmp1:12M:autoextend |
+------------------------------+
仅当我更改init.d
脚本时:
mysqld_safe --innodb-tmpdir=/$newDir/
我看到mysql> SELECT @@innodb_tmpdir;
路径已设置(不幸的是,这不会影响ibtmp1
.
我不确定是否mysqld.cnf
正确读取,但/usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
显示其中一个 conf 文件是正确的。
有没有办法通过 mysql 语句来做到这一点 - 它看起来如何?最简单的方法,在文件系统中创建符号链接,(不再)不起作用。
大约在第 13 行,它将说明配置文件的位置。它可能没有按照您的拼写方式拼写。我的说
Rick James 的回答让我意识到(为什么)没有读取 conf 文件。所以我复制
/etc/mysql/mysql.conf.d/mysqld.cnf
到/etc/mysql/my.cnf
. 那个读得很好。然后我必须定义(inmy.cnf
):$yourNewTmpPath
用您的新临时目录替换。(根据需要采用您的innodb_temp_data_file_path
参数(您可能不需要))。50G
autoextend
重启
mysqld
。您可以通过以下方式评估设置是否正确使用:
现在我可以用
... CONVERT TO CHARACTER SET utf8mb4;
. 在我的 NFS 挂载上,它会生成一些临时.nfs0000...
文件,这些文件会不时删除并重新创建。我认为他们一次最多需要大约 50GB。我还观察了mysqld
(使用iotop -oPa
)的 IO 操作,写入操作达到 >1TB,读取操作达到 >1TB。所以,这里的关键是将配置文件复制到它确实被使用的地方——并为它们使用正确的变量和值。