Changing the tmp folder of mysql

前端 未结 6 907
我寻月下人不归
我寻月下人不归 2021-02-01 15:22

Our Mysql queries use temporary tables which creates temporary files in the process. Currently the files are written to /tmp. How exactly can the path of the temp folder to whic

相关标签:
6条回答
  • 2021-02-01 16:01

    if you dont have apparmor or selinux issues, but still get errorcode 13's:

    mysql must be able to access the full path. I.e. all folders must be mysql accessible, not just the one you intend in pointing to.

    example, you try using this in your mysql configuration: 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
    
    0 讨论(0)
  • 2021-02-01 16:02

    This maybe helpful for MySql with AppArmor

    stop mysql :

    sudo /etc/init.d/mysql stop
    

    Create directory called /somewhere/tmp

    Edit Config:

    sudo vim /etc/mysql/my.cnf # or perhaps sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

    change

    tmpdir = /somewhere/tmp/

    Then

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

    Add

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

    sudo chown -R root:root /somewhere

    sudo chmod -R 1777 /somewhere

    Restart

     sudo /etc/init.d/apparmor reload
    
     sudo /etc/init.d/mysql restart
    
    0 讨论(0)
  • 2021-02-01 16:08

    This is answered in the documentation:

    Where MySQL Stores Temporary Files

    On Unix, MySQL uses the value of the TMPDIR environment variable as the path name of the directory in which to store temporary files. If TMPDIR is not set, MySQL uses the system default, which is usually /tmp, /var/tmp, or /usr/tmp.

    On Windows, Netware and OS2, MySQL checks in order the values of the TMPDIR, TEMP, and TMP environment variables. For the first one found to be set, MySQL uses it and does not check those remaining. If none of TMPDIR, TEMP, or TMP are set, MySQL uses the Windows system default, which is usually C:\windows\temp.

    0 讨论(0)
  • 2021-02-01 16:12

    Here is an example to move the mysqld tmpdir from /tmp to /run/mysqld which already exists on Ubuntu 13.04 and is a tmpfs (memory/ram):

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

    Add:

    [mysqld]
    tmpdir = /run/mysqld
    

    Then:

    sudo service mysql restart
    

    Verify:

    SHOW VARIABLES LIKE 'tmpdir';
    

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

    If you get an error on MySQL restart, you may have AppArmor enabled:

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

    Add:

    # 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,
    

    Then:

    sudo service apparmor reload 
    

    sources: http://2bits.com/articles/reduce-your-servers-resource-usage-moving-mysql-temporary-directory-ram-disk.html, https://blogs.oracle.com/jsmyth/entry/apparmor_and_mysql

    0 讨论(0)
  • 2021-02-01 16:19

    You should edit your my.cnf

    tmpdir = /whatewer/you/want
    

    and after that restart mysql

    P.S. Don't forget give write permissions to /whatewer/you/want for mysql user

    0 讨论(0)
  • 2021-02-01 16:19

    You can also set the TMPDIR environment variable.

    In some situations (Docker in my case) it's more convenient to set an environment variable than to update a config file.

    0 讨论(0)
提交回复
热议问题