Articles

How to move the mysql datadir, Ubuntu change datadir issue

Linux Ubuntu change datadir issue - solution


You get the same as me?
/etc/init.d/mysql start
* Starting MySQL database server mysqld [fail]

tail /var/log/syslog
Jan 10 19:42:53 laptop /etc/init.d/mysql[10810]: 0 processes alive and '/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf ping' resulted in
Jan 10 19:42:53 laptop /etc/init.d/mysql[10810]: ^G/usr/bin/mysqladmin: connect to server at 'localhost' failed
Jan 10 19:42:53 laptop /etc/init.d/mysql[10810]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Jan 10 19:42:53 laptop /etc/init.d/mysql[10810]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

How to move the mysql data directory in ubuntu

  • Open the terminal
  • Stop MySQL with the command
    /etc/init.d/mysql stop
  • Copy the existing data directory (which is located in /var/lib/mysql) using the command

    cp -R -p /var/lib/mysql /usr/new_datadir
  • All you need are the data files. Delete the others with the command

    rm /usr/new_datadir

    (You will get a message about not being able to delete some directories, but do not care about them)

  • Edit the MySQL configuration file with the command

    vim /etc/mysql/my.cnf
  • Find the entry for datadir, change the path to the new data directory.
  • But there is a trick involved here. Ubuntu uses some security software called AppArmor that specifies the areas of your filesystem applications are allowed to access. Unless you modify the AppArmor profile for MySQL, you'll never be able to restart MySQL with the new datadir location.
  • In the terminal, enter the command

    vim /etc/apparmor.d/usr.sbin.mysqld
  • Copy the lines beginning with /var/lib/mysql
  • Comment out the originals with hash marks (#), and paste the lines below the originals.
  • Now change /var/lib/mysql in the two new lines with /usr/new_datadir. Save and close the file.
  • Restart the AppArmor profiles with the command

    /etc/init.d/apparmor restart
  • Restart MySQL with the command

    /etc/init.d/mysql restart
  • MySQL should now start without any errors and your data will be stored in the new location. See also article Linux Ubuntu move mysql database to other path in 5 minutes