mysqlhotcopy es un script perl que viene con la instalación de MySQL. Esto bloquea la tabla, vacía la tabla y luego realiza una copia de la base de datos. También puede usar mysqlhotcopy para copiar automáticamente la copia de seguridad directamente a otro servidor usando scp
.
1. comando mysqlhotcopy:
[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold
El ejemplo anterior realiza una copia de seguridad de sugarcrm, una base de datos MySQL en el directorio /home/backup/database.
- –allowold:esta opción cambia el nombre de la copia de seguridad anterior a {datbase-name}_old antes de realizar una nueva copia de seguridad. En este ejemplo, si la copia de seguridad de sugarcrm ya existe en /home/backup/database, moverá la copia de seguridad anterior a /home/backup/database/sugarcrm_old antes de crear /home/backup/database/sugarcrm.
- –keepold:esta opción le indica a mysqlhotcopy que conserve la copia de seguridad anterior (es decir, el renombrado _old) después de que se complete la copia de seguridad.
Vea la documentación de mysqlhotcopy usando perldoc como se muestra a continuación.
[local-host]# perldoc mysqlhotcopy
Las siguientes son las opciones disponibles que se pueden pasar al comando mysqlhotcopy.
Opción | Descripción |
–addtodest | No cambie el nombre del directorio de destino (si existe); simplemente agregue archivos a él |
–permitido | No cancelar si existe un objetivo; cámbiele el nombre agregando un _sufijo antiguo |
–checkpoint=nombre_bd.nombre_tbl | Insertar entradas de punto de control |
–chroot=ruta | Directorio base del chroot jail en el que opera mysqld |
–depurar | Escribir un registro de depuración |
–ejecución en seco | Reportar acciones sin realizarlas |
–flushlogs | Vaciar registros después de que todas las tablas estén bloqueadas |
–ayuda | Mostrar mensaje de ayuda y salir |
–host=nombre_host | Conéctese al servidor MySQL en el host dado |
–mantenimiento | No elimine el objetivo anterior (renombrado) cuando haya terminado |
–sin índices | No incluya archivos de índice completos en la copia de seguridad |
–contraseña[=contraseña] | La contraseña a utilizar al conectarse al servidor |
–port=número_puerto | El número de puerto TCP/IP a usar para la conexión |
–silencio | Guardar silencio excepto por errores |
–regexp | Copiar todas las bases de datos con nombres que coincidan con la expresión regular dada |
–restablecer maestro | Restablecer el registro binario después de bloquear todas las tablas |
–restablecer esclavo | Restablezca el archivo master.info después de bloquear todas las tablas |
–socket=ruta | Para conexiones a localhost |
–tmpdir=ruta | El directorio temporal |
–usuario=nombre_usuario, | El nombre de usuario de MySQL que se usará al conectarse al servidor |
–versión | Mostrar información de versión y salir |
2. Salida del comando mysqlhotcopy:
El comando mysqlhotcopy anterior mostrará un resultado similar al siguiente.
[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold Locked 98 tables in 0 seconds. Flushed tables (`sugarcrm`.`accounts`, `sugarcrm`.`accounts_audit`, `sugarcrm`.`accounts_bugs`) in 0 seconds. Copying 295 files... Copying indices for 0 files... Unlocked tables. mysqlhotcopy copied 98 tables (295 files) in 0 seconds (0 seconds overall).
De forma predeterminada, la base de datos MySQL se encuentra en /var/lib/mysql/{db-name}. mysqlhotcopy realiza una copia de seguridad de los archivos de la tabla desde esta ubicación de base de datos predeterminada al directorio de copia de seguridad. El directorio de copia de seguridad /home/backup/database/sugarcrm, contendrá una copia exacta de todos los archivos del directorio real de la base de datos MySQL /var/lib/mysql/sugarcrm.
[local-host]# ls -1 /var/lib/mysql/sugarcrm | wc -l 295 [local-host]# ls -1 /home/backup/database/sugarcrm | wc -l 295
Tenga en cuenta que cada tabla tiene tres archivos correspondientes con la extensión *.frm, *.MYD y *.MYI. El directorio de la base de datos también contiene un archivo db.opt que contiene el parámetro relacionado con la base de datos.
En el ejemplo anterior, puede ver que mysqlhotcopy realiza una copia de seguridad de 98 tablas de la base de datos sugarcrm. Entonces, el número total de archivos en el directorio de copia de seguridad =98 tablas * 3 + 1 archivo de configuración de db =296 archivos.
3. Restaurar desde mysqlhotcopy
Para restaurar la copia de seguridad desde la copia de seguridad de mysqlhotcopy, simplemente copie los archivos del directorio de copia de seguridad al directorio /var/lib/mysql/{db-name}. Solo para estar seguro, asegúrese de detener mysql antes de restaurar (copiar) los archivos. Después de copiar los archivos en /var/lib/mysql/{db-name}, vuelva a iniciar mysql.
4. Solución de problemas de mysqlhotcopy
¿Cómo resolver el problema No se puede ubicar DBD/mysql.pm? mysqlhotcopy es un script perl y requiere el módulo perl-DBD. Puede recibir el siguiente error al ejecutar mysqlhotcopy si el módulo perl-DBD no está instalado.
[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 7) line 3. Perhaps the DBD::mysql perl module hasn't been fully installed, or perhaps the capitalisation of 'mysql' isn't right. Available drivers: DBM, ExampleP, File, Proxy, Sponge. at /usr/bin/mysqlhotcopy line 177
Asegúrese de instalar el paquete perl-DBD como se muestra a continuación.
[local-host]# rpm -ivh perl-DBD-MySQL-3.0007-1.fc6.i386.rpm Preparing... ########################################### [100%] 1:perl-DBD-MySQL ########################################### [100%]
¿Cómo resolver el problema con la instalación de perl-DBD? Al instalar perl-DBD, es posible que reciba el siguiente mensaje de error.
[local-host]# rpm -ivh perl-DBD-MySQL-3.0007-1.fc6.i386.rpm rpmdb: Program version 4.3 doesn't match environment version error: db4 error(-30974) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch error: cannot open Packages index using db3 - (-30974) warning: cannot open Solve database in /usr/lib/rpmdb/i386-redhat-linux/redhat rpmdb: Program version 4.3 doesn't match environment version error: db4 error(-30974) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch warning: cannot open Solve database in /usr/lib/rpmdb/i386-redhat-linux/redhat error: Failed dependencies: libmysqlclient.so.15 is needed by perl-DBD-MySQL-3.0007-1.fc6.i386 libmysqlclient.so.15(libmysqlclient_15) is needed by perl-DBD-MySQL-3.0007-1.fc6.i386
Descargue e instale MySQL-shared-compat desde mysql.com y esto debería resolver el error mencionado anteriormente al instalar el paquete perl-DBD.
[local-host]# rpm -ivh MySQL-shared-compat-5.1.25-0.rhel5.i386.rpm Preparing... ########################################### [100%] 1:MySQL-shared-compat ########################################### [100%]
¿Utiliza algún otro método para hacer una copia de seguridad o restaurar su base de datos MySQL? Por favor, deje sus comentarios.