|
¿Cómo hacer copias de seguridad de una base de datos que corre en un servidor de MySQL? mysqldump nos da la solución más sencilla y fiable que jamás hubieramos podido imaginar.
El comando mysqldump es la solución perfecta a nuestra necesidad de realizar copias de seguridad de las bases de datos alojadas en nuestro servidor MySQL. El comando, incluído en cualquiera de las diferentes distribuciones de MySQL, nos ofrece la posibilidad de crear un sencillo archivo de texto que podrá ser utilizado en caso de necesidad para restaurar toda la estructura y todo el contenido de cualquier base de datos de nuestro sistema. Es más, podemos utilizar el fichero generado para la replicación de bases de datos en otras gestores distintos a MySQL, ya que dicho fichero incluye en su interior todas y cada una de las sentencias sql necesarias para la restauración/creación de la tabla copiada: desde la sentencia de creación de la tabla, hasta una sentencia insert por cada uno de los registros que forman parte de la misma. El comando ofrece un abanico bastante amplio de opciones que cubren casi con total seguridad todas las necesidades de cualquier usuario. Y, como puede intuirse por lo descrito con anterioridad, para restaurar la copia de seguridad, bastará con ejecutar todas las sentencias sql incluídas en el interior del fichero, bien desde la línea de comandos de MySQL o desde cualquier front-end al uso. Opciones Estudiemos algunas de las opciones más relevantes de mysqldump: --add-locks Añade LOCK TABLES antes, y UNLOCK TABLE despues de la copia de cada tabla. --add-drop-table Añade un drop table antes de cada sentencia create. -A, --all-databases Copia todas las bases de datos. Es lo mismo que utilizar --databases seleccionando todas. -a, --all Incluye todas las opciones de creación específicas de Mysql. --allow-keywords Permite la creación de nombes de columnas que son palabras clave, esto se realiza poniendo de prefijo a cada nombre de columna, el nombre de la tabla. -c, --complete-insert Utiliza inserts incluyendo los nombres de columna en cada sentencia (incrementa bastante el tamaño del fichero). -C, --compress Comprime la información entre el cliente y el servidor, si ambos soportan compresión. -B, --databases Para copiar varias bases de datos. En este caso, no se especifican tablas. El nombre de los argumentos se refiere a los nombres de las bases de datos. Se incluirá USE db_name en la salida antes de cada base de datos. --delayed Inserta las filas con el comando INSERT DELAYED. -e, --extended-insert Utiliza la sintaxis de INSERT multilinea. Proporciona sentencias de insert más compactas y rápidas. -#, --debug[=option_string] Utilización de la traza del programa (para depuración). --help Muestra mensaje de ayuda y termina. --fields-terminated-by=... --fields-enclosed-by=... --fields-optionally-enclosed-by=... --fields-escaped-by=... --lines-terminated-by=... Estas opciones se utilizan con la opción -T y tienen el mismo significado que la correspondiente cláusula LOAD DATA INFILE. -F, --flush-logs Escribe en disco todos los logs antes de comenzar con la copia. -f, --force, Continúa aunque se produzca un error de SQL durante la copia. -h, --host=.. Copia los datos del servidor de Mysql especificado. El servidor por defecto es localhost. -l, --lock-tables. Bloquea todas las tablas antes de comenzar con la copia. Las tablas se bloquean con READ LOCAL para permitir inserts concurrentes en caso de las tablas MyISAM. Cuando se realiza la copia de múltiples bases de datos, --lock-tables bloqueará la copia de cada base de datos por separado. De forma que esta opción no garantiza que las tables serán consistentes lógicamente entre distintas bases de datos. Las tablas en diferentes bases de datos se copiarán en estados completamente distintos. -K, --disable-keys Se inluirá en la salida /*!40000 ALTER TABLE tb_name DISABLE KEYS */; y /*!40000 ALTER TABLE tb_name ENABLE KEYS */; Esto hará que carga de datos en un servidor MySQL 4.0 se realice más rápido debido a que los índices se crearán después de que todos los datos hayan sido restaurados. -n, --no-create-db No se incluirá en la salida CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name; Esta línea se incluye si la opción --databases o --all-databases fue seleccionada. -t, --no-create-info No incluirá la información de creación de la tabla (sentencia CREATE TABLE). -d, --no-data No incluirá ninguna información sobre los registros de la tabla. Esta opción sirve para crear una copia de sólo la estructura de la base de datos. --opt Lo mismo que --quick --add-drop-table --add-locks --extended-insert --lock-tables. Esta opción le debería permitir realizar la copia de seguridad de la base de datos de la forma más rápida y efectiva. -pyour_pass, --password[=your_pass] Contraseña utilizada cuando se conecta con el servidor. Si no se especifica, `=your_pass', mysqldump preguntará la contraseña. -P, --port=... Puerto utilizado para las conexiones TCP/IP. --protocol=(TCP | SOCKET | PIPE | MEMORY) Especifica el protocolo de conexión que se utilizará. -q, --quick No almacena en el buffer la sentencia, la copia directamente a la salida. Utiliza mysql_use_result() para realizarlo. -Q, --quote-names Entrecomilla las tablas y nombres de columna con los caracteres ``'. -r, --result-file=... Redirecciona la salida al fichero especificado. Esta opción se debería utilizar en MSDOS, porque previene la conversión de nueva línea `n' en nueva línea y retorno de carro`nr'. --single-transaction Utiliza el comando BEGIN antes de realizar la copia desde el servidor. Es muy útil con las tables InnoDB y el nivel de transacción READ_COMMITTED, porque en este modo realizará la copia de seguridad en un estado consistente sin necesidad de bloquear las aplicaciones. Consultar el manual para más detalles. -S /path/to/socket, --socket=/path/to/socket El fichero de sockets que se especifica al conectar al localhost (que es el host predeterminado). --tables Sobreescribe la opción --databases (-B). -T, --tab=path-to-some-directory Crea un fichero table_name.sql, que contiene la sentencia de creación de SQL, y un fichero table_name.txt, que contiene los datos de cada tabla. El formato del fichero `.txt' se realiza de acuerdo con las opciones --fields-xxx y --lines--xxx options. Nota: Esta opción sólo funciona si el comando mysqldump se ejecuta en la misma másquina que el demonio mysqld, el usuario deberá tener permisos para crear y escribir el fichero en la ubicación especificada. -u nombre_usuario, --user=nombre_usuario El nombre de usuario que se utilizará cuando se conecte con el servidor, el valor predeterminado es el del usuario actual. -v, --verbose Va mostrando información sobre las acciones que se van realizando (más lento). -w, --where='cláusula where' Sirve para realizar la copia de determinados registros. -X, --xml Realiza la copia de seguridad en un documento xml. -x, --first-slave Bloquea todas las tablas de todas las bases de datos. Ejemplos de uso Una copia simple de una tabla de nuestro servidor podría realizarse mediante el comando siguiente: # mysqldump --opt --password=password --user=adminuser mydatabase > mydatabase.sql Crearíamos con esto una copia de mydatabase sobre el archivo mydatabase.sql, autenticándonos como adminuser con la contraseña password. El argumento opt (optimized), incluirá los argumentos más sofisticados y fiables para la posterior creación o restauración de las tablas. Como ejemplo, el argumento DROP TABLE IF EXISTS será creado al comienzo de cada cadena de creación de tabla, lo que permitirá borrar lo ya existente en una posible acción de restauración. Si no estamos seguros de las tablas que corren en nuestro servidor de MySQL, podemos escribir lo siguiente en la consola de comandos de MySQL: mysql> show databases; Que devolverá algo como esto: +----------+ | Database | +----------+ | mail | | mysql | | nuke | | test | +----------+ 4 rows in set (0.00 sec) En el siguiente ejemplo, crearemos una copia de seguridad de una tabla de MySQL en otro servidor diferente: # mysqldump --opt --password=password --user=adminuser mydatabase | mysql --host=192.168.1.24 -C newdatabase Con un solo comando, estamos haciendo una copia de seguridad de mydatabase en 192.168.1.24, utilizando compresión de datos entre servidores (-C) y creando la nueva tabla con el nombre de newdatabase. La restauración
Como ya hemos apuntado anteriormente, la restauración de los datos es algo tan sencillo como la ejecución de todos los comandos sql incluídos en el archivo creado, ya sea desde la consola de MySQL como desde cualquier gestor gráfico que usemos habitualmente. Como ejemplo, restauraremos una copia de seguridad de una tabla desde la linea de comandos:
# mysql --password=password --user=adminuser mydatabase < mydatabase.sql Sólo los usuarios registrados pueden escribir comentarios. Por favor, valídate o regístrate. Powered by AkoComment 2.0! |