Cambiar el directorio de datos MySQL en Ubuntu Server 10.04

9

Recibía el siguiente error al intentar cambiar el directorio de datos en ubuntu server 10.04.

100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.
Norling Jr.
fuente
2
... y tu pregunta es? Tenga en cuenta que si solo mueve el contenido de las carpetas y no los archivos, perderá todo el contenido de la tabla InnoDB.
bobince
No hay pregunta / cuchara. Solo pensé que esto podría ser interesante para las personas de por aquí. Buen punto sobre el contenido de la tabla InnoDB!
2
Si desea hacer y responder su propia pregunta, está bien, pero tómese el tiempo para hacer una pregunta y proporcione su respuesta como respuesta.
Zoredache

Respuestas:

8

Después de cierta confusión general sobre los permisos, el OP se dio cuenta de que el problema no era que no tenía permisos y derechos de ruta, sino que AppArmor estaba evitando que MySQL leyera y escribiera en la nueva ubicación.

Esta es su solución:

Primero detenga MySQL para que no ocurra nada extraño mientras está jugando:

$ sudo stop mysql

Luego mueva todos los directorios de la base de datos a su nuevo hogar:

$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

No mueva los archivos, serán generados por mysql, solo mueva las carpetas (que son las bases de datos).

Luego, solicite cortésmente a AppArmor que permita que mysql use la nueva carpeta:

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,

Luego dígale a mysql que el datadir se ha movido:

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     datadir=/my-new-db-dir/

NOTA: Dependiendo de la configuración de su base de datos, es posible que también deba cambiar innodb-data-home-dir, etc.

Luego reinicie AppArmor para leer la nueva configuración:

$ sudo /etc/init.d/apparmor restart

Y vuelva a iniciar MySQL con el nuevo datadir:

$ sudo start mysql
splattne
fuente
2
puede mantener la base de datos en funcionamiento vinculando los archivos a su nueva ubicación, en lugar de moverlos ... a menos que, por supuesto, las dos ubicaciones de datadir estén en particiones separadas.
cpbills
Las instrucciones para mover solo directorios no son precisas en el caso de que esté usando innodb. En ese caso, también deberá mover los datos innodb y los archivos de registro (ibdata *, ib_logfile *).
hillel
Una nota para otros tan descuidados como yo. Debe tener las barras diagonales finales en la ruta en la configuración de AppArmor /new-mysql-dir/ ro de lo contrario se denegará. Cosas básicas de Linux, pero nunca puedo obtener las barras diagonales correctas.
Jeff
AppArmor todavía me negaba. Este hilo ayudó a superar ese obstáculo final.
Jeff