Documentation Home
MySQL 5.7 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.5Mb
PDF (A4) - 39.5Mb
PDF (RPM) - 38.7Mb
HTML Download (TGZ) - 11.0Mb
HTML Download (Zip) - 11.0Mb
HTML Download (RPM) - 9.7Mb
Man Pages (TGZ) - 217.2Kb
Man Pages (Zip) - 326.9Kb
Info (Gzip) - 3.6Mb
Info (Zip) - 3.6Mb
Excerpts from this Manual

B.4.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:


The C:\temp directory must exist and have sufficient space for the MySQL server to write to. See Section, “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 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.


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.