ubuntu
-
Stop MySQL using the following command:
sudo /etc/init.d/mysql stop
-
Copy the existing data directory (default located in
/var/lib/mysql
) using the following command:sudo cp -R -p /var/lib/mysql /newpath
-
edit the MySQL configuration file with the following command:
sudo gedit /etc/mysql/my.cnf
-
Look for the entry for
datadir
, and change the path (which should be/var/lib/mysql
) to the new data directory. -
In the terminal, enter the command:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
-
Look for lines beginning with
/var/lib/mysql
. Change/var/lib/mysql
in the lines with the new path. -
Save and close the file.
-
Restart the AppArmor profiles with the command:
sudo /etc/init.d/apparmor reload
-
Restart MySQL with the command:
sudo /etc/init.d/mysql restart
-
Now login to MySQL and you can access the same databases you had before.
来源:
centos:
-
Stopping the MySQL server
-
Create a new data directory and move the content from the old data directory
-
Correct the MySQL configuration file
-
Adjust SELinux parameters to accept our new change
-
Starting the MySQL server
Stopping the MySQL server
# service mysqld stop
Create a new data diretory and move the content from the old one
Creating a new data directory
# mkdir /srv/mysql/
# chown mysql:mysql /srv/mysql
Moving the original data files
# mv /var/lib/mysql/* /srv/mysql/
Correct the MySQL configuration file
Edit the my.cnf file for your distribution. In my example it’s located in the /etc/mysql/ directory. RHEL/CentOS/Scientific Linux put the my.cnf file directly in /etc by default.
# nano /etc/mysql/my.cnf
Change
datadir=/var/lib/mysql
to
datadir=/srv/mysql
and
socket=/var/lib/mysql/mysql.sock
to
socket=/srv/mysql/mysql.sock
and save the file.
Adjust SELinux parameters to accept our new change
Should the following command output “Permissive” or “Disabled” then you may skip the details for SELinux.
# getenforce
Run the semanage command to add a context mapping for /srv/mysql.
# semanage fcontext -a -t mysqld_db_t "/srv/mysql(/.*)?"
Now use the restorecon command to apply this context mapping to the running system.
# restorecon -Rv /srv/mysql
Starting the MySQL server
# service mysqld start
Verifying access and connectivity
$ mysql -u root -p
mysql> show databases;
If this is working, you’re up and running. Should you get a message that says
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
then add the following to your /etc/my.cnf
[client]socket = /srv/mysql/mysql.sock
Optionally you can just use
$ mysql -u root -p --protocol tcp
to avoid connecting via the socket.