After installing the components of a LAMP stack on a CentOS/RHEL 7 server, there are a couple of things you may want to do.
Some of them have to do with increasing the security of the Apache and MySQL / MariaDB, while others may be applicable or not according to our setup or needs.
For example, based on the expected use of the database server, we may want to change the default data directory (/var/lib/mysql
) to a different location. This is the case when such a directory is expected to grow due to high usage.
Otherwise, the filesystem where /var
is stored may collapse at one point causing the entire system to fail. Another scenario where changing the default directory is when we have a dedicated network share that we want to use to store our actual data.
For this reason, in this article, we will explain how to change the default MySQL / MariaDB data directory to a different path on a CentOS/RHEL 7 server and Ubuntu/Debian distributions.
Although we will use MariaDB, the concepts explained and the steps taken in this article apply both to MySQL and to MariaDB unless noted otherwise.
Changing the default MySQL/MariaDB Data Directory
Note: We are going to assume that our new data directory is /mnt/mysql-data
. It is important to note that this directory should be owned by mysql:mysql
.
# mkdir /mnt/mysql-data # chown -R mysql:mysql /mnt/mysql-data
For your convenience, we’ve divided the process into 5 easy-to-follow steps:
Step 1: Identify Current MySQL Data Directory
To begin, it is worthy and well to identify the current data directory using the following command. Do not just assume it is still /var/lib/mysql
since it could have been changed in the past.
# mysql -u root -p -e "SELECT @@datadir;"
After you enter the MySQL password, the output should be similar to.

Step 2: Copy MySQL Data Directory to a New Location
To avoid data corruption, stop the service if it is currently running before proceeding. Use the systemd well-known commands to do so:
------------- On SystemD ------------- # systemctl stop mariadb # systemctl is-active mariadb ------------- On SysVInit ------------- # service mysqld stop # service mysqld status OR # service mysql stop # service mysql status
If the service has been brought down, the output of the last command should be as follows:

Then copy recursively the contents of /var/lib/mysql
to /mnt/mysql-data
preserving original permissions and timestamps:
# cp -R -p /var/lib/mysql/* /mnt/mysql-data

Step 3: Configure a New MySQL Data Directory
Edit the configuration file (my.cnf
) to indicate the new data directory (/mnt/mysql-data
in this case).
# vi /etc/my.cnf OR # vi /etc/mysql/my.cnf
Locate the [mysqld]
and [client]
sections and make the following changes:
Under [mysqld]: datadir=/mnt/mysql-data socket=/mnt/mysql-data/mysql.sock Under [client]: port=3306 socket=/mnt/mysql-data/mysql.sock
Save the changes and then proceed with the next step.

Step 4: Set SELinux Security Context to Data Directory
This step is only applicable to RHEL/CentOS and its derivatives.
Add the SELinux security context to /mnt/mysql-data
before restarting MariaDB.
# semanage fcontext -a -t mysqld_db_t "/mnt/mysql-data(/.*)?" # restorecon -R /mnt/mysql-data
Next restart the MySQL service.
------------- On SystemD ------------- # systemctl stop mariadb # systemctl is-active mariadb ------------- On SysVInit ------------- # service mysqld stop # service mysqld status OR # service mysql stop # service mysql status
Now, use the same command as in Step 1 to verify the location of the new data directory:
# mysql -u root -p -e "SELECT @@datadir;"

Step 5: Create MySQL Database to Confirm Data Directory
Login to MariaDB, create a new database and then check /mnt/mysql-data
:
# mysql -u root -p -e "CREATE DATABASE tecmint;"

Congratulations! You have successfully changed the data directory for MySQL or MariaDB.
Summary
In this post, we have discussed how to change the data directory in a MySQL or MariaDB server running on CentOS/RHEL 7 and Ubuntu/Debian distributions.
Do you have any questions or comments about this article? Feel free to let us know using the form below – we are always glad to hear from you!
Hi, the part after copying the database files, restart MySQL – commands need revision.
Error in part 3 you say my.cnf but in the commands, you use my.conf this may be confusing…
@Paul,
Thanks, corrected the command in the article…