Olvidé la armadura de la aplicación.
Para cualquiera que esté interesado, hice lo siguiente para mover la carpeta.
Detenga el servidor mysql:
stop mysql
Crea el nuevo directorio:
mkdir /array2/mysql
Copie SOLO las carpetas de la base de datos:
cp -R /var/lib/mysql /array2/mysql
cp -R /var/lib/mysql/users /array2/mysql
Copia de seguridad del my.cnf
archivo:
cp /etc/mysql/my.cnf /root/my.cnf.backup
Edite el my.cnf
archivo:
nano /etc/mysql/my.cnf
Cambie todas las menciones del antiguo datadir y socket a su nueva ubicación
La mía se convirtió en:
datadir=/array2/mysql
socket=/array2/mysql/mysql.sock
Actualice los permisos del directorio:
chown -R mysql:mysql /array2/mysql
Cambie el nombre del directorio anterior:
mv /var/lib/mysql /var/lib/mysql-old
Crea un enlace simbólico, por si acaso:
ln -s /array2/mysql /var/lib/mysql
Informe a AppArmor sobre el nuevo datadir:
echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias
Recargar los perfiles de apparmor
sudo /etc/init.d/apparmor reload
Entonces comienza mysql:
start mysql
/etc/apparmor.d/usr.sbin.mysqld
cada vez mysql recibe una actualización, puede agregar/array2/mysql/** rwk,
a/etc/apparmor.d/local/usr.sbin.mysqld
su lugar. Mysql todavía tendrá acceso al antiguo directorio de datos, pero eso probablemente no sea un problema.sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf
. ¿Por qué solo las carpetas de la base de datos?innodb_use_native_aio=0
en la[mysqld]
sección de sumy.cnf
archivo, ya que ZFS en Linux no es compatible con AIO. dev.mysql.com/doc/refman/5.5/en/…Descubrí que AppArmor era el culpable al examinar el
syslog
, y pude cambiar con éxito lamysql
ubicación de los datos siguiendo este proceso.Tenga en cuenta que, en los archivos editados a continuación,
+
se agregaron líneas que comienzan con, y-
se eliminaron las líneas que comienzan con . En realidad, no debe escribir / pegar los+
signos al agregar líneas a estos archivos.Cloné el
mysql
directorio a la nueva ubicación:Luego edité la
datadir
línea en/etc/mysql/my.cnf
:Luego edité
/etc/apparmor.d/usr.sbin.mysqld
:Entonces reinicié
mysql
.fuente
Ten cuidado
Si tiene tablas InnoDB, DEBE copiar sobre los archivos
ibdata*
yib_logfile*
o no podrá usar las tablas. Conseguirás:errores
Ejecute este comando de copia para copiar sobre los archivos
ibdata*
yib_logfile*
.fuente
Acabo de intentar otra forma, que algunos pueden encontrar útil:
copia con permisos intactos:
copia de seguridad (en caso de que algo salga mal):
cree un nuevo directorio vacío en lugar del antiguo:
enlazar montar la nueva ubicación a la antigua:
Espero que ayude a alguien, porque la simulación no funcionó para mí, y esta fue la forma más sencilla
fuente
Si mueve su datadir, no solo necesita otorgar los nuevos permisos de datadir, sino que debe asegurarse de que todos los directorios principales tengan permiso.
Moví mi datadir a un disco duro, montado en Ubuntu como:
y mi datadir era Bases de datos .
Tuve que establecer permisos en 771 para cada uno de los directorios de medios, usuarios y datos:
Si esto no funciona, otra forma de hacer que mysql funcione es cambiar el usuario en /etc/mysql/my.cnf a root; aunque sin duda hay algunos problemas para hacerlo desde una perspectiva de seguridad.
fuente
Prefiero usar la opción de montaje con enlace, así evito más cambios en la configuración de Apparmor y Mysql.
Por ejemplo:
Supongamos que quiero mover todo adentro
/var/www
. Digamos que este directorio es mi entorno de desarrollo y está montado en una partición diferentePrimero necesitamos detener mysql :
Movimos archivos (conservando permiso)
Esto generará un directorio
/var/www/mysql/
con todo el contenido.Eliminamos todo en el directorio anterior:
Montamos el nuevo directorio con
bind
opción en el anterior.edite
/etc/fstab
y agregue esta línea:Esto montará
/var/www/mysql
en nuestro directorio vacío./var/lib/mysql
La
bind
opción aquí hace la magia, se llenará/var/lib/mysql
con el contenido de/var/www/mysql
MySQL y Aparecerá como si nada hubiera cambiado.Ahora hacemos el montaje:
y reinicie mysql.
fuente
¿Te das cuenta de que si sigues los comandos al pie de la letra de la respuesta aceptada, fallará?
cp -R / var / lib / mysql / array2 / mysql
Copiará / var / lib / mysql a / array2 / mysql / mysql.
Cuando establezca su archivo de configuración, será mejor que ponga en / array2 / mysql / mysql como el directorio o de lo contrario su mysqld no podrá iniciarse.
Los mejores comandos de copia serían:
cp -R / var / lib / mysql / array2 / cp -R / var / lib / mysql / users / array2 / mysql
Sólo mis 2 centavos de valor.
fuente