Nos requêtes Mysql utilisent des tables temporaires qui créent des fichiers temporaires dans le processus. Actuellement, les fichiers sont écrits dans/tmp. Comment exactement le chemin du dossier temporaire dans lequel mysql écrit doit-il être changé?
Vous devez modifier votre my.cnf
tmpdir = /whatewer/you/want
et après cela, redémarrez mysql
P.S. N'oubliez pas d'accorder des autorisations d'écriture à /whatewer/you/want
pour l'utilisateur mysql
Voici un exemple pour déplacer le tmpdir mysqld de/tmp vers/run/mysqld qui existe déjà sur Ubuntu 13.04 et qui est un tmpfs (mémoire/ram):
Sudo vim /etc/mysql/conf.d/local.cnf
Ajouter:
[mysqld]
tmpdir = /run/mysqld
Ensuite:
Sudo service mysql restart
Dernier:
SHOW VARIABLES LIKE 'tmpdir';
================================================== ================
Si vous obtenez une erreur au redémarrage de MySQL, vous pouvez avoir AppArmor activé:
Sudo vim /etc/apparmor.d/local/usr.sbin.mysqld
Ajouter:
# 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,
Ensuite:
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
Ceci est répondu dans la documentation:
Où MySQL stocke les fichiers temporaires
Sous Unix, MySQL utilise la valeur de la variable d'environnement TMPDIR comme nom de chemin du répertoire dans lequel stocker les fichiers temporaires. Si TMPDIR n'est pas défini, MySQL utilise la valeur par défaut du système, qui est généralement/tmp,/var/tmp ou/usr/tmp.
Sous Windows, Netware et OS2, MySQL vérifie dans l'ordre les valeurs des variables d'environnement TMPDIR, TEMP et TMP. Pour le premier trouvé, MySQL l'utilise et ne vérifie pas ceux qui restent. Si aucun TMPDIR, TEMP ou TMP n'est défini, MySQL utilise la valeur par défaut du système Windows, qui est généralement C:\windows\temp.
si vous n'avez pas de problèmes avec apparmor ou selinux, mais obtenez toujours le code d'erreur 13:
mysql doit pouvoir accéder au chemin complet. C'est à dire. tous les dossiers doivent être accessibles par mysql, pas seulement celui que vous souhaitez pointer.
par exemple, vous essayez d'utiliser ceci dans votre configuration 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