Step 1:
Login to your MySQL server, enter your password when prompted:
mysql -u root -p
Find out where the data directory
is located:
mysql> select @@datadir;
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)
Step 2:
Now you can stop the server and check the status:
sudo systemctl stop mysql
sudo systemctl status mysql
It’s time to make a copy to your new mount location:
sudo rsync -av /var/lib/mysql /mnt/new-volume-01
Remember to create a backup of the original data in case you need to revert at a later stage:
sudo mv /var/lib/mysql /var/lib/mysql.bak
Step 3:
Edit the MySQL configuration to update the datadir
to the new location:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
Find the datadir
key and swap the value with your new mount path:
...
datadir=/mnt/new-volume-01/mysql
...
Step 4:
Update AppArmor to point to a new location:
sudo vi /etc/apparmor.d/tunables/alias
Create a new line at the bottom that references your new mount path, aliased back to /var/lib/mysql
.
...
[label /etc/apparmor.d/tunables/alias]
alias /var/lib/mysql/ -> /mnt/new-volume-01/mysql/,
...
Restart AppArmor to pull in the new configuration.
sudo systemctl restart apparmor
Step 5:
Start the MySQL server for changes to take effect.
sudo systemctl start mysql
sudo systemctl status mysql
Login to MySQL again to verify it is using the new directory:
mysql -u root -p
Re-run the command from before to verify:
mysql> select @@datadir;
Output
+---------------------------+
| @@datadir |
+---------------------------+
| /mnt/new-volume-01/mysql/ |
+---------------------------+
1 row in set (0.00 sec)