Por X o Y razón quieren mover las bases de datos de MySQL del lugar default donde se instala, usualmente /var/lib/mysql. En mi caso fue para distribuir la carga de procesamiento del OS y la base de datos en discos diferentes. Lleve a cabo este proceso en RedHat 6.0 (RHEL6).
Recomendación: a menos que sea un prerequisito específico para un software trata de instalar la versión de MySQL que provee 'yum'. Te vas a evitar un montón de problemas de dependencies.
A este momento ya debes haber instalado MySQL.
1. En el terminal escribe mysqlshow -u root -p aprieta enter y pon el password de root de mysql. Eso desplegara las bases de datos que MySQL instala por default y confirmarás que la instalación fue exitosa y que el servicio esta arriba.
# mysqlshow -u root -p
Enter password: *******
+--------------------+
| Databases |
+--------------------+
| information_schema |
| mysql |
| test |
| wikidb |
+--------------------+
2. Ahora necesitamos parar el servicio de MySQL para poderlo mover. Utiliza el comando service mysqld stop .
# service mysqld stop
Stopping MySQL: [ OK ]
3. Vamos a crear el directorio donde queremos mover la instalación. (El argumento -p crea los directorios "padres" si no existen")
# mkdir -p /opt/mysql
4. Ahora copiamos el contenido del folder actual de MySQL al directorio nuevo.
# cp -R /var/lib/mysql/* /opt/mysql/
5. Le cambiamos el dueño al archivo nuevo y a todo su contenido
# chown -R mysql:mysql /opt/mysql
6. Ya tenemos la instalación en otro lugar. Pero ahora necesitamos decirle MySQL que su ubicación ha cambiado. Hay que modificar nuestro archivo my.cnf. Este archivo le hace overwrite a los valores por default de MySQL y se encuentra en /etc/my.cnf. Si lo buscas y no esta puedes crearlo con tu editor favorito (vi, vim ect...). El contenido de este archivo (minimo) debe ser el siguiente:
[client]
port=3306
socket=/opt/mysql/mysql.sock
[mysqld]
datadir=/opt/mysql
socket=/opt/mysql/mysql.sock
port=3306
#Esto de innodb es opcional y lo voy a explicar mas abajo
innodb_file_per_table
Aqui estamos diciendole al MySQL que le puerto por el cual el cliente se va a estar conectando sera 3306, el path donde esta el socket para la comunicación y donde se encuentra el directorio nuevo. Graba el archivo.
*innodb_file_per_table: Mientras vas creando y borrando bases de datos y tablas MySQL va llenando un archivo que se llama ibdata1 (dentro del archivo de mysql). Este archivo puede llegar a tener GBs de data guardada y no hay manera de limpiarlo (ni aunque dropees la base de datos). Esta opción lo que hace es que en vez almacenar toda la data de las tablas/DBs creadas en un solo archivo, hace un archivo por cada una de las tablas que creas y a la hora de que borres la tabla el archivo tambien se va. Esto es opcional pero vale la pena mencionarselos porque si ese archivo crece demasiado para limpiarlo vas a tener q hacer un dump de todas las bases de datos, borrar ese archivo y restaurar del dump que hicistes.
7. Ahora tenemos que correr un comando para cambiar los permisos del archivo nuevo de MySQL y que SELinux nos permita correrlo.
semanage fcontext -a -t mysqld_db_t "/opt/mysql(/.*)?"
*Si no tienes semanage instalado 'yum whatprovides /usr/sbin/semanage' te dira que paquete debes instalar.
8. Ahora hay que reestablecer el mapping de SELinux con este comando.
restorecon -R -v /opt/mysql
9. Ya con esto estamos ready, asi que subimos el servicio de MySQL con el comando service mysqld start
# service mysqld start
Starting MySQL: [ OK ]
Si no sube verifica que en /opt/mysql/ exista el mysql.sock. Si no existe corre los siguientes comandos estando en el directorio de mysql e intenta subir el servicio denuevo.
# touch mysql.sock
# chown mysql:mysql mysql.sock
Si tienen problemas pueden preguntarme, puede que no sepa la respuesta pero si estoy disponible le ayudaré a buscar la contestación