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.

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.