Debido a que las tablas de MySQL se almacenan como archivos, es
fácil hacer una copia de seguridad. Para hacer una copia
consistente haga un LOCK TABLES
en las tablas
relevantes, seguido de un FLUSH TABLES
para
las tablas. Consulte Sección 13.4.5, “Sintaxis de LOCK TABLES
y UNLOCK
TABLES
” y
Sección 13.5.5.2, “Sintaxis de FLUSH
”. Solo necesita obtener un bloqueo de
lectura; esto permite a otros clientes continuar consultando la
tabla mientras usted está haciendo una copia de los archivos
del directorio de la base de datos. La sentencia FLUSH
TABLES
es necesaria para asegurarse de que todas las
páginas de índice activas se escriben al disco antes de que
comience la copia.
Si quiere hacer una copia de una tabla a un nivel SQL, puede
utilizar SELECT INTO ... OUTFILE
o
BACKUP TABLE
. Para SELECT INTO ...
OUTFILE
, el archivo de salida no debe existir
previamente. Esto también es cierto para BACKUP
TABLE
, ya que permitir que archivos externos sean
sobreescritos sería un riesgo de seguridad. Consulte
Sección 13.2.7, “Sintaxis de SELECT
” y Sección 13.5.2.2, “Sintaxis de BACKUP TABLE
”.
Otra técnica para hacer copias de seguridad de una base de datos es utilizar el programa mysqldump o el script mysqlhotcopy script. Consulte See Sección 8.7, “El programa de copia de seguridad de base de datos mysqldump” y Sección 8.8, “El programa de copias de seguridad de base de datos mysqlhotcopy”.
Hacer una copia completa de su base de datos:
shell> mysqldump --tab=/path/to/some/dir
--optdb_name
O:
shell> mysqlhotcopydb_name
/path/to/some/dir
También puede simplemente copiar todos los archivos de
tablas (*.frm
,
*.MYD
, y *.MYI
)
siempre que el servidor no esté actualizando nada. El
script mysqlhotcopy utiliza este método.
(Pero tenga en cuenta que estos métodos no funcionan si su
base de datos contiene tablas InnoDB
.
InnoDB
no almacena los contenidos de las
tablas en directorios de base de datos, y
mysqlhotcopy funciona solo para tablas
MyISAM
e ISAM
.)
Pare mysqld si se está ejecutando, y
después reinicielo con la opción
--log-bin[=file_name]
. Consulte
Sección 5.10.3, “El registro binario (Binary Log)”. Los archivos binarios de
registro le dan la información que necesita para replicar
los cambios que se han producido en la base de datos tras el
punto en que usted ejecutó mysqldump.
Para las tablas InnoDB
es posible realizar
una copia de seguridad en línea que no requiere bloqueos en las
tablas; consulte Sección 8.7, “El programa de copia de seguridad de base de datos
mysqldump”
MySQL tiene soporte para copias de seguridad incrementales:
Usted necesita iniciar el servidor con la opción
--log-bin
para activar el registro binario;
consulte Sección 5.10.3, “El registro binario (Binary Log)”. En el momento en que
usted quiera realizar una copia de seguridad incremental (que
contenga todos los cambios que han ocurrido desde la última
copia de seguridad, completa o incremental), usted debe rotar el
registro binario utilizando FLUSH LOGS
. Hecho
esto, necesita copiar a la localización de seguridad todos los
registros binarios que daten desde el momento de la última
copia de seguridad hasta el último. Estos logs binarios son la
copia de seguridad incremental; cuando necesite restaurar la
copia, los puede aplicar tal como se explica más adelante. La
próxima vez que haga una copia de seguridad compelta, también
debe rotar el registro binario haciendo FLUSH
LOGS
, mysqldump --flush-logs
, o
mysqlhotcopy --flushlogs
. Consulte
Sección 8.7, “El programa de copia de seguridad de base de datos
mysqldump” y Sección 8.8, “El programa de copias de seguridad de base de datos
mysqlhotcopy”.
Si su servidor MySQL es un servidor esclavo de replicación,
entonces independientemente del método de copia de seguridad
que elija, también debe copiar los archivos
master.info
y
relay-log.info
cuando copie los datos de su
esclavo. Estos archivos son siempre necesarios para continuar la
replicación después de una restauración de los datos del
esclavo. Si su esclavo está replicando comandos LOAD
DATA INFILE
, debería también copiar cualquier
archivo SQL_LOAD-*
que pueda existir en el
directorio especificado por la opción
--slave-load-tmpdir
. (Esta localización es
por defecto el valor de la variable tmpdir
,
si no se especifica.) El esclavo necesita estos archivos para
reiniciar la replicación de cualquier operación LOAD
DATA INFILE
interrumpida.
Si tiene que restaurar tablas MyISAM
, intente
recuperarlas utilizando REPAIR TABLE
o
myisamchk -r primero. Esto debería funcionar
en el 99.9% de los casos. Si myisamchk falla,
intente el siguiente procedimiento. Tenga en cuenta que solo
funciona si tiene activado el registro binario iniciando el
servidor MySQL con la opción --log-bin
;
consulte Sección 5.10.3, “El registro binario (Binary Log)”.
Restaure la copia de seguridad original de mysqldump, o la copia de seguridad binaria.
Ejecute el siguiente comando para ejecutar de nuevo las actualizaciones de los registros binarios:
shell> mysqlbinlog hostname-bin.[0-9]* | mysql
En algunos casos, quizá quiera reejecutar solo ciertos registros binarios, desde ciertas posiciones (lo usual es querer reejecutar todos los registros binarios desde el punto de restauración, excepto, posiblemente, algunas sentencias incorrectas). Consulte Sección 8.5, “La utilidad mysqlbinlog para registros binarios” para más información sobre la utilidad mysqlbinlog y como utilizarla.
También puede hacer copias de seguridad selectivas de archivos individuales:
Para volcar la tabla, utilice SELECT * INTO OUTFILE
'
.
file_name
' FROM
tbl_name
Para recargar la tabla, restaurela con LOAD DATA
INFILE 'file_name' REPLACE ...
Para evitar
registros duplicados, la tabla tiene que tener un índice
PRIMARY KEY
o UNIQUE
.
La palabra clave REPLACE
hace que los
viejos registros sean reemplazados con los nuevos cuando un
nuevo registro tiene la misma clave que uno antiguo.
Si tiene problema de rendimientos con su servidor mientras realiza copias de seguridad, una estrategia que puede ayudarle es crear replicación y hacer las copias de seguridad en el esclavo en vez de en el maestro. Consulte Sección 6.1, “Introducción a la replicación”.
Si está utilizando un sistema de ficheros Veritas, puede hacer una copia de seguridad así:
Desde un programa cliente, ejecute FLUSH TABLES
WITH READ LOCK
.
Desde otra línea de comandos, ejecute mount vxfs
snapshot
.
Desde el primer cliente, ejecute UNLOCK
TABLES
.
Copie los archivos de la captura (snapshot).
Desmonte la captura.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.