Lo anterior no pudo resolver el problema para mí en Ubuntu 12.04 (Precise). Descubrí que hay que editar el archivo /etc/apparmor.d/tunables/alias para incluir una línea "alias / var / lib / mysql / -> / newpath /," Con esto en su lugar, no necesitaba ninguna cambios en cualquiera de los otros archivos de AppArmor. Funcionó inmediatamente después de reiniciar AppArmor con "/etc/init.d/apparmor restart" y MySQL con "reiniciar mysql".
en la edición de mak (que es necesario) no olvides la coma al final de la líneaalias /var/lib/mysql/ -> /newpath/,
Michael
44
No puedo enfatizar lo suficiente lo importante que es el comentario de Michel: AGREGAR COMA DE REMOLQUE y salvar algunas neuronas. Perdón por las gorras.
alx
2
No funciona para mi Me falla el trabajo para mysql.service. Consulte 'systemctl status mysql.service' y 'journalctl -xn' para obtener detalles al intentar reiniciar mysqld, y el error es que el disco está lleno. Tiene 500GB de espacio libre ...
Frank H.
17
Rápido y fácil de hacer:
#Create new directory for MySQL data
mkdir /new/dir/for/mysql
#Set ownership of new directory tomatch existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql#Set permissions on new directory tomatch existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql# Stop MySQL before copying over files
service mysql stop
# Copy all files indefault directory,to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/
Edite el /etc/my.cnfarchivo y, debajo, [mysqld]agregue esta línea:
datadir=/new/dir/for/mysql/
Si está utilizando CageFS (con o sin CloudLinux) y desea cambiar el directorio MySQL, DEBE agregar el nuevo directorio a este archivo:
Muchísimas gracias, y para agregar si quieres hacer un script completo como lo hice, puedes usar esto: sed -i 's | datadir = / var / lib / mysql | datadir = / data / var / lib / mysql | g' / etc / my.cnf
berimbolo
Esto no funcionó para mí. Intenté esto y muchas otras alternativas diferentes. Estoy llegando a la misma conclusión que user3338098 cuando dice que esta es la única forma en que funciona: serverfault.com/questions/503887/…
Volksman
@Volksman todo lo que dice el enlace es que tuvo que quitar y reinstalar ... es probable que ambos tengan algún otro problema específico del servidor, ya que tanto MySQL como MariaDB son compatibles con la configuración de datadir, y recientemente hice esto (hace 6 meses) en otro servidor sin problemas
sMyles
@sMyles sí, se eliminó e instaló, pero después de montar / var / lib / mysql en otro lugar, es decir, una mega partición a diferencia de la / var fue montada previamente. Si hay un problema específico con nuestros sistemas, sería genial saber que es así. Esto fue en una nueva instalación estándar de stock del sistema operativo Centos 7 con RAID 10 con 8x HDD, pero generalmente los detalles de la matriz de discos son transparentes para el software.
Volksman
15
tendría que copiar los datos actuales al nuevo directorio y cambiar my.cnfsu MySQL.
Bueno, eso es lo que no puedo hacer. Quiero cambiar el directorio pero quiero crear nuevas bases de datos en un nuevo directorio. Y desea acceder al directorio antiguo y a las nuevas bases de datos de directorios.
MySQL DBA
1
@MySQL DBA: si usa algún ln -slince simbólico estático, ¿no lo logrará?
RageZ el
Bueno, estoy un poco confundido con el uso de este comando. Como expliqué antes, quiero crear nuevas bases de datos en un nuevo directorio. ¿Es posible con el enlace simbólico?
MySQL DBA
1
puede crear un nuevo directorio, usar un enlace simbólico para que el archivo aparezca en el nuevo directorio y cambiar sumy.cnf
El archivo /etc/systemd/system/mysqld.service no está aquí. ¿Alguna idea de dónde debo mirar?
Ron Piggott
1
Para aquellos que usan MariaDB, el archivo de servicio se encuentra en /lib/systemd/system/[email protected]
Ron Piggott
5
Quería mantener una base de datos en mi máquina, pero también tener datos en mi disco duro externo y cambiar entre usar los dos.
Si está en una Mac e instaló MySQL usando Homebrew, esto debería funcionar para usted. De lo contrario, solo tendrá que sustituir las ubicaciones apropiadas para MySQL datadiren su máquina.
#cd to my data dir location
cd /usr/local/var/#copy contents of local data directory to the new location
cp -r mysql//Volumes/myhd/mydatadir/#temporarily move the old datadir
mv mysql mysql.local
#symlink to the new location
ln -s /Volumes/myhd/mydatadir mysql
Luego, cuando quieras volver, simplemente haz lo siguiente:
mv mysql mysql.remote
mv mysql.local mysql
y está utilizando su base de datos local nuevamente. Espero que ayude.
esto no aborda exactamente la pregunta como se dijo, sin embargo, esto era exactamente lo que estaba buscando, y es una forma ordenada de manejar un caso / error que my.cnf no maneja bien los espacios: bugs.mysql.com /bug.php?id=26033 . Voy a vincular esta solución en ese informe de error.
Luego cambie datadir en su /etc/mysql/my.cnf
Start mysqld
Notas:
# 1: probablemente tenga que ajustar la configuración de SELinux (pruebe con SELinux deshabilitado en caso de problemas), Apparmor (Ubuntu) también puede ser un problema.
tal vez esto no funcione para otra distribución, pero si está utilizando ubuntu, esto funciona bien para mí y cambio la ruta para cada nuevo servidor ubuntu instalado para habilitar raid0.
naddame
2
Sé que la gente está rechazando esto, pero quiero decirte que esto me salvó el día. ¡Gracias!
Daniel Loureiro
3
Esta solución funciona en Windows 7 usando Workbench. Necesitará privilegios de administrador para hacer esto. Crea una unión (como un acceso directo) a donde realmente desee almacenar sus datos
Abra Workbench y seleccione INSTANCE - Startup / Shutdown Stop the server
Navegue a C: \ ProgramData \ MySQL \ MySQL Server 5.6
Haga clic con el botón derecho en Datos y seleccione "MOVER y luego ENLACE la carpeta para ..." Acepte el destino del punto de advertencia en "Su nuevo directorio de datos aquí sin las comillas" Haga clic en MOVER Y ENLACE
Ahora vaya a "Su nuevo directorio de datos aquí sin las comillas"
Haga clic con el botón derecho en Datos Vaya a la pestaña de seguridad Haga clic en Editar Haga clic en Agregar tipo SERVICIO DE RED y luego en Comprobar nombres Haga clic en Aceptar Haga clic en la casilla de verificación Permitir control total y luego en Aceptar
Regrese a Workbench e inicie el servidor
Este método funcionó para mí usando MySQL Workbench 6.2 en Windows 7 Enterprise.
Es mejor que no cambie. /etc/mysql/my.cnf
En su lugar, desea crear un nuevo archivo /etc/mysql/conf.d/ext.cnf(cualquier nombre, pero la extensión debería ser cnf)
Y pon en él tu cambio:
[mysqld]
datadir=/vagrant/mq/mysql
De este modo
No necesita cambiar el archivo existente (más fácil para los scripts de automatización)
No hay problemas con la actualización de la versión de MySQL (¡y sus configuraciones!).
En caso de que sea un usuario de Windows y aterrice aquí para descubrir que todas las respuestas son para usuarios de Linux, ¡no se decepcione! No dejaré que pierdas el tiempo como lo hice.
Un poco de tonterías antes de la solución:
MySQL usa un directorio de datos para almacenar los datos de diferentes bases de datos que crea. Bueno, al final, tiene que almacenarlos en forma de archivos con un poco de malabarismo agregado en la aplicación y el formato de archivo para garantizar que la Base de datos promete que aprendió en las clases de Bases de datos intactas.
Ahora desea asegurarse de que haya espacio suficiente para almacenar grandes bases de datos que pueda crear en el futuro, y por eso pensó: ¡Hola! Quiero ponerlo en otra unidad que tenga más espacio.
Entonces haces lo siguiente.
Paso - 1 : Detener el servicio MySQL.
Window Key+ R - will open Run
servies.msc - will open services manager
Locate MySQL80 (80isfor version 8.0, look for the one you've).
Stop it.(Right click, Stop)
Paso - 2 : encontrar el directorio de datos actual
Goto C:\ProgramData\MySQL\MySQL Server 8.0
De forma predeterminada, debería haber una carpeta con el nombre aquí Data, esta es la que utiliza MySQL en la configuración predeterminada (siempre que no hayan encontrado otra ubicación mejor), pero veamos eso.
Buscar my.iniarchivo, debería estar allí.
Ábralo en un editor (Notepad ++ quizás).
Haga un CTRL + F para averiguarlo datadiren el archivo.
Lo que se menciona aquí es la ubicación real actualmente en uso por MySQL para el directorio de datos. Esto es lo que quieres cambiar.
Paso - 3 : Reemplazarlo con un nuevo directorio de datos.
Digamos que desea que su nuevo directorio de datos sea W: __ MySQL_Data. Cambiemos el
datadirvalor del my.iniarchivo a este valor. Mantenga el valor anterior comentado para que no tenga que recordarlo.
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
Ahora use xcopypara copiar el valor predeterminado datadira W:\. Inicie el símbolo del sistema (Window + R, cmd, Enter)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0""W:\"/E /H /K /O /X
Y cambie el nombre de la carpeta copiada al nuevo datadirvalor que cambió. Aquí:W:/__MySQL_Data
¿Por qué no simplemente copiar? Bueno, porque eso no es COOL !, esto le ayuda a no perder permisos en la carpeta copiada, de modo que cuando reinicie MySQL80, no dará un error estúpido: "El servicio MySQL80 en la computadora local se inició y luego se detuvo. Algunos servicios se detienen automáticamente si no están en uso por otros servicios o programas ". - Cortesía: Microsoft
Paso - 4 : reiniciar el servicio
Well, go back to the Services Manager toStart again,"MySQL80" that you stopped,to restart it again.
Gracias, eso fue útil, pero advertencia: my.ini no puede ser escrito por un usuario normal a menos que cambie sus permisos. Ah, y ProgramData es una carpeta oculta, por lo que debe cambiar la configuración de la carpeta Explorer para verla.
JonP
1
A menudo necesito hacer esto cuando actualizo máquinas, moviéndome de una caja a otra. Además de mover / var / lib / mysql a una mejor ubicación, a menudo necesito restaurar viejas tablas de bases de datos de una antigua instalación de MySQL. Para hacer esto...
Deja de mysql. Siga las instrucciones anteriores, es necesario.
Copie los directorios de la base de datos (habrá uno para cada una de las bases de datos de su instalación anterior) en la nueva ubicación de DATADIR. Pero omita los directorios "mysql" y "performance_schema".
Permisos correctos entre los directorios de bases de datos copiados. La propiedad debería ser mysql: mysql, los directorios deberían ser 700 y los archivos deberían ser 660.
Reinicie mysql. Dependiendo de su instalación, los archivos DB de la versión anterior deben actualizarse.
perdón por el voto negativo, esta solución puede ser correcta, no la he probado.
user3338098
1
Tuvimos que mover MySQL al /homedirectorio porque estaba mapeado desde otro disco físico. Para simplificar la vida, en lugar de cambiar el directorio en my.cnf, hemos asignado el nuevo directorio /home/mysqlen el lugar del directorio original /var/lib/mysql. Funciona para nosotros como un encanto (probado en CentOS 7.1).
Cree el nuevo directorio y establezca los permisos correctos.
Si desea hacer esto mediante programación (sin entrada de texto manual con gedit), aquí hay una versión para un Dockerfile basada en la respuesta del usuario 1341296 anterior:
FROM spittet/ruby-mysql
MAINTAINER you@gmail.com
RUN cp -R -p /var/lib/mysql /dev/shm &&\
rm -rf /var/lib/mysql &&\
sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g'/etc/mysql/my.cnf &&\/etc/init.d/mysql restart
Bajo SuSE 13.1, esto funciona bien para mover el directorio de datos mysql a otra parte, por ejemplo a / home / example_user /, y para darle un nombre más informativo:
En / var / lib /:
# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql
Para uno de los entornos, cambié el directorio de datos mysql a una nueva ubicación, pero durante el reinicio del servidor mysql, me tomó tiempo. Así que verifiqué el puerto y descubrí que otro proceso estaba escuchando en el puerto mysql. Así que maté el proceso y reinicié el servidor mysql y funcionó bien.
¡Bienvenido a Stack Overflow! Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Tim Diekmann
0
Los pasos anteriores son básicos y básicos. Los seguí y todavía recibí el error de "mysql no pudo iniciarse".
Para que la nueva carpeta almacene datos mysql, debe asegurarse de que la carpeta tenga permisos y propiedad mysql: mysql.
Además de esto, necesita verificar los permisos y la propiedad del directorio padre de mysql si tiene, por ejemplo, / data / mysql /. Aquí el directorio / data / debe ser root: root. Arregle el error de "mysql no pudo iniciarse" después de cambiar la propiedad del directorio padre de / mysql. El sistema operativo en mi VM es RHEL 7.6.
Probé selinux en RHEL7.6 cambiando SELINUX = imponer a SELINUX = permisivo, no funcionó para mí.
user3325137William
0
También es posible vincular el datadir. Al menos en macOS, entorno de desarrollo.
(homebrew) ej.
# make sure you're not overwriting anything important,backup existing data
mv /usr/local/var/mysql [your preferred data directory]
ln -s [your preferred data directory]/usr/local/var/mysql
Respuestas:
Detenga MySQL con el siguiente comando:
Copie el directorio de datos existente (ubicado por defecto
/var/lib/mysql
) usando el siguiente comando:edite el archivo de configuración de MySQL con el siguiente comando:
Busque la entrada
datadir
y cambie la ruta (que debería estar/var/lib/mysql
) al nuevo directorio de datos.En la terminal, ingrese el comando:
Busque líneas que comiencen por
/var/lib/mysql
. Cambio/var/lib/mysql
en las líneas con la nueva ruta.Guarde y cierre el archivo.
Reinicie los perfiles de AppArmor con el comando:
Reinicie MySQL con el comando:
Ahora inicie sesión en MySQL y podrá acceder a las mismas bases de datos que tenía antes.
fuente
alias /var/lib/mysql/ -> /newpath/,
Rápido y fácil de hacer:
Edite el
/etc/my.cnf
archivo y, debajo,[mysqld]
agregue esta línea:Si está utilizando CageFS (con o sin CloudLinux) y desea cambiar el directorio MySQL, DEBE agregar el nuevo directorio a este archivo:
Y luego ejecuta este comando:
fuente
tendría que copiar los datos actuales al nuevo directorio y cambiar
my.cnf
su MySQL.Debe copiar la base de datos cuando el servidor no se está ejecutando .
fuente
ln -s
lince simbólico estático, ¿no lo logrará?my.cnf
Primero debes detener el servidor mysql. p.ej
Después de eso, debe copiar el antiguo directorio de datos (por ejemplo, / var / lib / mysql) incl. privilegios para su nuevo directorio a través de
ahora puede cambiar
/etc/mysql/my.cnf
los datos nuevos y reiniciar el servidorfuente
Si, como yo, está en Debian y desea mover el directorio mysql a su hogar o una ruta en / home / ..., la solución es:
Un día para encontrar la solución para mí en la documentación de mariadb. Espero que esto ayude a algunos chicos!
fuente
Quería mantener una base de datos en mi máquina, pero también tener datos en mi disco duro externo y cambiar entre usar los dos.
Si está en una Mac e instaló MySQL usando Homebrew, esto debería funcionar para usted. De lo contrario, solo tendrá que sustituir las ubicaciones apropiadas para MySQL
datadir
en su máquina.Luego, cuando quieras volver, simplemente haz lo siguiente:
y está utilizando su base de datos local nuevamente. Espero que ayude.
fuente
Primero pare mysqld
Luego cambie datadir en su
/etc/mysql/my.cnf
Start mysqld
Notas:
# 1: probablemente tenga que ajustar la configuración de SELinux (pruebe con SELinux deshabilitado en caso de problemas), Apparmor (Ubuntu) también puede ser un problema.
# 2: vea la referencia de base de datos de instalación de MySQL
fuente
Primero pare su mysql
Copie los datos de MySQL a la nueva ubicación.
si usa apparmor, edite el siguiente archivo y haga lo siguiente
Reemplace where / var / lib / por / yourdirectory / luego agregue el siguiente si no existe al archivo
Guarda el archivo con el comando
Edite el archivo my.cnf
Reemplace where / var / lib / por / yourdirectory / luego guarde con el comando
finalmente comience mysql
@ver más sobre raid0, optimización ici
fuente
Esta solución funciona en Windows 7 usando Workbench. Necesitará privilegios de administrador para hacer esto. Crea una unión (como un acceso directo) a donde realmente desee almacenar sus datos
Abra Workbench y seleccione INSTANCE - Startup / Shutdown Stop the server
Instale Junction Master desde https://bitsum.com/junctionmaster.php
Navegue a C: \ ProgramData \ MySQL \ MySQL Server 5.6
Haga clic con el botón derecho en Datos y seleccione "MOVER y luego ENLACE la carpeta para ..." Acepte el destino del punto de advertencia en "Su nuevo directorio de datos aquí sin las comillas" Haga clic en MOVER Y ENLACE
Ahora vaya a "Su nuevo directorio de datos aquí sin las comillas"
Haga clic con el botón derecho en Datos Vaya a la pestaña de seguridad Haga clic en Editar Haga clic en Agregar tipo SERVICIO DE RED y luego en Comprobar nombres Haga clic en Aceptar Haga clic en la casilla de verificación Permitir control total y luego en Aceptar
Regrese a Workbench e inicie el servidor
Este método funcionó para mí usando MySQL Workbench 6.2 en Windows 7 Enterprise.
fuente
Todo como @ user1341296 dijo, más ...
Es mejor que no cambie.
/etc/mysql/my.cnf
En su lugar, desea crear un nuevo archivo/etc/mysql/conf.d/ext.cnf
(cualquier nombre, pero la extensión debería sercnf
)Y pon en él tu cambio:
De este modo
fuente
En caso de que sea un usuario de Windows y aterrice aquí para descubrir que todas las respuestas son para usuarios de Linux, ¡no se decepcione! No dejaré que pierdas el tiempo como lo hice.
Un poco de tonterías antes de la solución:
MySQL usa un directorio de datos para almacenar los datos de diferentes bases de datos que crea. Bueno, al final, tiene que almacenarlos en forma de archivos con un poco de malabarismo agregado en la aplicación y el formato de archivo para garantizar que la Base de datos promete que aprendió en las clases de Bases de datos intactas.
Ahora desea asegurarse de que haya espacio suficiente para almacenar grandes bases de datos que pueda crear en el futuro, y por eso pensó: ¡Hola! Quiero ponerlo en otra unidad que tenga más espacio.
Entonces haces lo siguiente.
Paso - 1 : Detener el servicio MySQL.
Paso - 2 : encontrar el directorio de datos actual
De forma predeterminada, debería haber una carpeta con el nombre aquí
Data
, esta es la que utiliza MySQL en la configuración predeterminada (siempre que no hayan encontrado otra ubicación mejor), pero veamos eso.Buscar
my.ini
archivo, debería estar allí.Ábralo en un editor (Notepad ++ quizás).
Haga un CTRL + F para averiguarlo
datadir
en el archivo.Lo que se menciona aquí es la ubicación real actualmente en uso por MySQL para el directorio de datos. Esto es lo que quieres cambiar.
Paso - 3 : Reemplazarlo con un nuevo directorio de datos.
Digamos que desea que su nuevo directorio de datos sea W: __ MySQL_Data. Cambiemos el
datadir
valor delmy.ini
archivo a este valor. Mantenga el valor anterior comentado para que no tenga que recordarlo.Ahora use
xcopy
para copiar el valor predeterminadodatadir
aW:\
. Inicie el símbolo del sistema (Window + R, cmd, Enter)Y cambie el nombre de la carpeta copiada al nuevo
datadir
valor que cambió. Aquí:W:/__MySQL_Data
¿Por qué no simplemente copiar? Bueno, porque eso no es COOL !, esto le ayuda a no perder permisos en la carpeta copiada, de modo que cuando reinicie
MySQL80
, no dará un error estúpido: "El servicio MySQL80 en la computadora local se inició y luego se detuvo. Algunos servicios se detienen automáticamente si no están en uso por otros servicios o programas ". - Cortesía: MicrosoftPaso - 4 : reiniciar el servicio
Paso - 5 : ¡Listo! ¡Ahora vuelve al trabajo!
fuente
A menudo necesito hacer esto cuando actualizo máquinas, moviéndome de una caja a otra. Además de mover / var / lib / mysql a una mejor ubicación, a menudo necesito restaurar viejas tablas de bases de datos de una antigua instalación de MySQL. Para hacer esto...
fuente
Tuvimos que mover MySQL al
/home
directorio porque estaba mapeado desde otro disco físico. Para simplificar la vida, en lugar de cambiar el directorio en my.cnf, hemos asignado el nuevo directorio/home/mysql
en el lugar del directorio original/var/lib/mysql
. Funciona para nosotros como un encanto (probado en CentOS 7.1).Cree el nuevo directorio y establezca los permisos correctos.
Detenga MySQL si se está ejecutando.
Mueve el directorio de datos.
Crea una montura permanente y ejecútala.
Reinicia el servidor.
fuente
Si desea hacer esto mediante programación (sin entrada de texto manual con gedit), aquí hay una versión para un Dockerfile basada en la respuesta del usuario 1341296 anterior:
Disponible en Docker Hub aquí: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
fuente
Primero, debe saber dónde está su archivo de configuración? ¿Dónde está tu archivo de configuración?
SI lo instaló con apt-get o yum install。
el archivo de configuración puede aparecer en
el archivo de datos puede aparecer en
y lo que debes hacer es
y luego trabajos realizados.
Pero si no lo instaló con apt o yum, puede que no le guste el directorio, y puede encontrar los archivos mysql con
fuente
Bajo SuSE 13.1, esto funciona bien para mover el directorio de datos mysql a otra parte, por ejemplo a / home / example_user /, y para darle un nombre más informativo:
En / var / lib /:
Reinicé mysql:
pero sospecha que incluso eso no fue necesario.
fuente
Para uno de los entornos, cambié el directorio de datos mysql a una nueva ubicación, pero durante el reinicio del servidor mysql, me tomó tiempo. Así que verifiqué el puerto y descubrí que otro proceso estaba escuchando en el puerto mysql. Así que maté el proceso y reinicié el servidor mysql y funcionó bien.
Seguí los pasos a continuación para cambiar el directorio de datos que funcionó excelente. cambiar el directorio de datos mysql en Linux
fuente
Los pasos anteriores son básicos y básicos. Los seguí y todavía recibí el error de "mysql no pudo iniciarse".
Para que la nueva carpeta almacene datos mysql, debe asegurarse de que la carpeta tenga permisos y propiedad mysql: mysql.
Además de esto, necesita verificar los permisos y la propiedad del directorio padre de mysql si tiene, por ejemplo, / data / mysql /. Aquí el directorio / data / debe ser root: root. Arregle el error de "mysql no pudo iniciarse" después de cambiar la propiedad del directorio padre de / mysql. El sistema operativo en mi VM es RHEL 7.6.
fuente
También es posible vincular el datadir. Al menos en macOS, entorno de desarrollo.
(homebrew) ej.
Reinicie mysql.
fuente
Si está utilizando SE Linux, configúrelo en modo permisivo editando / etc / selinux / config y cambiando SELINUX = imponer a SELINUX = permisivo
fuente
datadir
propiedad