How do I get LOAD DATA INFILE to work on my server?
Matomo processes huge amounts of data and then stores this data in the database. For improved performance, Matomo tries to import a lot of data in the database at once using a Mysql feature called “LOAD DATA INFILE”. You can check whether your server supports this performance improvement in the Administration > System Check menu. The system checks two commands: LOAD DATA INFILE and LOAD DATA LOCAL INFILE (which also works when the MySQL server is on a different server than your web server). It’s enough if either one of these work.
If you are not seeing a green tick under “Database abilities”, try the following troubleshooting steps:
- Check the “mysqld” process can access the file created in the tmp/assets directory in the matomo-installation:
- give the process mysqld executable-access (+x) to files in
path/to/matomo/tmp/assets/*
and all parent folders. - check that the request isn’t blocked by apparmor or any other security-software when accessing this folder. If you are using Ubuntu, you may have to disable apparmor which prevents mysql from accessing files in path/to/matomo/tmp/*
Edit the file/etc/apparmor.d/usr.sbin.mysqld
and add the following path in the file:/path/to/matomo/tmp/assets/* rw,
Then restart apparmor withsudo /etc/init.d/apparmor restart
- in your Mysql configuration (my.cnf) set the following options:
[mysqld] local-infile
and[mysql] local-infile
Then restart Mysql.
- give the process mysqld executable-access (+x) to files in
If the LOAD DATA INFILE is still not working, try the following:
- check in your config/config.ini.php that you do not have
enable_load_data_infile=0
. If you see this line in the file, delete it. - and/or if you are using PHP-Mysqli, you must enable the PHP setting
mysqli.allow_local_infile = On
. (For additional security, you may also set this PHP settingmysqli.local_infile_directory
to/path/to/matomo/tmp/assets/
) - and/or update to the latest PHP version, or use the mysqli client (there are some known bugs with older PDO clients for mysql)
- and/or switch the client to
adapter=MYSQLI
in the config/config.ini.php - and/or disable in your php configuration php.ini the options
open_basedir
andsafe_mode
. Restart webserver. - on Ubuntu / Debian servers, you may try to uninstall
php5-mysql
package and install instead php5-mysqlnd:sudo apt-get install php5-mysqlnd
- on some systems you may also need to set
secure_file_priv=""
under[mysqld]
- You can change the permission for your Mysql user to allow the user to import the files:
GRANT FILE on *.* to matomo@localhost
. Note it is generally not recommended for security reasons, and LOAD DATA LOCAL INFILE should work without this additionalGRANT FILE
permission.
If you still cannot make LOAD DATA INFILE work, you can disable this feature completely. This is not recommended for medium to high traffic Matomo where this feature should be enabled. To disable LOAD DATA INFILE add to your config.ini.php file under [General]
section: enable_load_data_infile=0