MySQL is a popular relational database management system (RDMS). It is widely used by web applications for storing data permanently. MySQL is available for all the major operating systems like Windows, Linux, and macOS. You can find the installation instructions here.

Advertisement

On the Linux system, MySQL stores all the files under /var/lib/mysql directory. Most of the operating systems have mounted /var directory on root (/) file system. This is fine for the development systems but we don’t recommend keeping/var/lib/mysql on the root file system for production servers.

In this tutorial, we will help you to change the default data directory for MySQL and move it to some other location.

Steps to Change Default data Directory in MySQL

Follow the below steps to make all the changes. In some cases service name, default data directory or MySQL configuration file path change. So use all the command as per you system settings.

  1. Stop MySQL – Before making any changes, first make sure to stop mysql service
    sudo systemctl stop mysql 
    
  2. Copy data directory – Now copy default MySQL data directory (/var/lib/mysql) to other location as per your requirement. Also set the required MySQL ownership on new directory location. As per below command, we are relocating data directory to /data/mysql.
    cp -rap /var/lib/mysql /data/mysql 
    chown mysql.mysql /data/mysql 
    
  3. Update configuration file – Edit MySQL configuration file /etc/my.cnf and update the value of datadir and socket variable as below.
      Change From:

      Change To:
  4. Start MySQL – After making all the above changes, start MySQL service. Now it will use new data directory path
    sudo systemctl start mysql 
    

That’s it. With the help of help instructions, you will easily change the default data directory location for MySQL and MariaDB servers on Linux systems.

Share.

11 Comments

  1. hi ,
    i did the above procedure in RHEL 7 , the files were copied also i changed the ownership of mysql data directory which has the same permission as the original file but still getting an error when i restart the mysql service
    stating “Job for mysqld.service failed. See ‘systemctl status mysqld.service’ and ‘journalctl -xn’ for details”

    please help thanks!

  2. Hi,
    Thanks for the article !
    I’d like to add something because I was facing an issue while trying to connect to the database after I made the changes listed above.
    When I tried to connect to the database with the mysql client, I had this error :
    “ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)”

    The problem where that the mysql client is using by default the /var/lib/mysql/mysql.sock socket.
    In the /etc/my.cnf file, I just added a client section specifying the socket :

    [client]
    socket=/data/mysql/mysql.sock

    Hope this will help,

    Cheers !

Leave A Reply