¿Es posible cambiar mi directorio de datos MySQL predeterminado a otra ruta? ¿Podré acceder a las bases de datos desde la ubicación anterior?
¿Es posible cambiar mi directorio de datos MySQL predeterminado a otra ruta? ¿Podré acceder a las bases de datos desde la ubicación anterior?
Respuestas:
Detenga MySQL con el siguiente comando:
sudo /etc/init.d/mysql stop
Copie el directorio de datos existente (ubicado por defecto /var/lib/mysql
) usando el siguiente comando:
sudo cp -R -p /var/lib/mysql /newpath
edite el archivo de configuración de MySQL con el siguiente comando:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
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:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
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:
sudo /etc/init.d/apparmor reload
Reinicie MySQL con el comando:
sudo /etc/init.d/mysql restart
Ahora inicie sesión en MySQL y podrá acceder a las mismas bases de datos que tenía antes.
alias /var/lib/mysql/ -> /newpath/,
Rápido y fácil de hacer:
# Create new directory for MySQL data
mkdir /new/dir/for/mysql
# Set ownership of new directory to match existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql
# Set permissions on new directory to match existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql
# Stop MySQL before copying over files
service mysql stop
# Copy all files in default directory, to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/
Edite el /etc/my.cnf
archivo 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:
/etc/cagefs/cagefs.mp
Y luego ejecuta este comando:
cagefsctl --remount-all
tendría que copiar los datos actuales al nuevo directorio y cambiar my.cnf
su MySQL.
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
Debe copiar la base de datos cuando el servidor no se está ejecutando .
ln -s
lince simbólico estático, ¿no lo logrará?
my.cnf
Primero debes detener el servidor mysql. p.ej
# /etc/init.d/mysql stop
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
# cp -R -p /var/lib/mysql /new/data/dir
ahora puede cambiar /etc/mysql/my.cnf
los datos nuevos y reiniciar el servidor
# /etc/init.d/mysql restart
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!
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.
#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.
Primero pare mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
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
Primero pare su mysql
sudo service mysql stop
Copie los datos de MySQL a la nueva ubicación.
sudo cp -rp /var/lib/mysql /yourdirectory/
si usa apparmor, edite el siguiente archivo y haga lo siguiente
sudo vim /etc/apparmor.d/usr.sbin.mysqld
Reemplace where / var / lib / por / yourdirectory / luego agregue el siguiente si no existe al archivo
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
Guarda el archivo con el comando
:wq
Edite el archivo my.cnf
sudo vim /etc/mysql/my.cnf
Reemplace where / var / lib / por / yourdirectory / luego guarde con el comando
:wq
finalmente comience mysql
sudo service mysql start
@ver más sobre raid0, optimización ici
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.
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 ser cnf
)
Y pon en él tu cambio:
[mysqld]
datadir=/vagrant/mq/mysql
De este modo
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 (80 is for 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.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 del my.ini
archivo 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 xcopy
para copiar el valor predeterminado datadir
a 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 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: Microsoft
Paso - 4 : reiniciar el servicio
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
Paso - 5 : ¡Listo! ¡Ahora vuelve al trabajo!
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...
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.
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
Detenga MySQL si se está ejecutando.
systemctl stop mysql
Mueve el directorio de datos.
mv -f /var/lib/mysql/* /home/mysql
Crea una montura permanente y ejecútala.
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
Reinicia el servidor.
systemctl start mysql
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
Disponible en Docker Hub aquí: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
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
/etc/mysql/my.cnf
el archivo de datos puede aparecer en
/ var / lib / mysql
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
whereis mysql
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
Reinicé mysql:
# systemctl restart mysql.service
pero sospecha que incluso eso no fue necesario.
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
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.
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
Reinicie mysql.
Si está utilizando SE Linux, configúrelo en modo permisivo editando / etc / selinux / config y cambiando SELINUX = imponer a SELINUX = permisivo
datadir
propiedad