In a Linux bases system, by default MySQL/MariaDB data directory will be /var/lib/mysql.

As a good practice it is always recommended to change MySQL / MariaDB Default data directory. For example in a production network where large scale applications expected to grow due to high usage. In this case it is not recommended to use / partition to store MySQL data files. Otherwise, the filesystem where /var/lib/mysql is located may collapse at one point causing the entire system to fail.

`

Another scenario where changing the default directory is when we have a dedicated storage network that we want to store our critical data. So to be on safe side, In this guide we will explain how to Change MySQL / MariaDB Default Data Directory to a different location and also we will see how we can safely move old databases.

For this guide I am using CentOS 8 Operating system with MariaDB database server.

Instructions to Change MySQL / MariaDB Default Data Directory

In this guide I am going to use /home/db-data directory as my new data directory for MariaDB.

1. Stop Mysql/MariaDB

Before making any changes, first make sure to stop MariaDB service using the following command.

# systemctl stop mariadb

2. Move Old Data (Old Databases and MariaDB Files).

Copy entire mysql director from old directory /var/lib/mysql to our new directory /home/db-data using below command.

# cp -R -p /var/lib/mysql /home/db-data

3. Edit MySQL Config File

As a good practice backup MariaDB configuration files before making any changes.

Server config file

# cp /etc/my.cnf.d/mariadb-server.cnf /etc/my.cnf.d/mariadb-server.cnf.org

Backup of client config file

# cp /etc/my.cnf.d/client.cnf /etc/my.cnf.d/client.cnf.org

Now edit /etc/my.cnf.d/mariadb-server.cnf file then look for the entry for datadir and socket, then change the current path which is /var/lib/mysql to the new data directory which is /home/db-data/.

[mysqld]
datadir=/home/db-data
socket=/home/db-data/mysql.sock

Now edit another configuration file /etc/my.cnf.d/client.cnf and update path to new location as showing below.

[client]
port=3306
socket=/home/db-data/mysql.sock

4. Finally start MySQL service

# systemctl start mariadb

Now you can login to MySQL and you will see the same databases you had before.

Similar Posts