Documentation Home
MySQL 5.7 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 37.9Mb
PDF (A4) - 38.0Mb
PDF (RPM) - 36.5Mb
HTML Download (TGZ) - 9.9Mb
HTML Download (Zip) - 9.9Mb
HTML Download (RPM) - 8.7Mb
Man Pages (TGZ) - 210.0Kb
Man Pages (Zip) - 319.1Kb
Info (Gzip) - 3.5Mb
Info (Zip) - 3.5Mb
Excerpts from this Manual

B.5.2.12 Can't create/write to file

If you get an error of the following type for some queries, it means that MySQL cannot create a temporary file for the result set in the temporary directory:

Can't create/write to file '\\sqla3fe_0.ism'.

The preceding error is a typical message for Windows; the Unix message is similar.

One fix is to start mysqld with the --tmpdir option or to add the option to the [mysqld] section of your option file. For example, to specify a directory of C:\temp, use these lines:

[mysqld]
tmpdir=C:/temp

The C:\temp directory must exist and have sufficient space for the MySQL server to write to. See Section 4.2.6, “Using Option Files”.

Another cause of this error can be permissions issues. Make sure that the MySQL server can write to the tmpdir directory.

Check also the error code that you get with perror. One reason the server cannot write to a table is that the file system is full:

shell> perror 28
OS error code  28:  No space left on device

If you get an error of the following type during startup, it indicates that the file system or directory used for storing data files is write protected. Provided that the write error is to a test file, the error is not serious and can be safely ignored.

Can't create test file /usr/local/mysql/data/master.lower-test

User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
  Posted by Mike Tee on October 15, 2010
If you are running Microsoft Security Essentials on Windows, here's a way to fix the issue. Go to Settings > Excluded Files & Locations. Click on Add, and browser to the MySQL folder.

On my computer, it's c:\wamp\bin\mysql

Click OK, and Save Changes.
  Posted by Austin Swinney on January 5, 2011
On linux, Security-Enhanced Linux (SELinux) might be enabled.

`man selinux` or google "disable selinux"

  Posted by Dong Guo on December 8, 2011
If you are using RHEL or CentOS, it may be caused by SELinux firewall settings.
  Posted by curtis pastore on January 11, 2012
Here is a good link that really helped me out with SE linux

http://wiki.centos.org/HowTos/SELinux#head-eb72e09eb6c064aa5124982734323c81f99bc4be
  Posted by don le quy on May 5, 2013
in Mac OS, if you made changes to folder temp (delete, recreate), the owner of folder "temp" should be changed, so mysql can not make changes with it

we have to change owner of folder "temp" to "nobody"

open terminal and enter without ""

"sudo chown nobody /applications/xampp/xamppfiles/temp"
then enter your computer's password

/applications/xampp/xamppfiles/temp is link to your folder "temp"
  Posted by Karthick Subramanian on August 19, 2016
For CentOS/RHEL (7), this is due to SElinux.

Connect to mysql:

MariaDB [(none)]> show variables like '%dir%';
+-----------------------------------------+----------------------------+
| Variable_name | Value |
+-----------------------------------------+----------------------------+
| aria_sync_log_dir | NEWFILE |
| basedir | /usr/ |
| binlog_direct_non_transactional_updates | OFF |
| character_sets_dir | /usr/share/mysql/charsets/ |
| datadir | /var/lib/mysql/ |
| ignore_db_dirs | |
| innodb_data_home_dir | |
| innodb_log_arch_dir | ./ |
| innodb_log_group_home_dir | ./ |
| innodb_max_dirty_pages_pct | 50.000000 |
| innodb_max_dirty_pages_pct_lwm | 0.001000 |
| innodb_tmpdir | |
| innodb_undo_directory | . |
| lc_messages_dir | |
| plugin_dir | /usr/lib64/mysql/plugin/ |
| slave_load_tmpdir | /tmp |
| tmpdir | /tmp |
| wsrep_data_home_dir | /var/lib/mysql/ |
| wsrep_dirty_reads | OFF |
+-----------------------------------------+----------------------------+

Once you locate the tmpdir location(/tmp in my example), you can go back to shell prompt:

# ls -lZ /tmp
-rw-------. root root system_u:object_r:rpm_tmpfs_t:s0 yum_save_tx.2016-08-18.06-35.AdDY3e.yumtx

# semanage fcontext -a -t mysqld_db_t "/tmp(/.*)?"

# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local
/usr/share/cracklib(/.*)? system_u:object_r:mysqld_etc_t:s0
/tmp(/.*)? system_u:object_r:mysqld_db_t:s0

# restorecon -R -v /tmp
restorecon reset /tmp context system_u:object_r:tmpfs_t:s0->system_u:object_r:tmp_t:s0
restorecon reset /tmp/yum_save_tx.2016-08-18.06-35.AdDY3e.yumtx context system_u:object_r:rpm_tmpfs_t:s0->system_u:object_r:mysqld_db_t:s0

# systemctl restart mariadb

# ls -lZ /tmp
-rw-------. root root system_u:object_r:mysqld_db_t:s0 yum_save_tx.2016-08-18.06-35.AdDY3e.yumtx

That's it!

Note: Change the MariaDB to mysql, syntax/command is same.
  Posted by John Little on February 26, 2018
On Ubuntu, apparmor can cause this error. (It has a similar role as SELinux.)

The Ubuntu apparmor defaults for mysql limit the directories the mysqld process can write to.

See https://help.ubuntu.com/community/AppArmor

If the world can't access your mysql so you don't care,

sudo aa-complain /usr/sbin/mysqld

puts mysqld in complain mode, a message in a system log only, rather than enforce mode.
Sign Up Login You must be logged in to post a comment.