Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql在将innodb_tmpdir变量更改为较大分区时内存不足_Mysql_Indexing_Bigdata_Innodb - Fatal编程技术网

Mysql在将innodb_tmpdir变量更改为较大分区时内存不足

Mysql在将innodb_tmpdir变量更改为较大分区时内存不足,mysql,indexing,bigdata,innodb,Mysql,Indexing,Bigdata,Innodb,我想在一个非常大的表中索引一个非常大的列。默认的/tmp没有足够的磁盘空间,正在抛出 我有一个更大的分区,可以指向innodb\u tmpdir 我在这个分区中创建了一个tmp目录:/mnt/partition/tmp 将此目录的权限更改为777chmod-R 777/mnt/partition/tmp 然后我通过mysql客户端设置innodb_tmpdir变量指向这个目录:set variable innodb_tmpdir='/mnt/partition/tmp' 通过执行以下命令正确设

我想在一个非常大的表中索引一个非常大的列。默认的
/tmp
没有足够的磁盘空间,正在抛出

我有一个更大的分区,可以指向
innodb\u tmpdir

  • 我在这个分区中创建了一个tmp目录:
    /mnt/partition/tmp
  • 将此目录的权限更改为777
    chmod-R 777/mnt/partition/tmp
  • 然后我通过mysql客户端设置innodb_tmpdir变量指向这个目录:
    set variable innodb_tmpdir='/mnt/partition/tmp'
  • 通过执行以下命令正确设置变量:
    SHOW变量,如'innodb_tmpdir'
当我尝试使用以下基本命令结构创建索引时,会出现问题:

create index a on b (c, d, e, f);
立即抛出以下错误:

ERROR 1041 (HY000): Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space
这个错误是怎么回事?o我需要为我的分区设置一些权限/配置

注1我是通过终端控制台而不是某个第三方客户端(即前台而非后台)运行所有这些操作的

注意2如果我没有设置
innodb_tmpdir
并将所有内容保持为默认值,则index命令运行时不会出现此问题。(显然,由于磁盘空间有限,它中途崩溃了,这正是我更改tmpdir的实际原因。)

my.cnf

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
innodb_buffer_pool_size=4G
innodb_buffer_pool_instances=8
wait_timeout=604800
interactive_timeout=604800
local_infile=ON
binlog_expire_logs_seconds=600
skip-log-bin
交换大小:8.39GB

MYSQL版本:8


机器完全专用于mysql

在您的配置中,您为mysql提供4GB的内存用于缓冲池。是否有可用的物理内存?您是否实际有>6GB或更多的可用RAM?如果没有,请从减小innodb缓冲池的大小开始,使总容量比可用的物理内存低几GB。

问题已解决。原因是Ubuntu的
Apparmour
阻止mysql访问其他文件系统。您需要更改Apparmour的配置,以允许在分区上读写


是解决这个问题的详细解决方案。

MySQL的版本是什么?32位还是64位?你能添加my.cnf的全部内容吗?机器有多少内存/交换空间?除了MySQL之外,还有什么内存不足的地方吗?@pQd添加了有疑问的详细信息。这可能仅仅是因为我正在从终端r运行前台客户端吗a在后台运行?(它似乎是从第三方客户端在后台创建索引)我怀疑。您可以添加以下信息:总可用内存[仅包括命令“free”的输出]、mysql的确切版本[仅包括mysql命令行显示的横幅],如果是32位或64位构建的信息[从mysql命令行运行“显示变量,如'version_compile_machine';”.etc/mysql/conf.d/,/etc/mysql/mysql.conf.d/是否为空?如果不是,请包括保存在那里的所有文件的内容。thx!该设置是在与ALTER相同的连接中完成的吗?@RickJames-感谢您对缓冲池总大小的评论。