【问题标题】:Changing the tmp folder of mysql更改mysql的tmp文件夹
【发布时间】:2012-08-16 15:44:47
【问题描述】:

我们的 Mysql 查询使用临时表,在此过程中创建临时文件。当前文件被写入/tmp。 mysql写入的temp文件夹的路径到底怎么改?

【问题讨论】:

    标签: mysql tmp


    【解决方案1】:

    你应该编辑你的 my.cnf

    tmpdir = /whatewer/you/want
    

    然后重启mysql

    附:不要忘记为 mysql 用户授予/whatewer/you/want 的写入权限

    【讨论】:

      【解决方案2】:

      这是一个将 mysqld tmpdir 从 /tmp 移动到 /run/mysqld 的示例,它在 Ubuntu 13.04 上已经存在并且是一个 tmpfs(内存/ram):

      sudo vim /etc/mysql/conf.d/local.cnf
      

      添加:

      [mysqld]
      tmpdir = /run/mysqld
      

      然后:

      sudo service mysql restart
      

      验证:

      SHOW VARIABLES LIKE 'tmpdir';
      

      ================================================ ====================

      如果您在 MySQL 重启时遇到错误,您可能启用了 AppArmor:

      sudo vim /etc/apparmor.d/local/usr.sbin.mysqld
      

      添加:

      # Site-specific additions and overrides for usr.sbin.mysqld.
      # For more details, please see /etc/apparmor.d/local/README.
      /run/mysqld/ r,
      /run/mysqld/** rwk,
      

      然后:

      sudo service apparmor reload 
      

      来源:http://2bits.com/articles/reduce-your-servers-resource-usage-moving-mysql-temporary-directory-ram-disk.htmlhttps://blogs.oracle.com/jsmyth/entry/apparmor_and_mysql

      【讨论】:

        【解决方案3】:

        这在文档中有回答:

        Where MySQL Stores Temporary Files

        在 Unix 上,MySQL 使用 TMPDIR 环境变量的值作为 存储临时文件的目录的路径名。如果 没有设置TMPDIR,MySQL使用系统默认值,通常是 /tmp、/var/tmp 或 /usr/tmp。

        在 Windows、Netware 和 OS2 上,MySQL 按顺序检查 TMPDIR、TEMP 和 TMP 环境变量。对于第一个找到的 要设置,MySQL 使用它并且不检查剩余的那些。如果没有 TMPDIR, TEMP, 或 TMP 的设置,MySQL 使用 Windows 系统 默认,通常是 C:\windows\temp。

        【讨论】:

        • 其他答案要好得多,因为它们解释了如何在 MySQL 配置文件中设置 tmpdir 而不是依赖环境变量。
        【解决方案4】:

        如果您没有 apparmor 或 selinux 问题,但仍然收到错误代码 13:

        mysql 必须能够访问完整路径。 IE。所有文件夹都必须是 mysql 可访问的,而不仅仅是您打算指向的文件夹。

        例如,您尝试在 mysql 配置中使用它:tmp = /some/folder/on/disk

        # will work, as user root:
        mkdir -p /some/folder/on/disk
        chown -R mysql:mysql /some
        
        # will not work, also as user root:
        mkdir -p /some/folder/on/disk
        chown -R mysql:mysql /some/folder/on/disk
        

        【讨论】:

          【解决方案5】:

          这可能对带有 AppArmor 的 MySql 有帮助

          停止mysql:

          sudo /etc/init.d/mysql stop
          

          创建名为/somewhere/tmp的目录

          编辑配置:

          sudo vim /etc/mysql/my.cnf # 或者sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

          改变

          tmpdir = /somewhere/tmp/

          那么

          sudo vim /etc/apparmor.d/usr.sbin.mysqld
          

          添加

          # Allow data dir access
            /somewhere/ r,
            /somewhere/** rwk,
          

          sudo chown -R root:root /somewhere

          sudo chmod -R 1777 /某处

          重启

           sudo /etc/init.d/apparmor reload
          
           sudo /etc/init.d/mysql restart
          

          【讨论】:

            【解决方案6】:

            您还可以设置TMPDIR 环境变量。

            在某些情况下(在我的例子中是 Docker)设置环境变量比更新配置文件更方便。

            【讨论】:

              【解决方案7】:

              在 centos 8 上适用于 5.7

              mkdir /tmp/1 /tmp/1
              
              semanage fcontext -a -t mysqld_db_t "/tmp/1(/.*)?"
                                 
              restorecon -Rv /tmp/1
              
              semanage fcontext -a -t mysqld_db_t "/tmp/2(/.*)?"
              
              restorecon -Rv /tmp/2
              
              to my.cnf tmpdir=/tmp/1:/tmp/2
              
              sudo service mysql restart
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-04-22
                • 1970-01-01
                • 1970-01-01
                • 2011-06-19
                • 2016-02-07
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多