¿Es posible duplicar una base de datos MySQL completa en un servidor linux?
Sé que puedo exportar e importar, pero la base de datos original es> 25 MB, por lo que no es ideal.
¿Es posible usar mysqldump o duplicar directamente los archivos de la base de datos?
--routines
como una opción para este caso.~/.bash_history
archivo después de ejecutarla. O también puede enviar el resultado del primer comando a un archivo temporal y ejecutar lo siguiente después (que le pedirá la contraseña)mysql -p -u admin duplicatedb < temporaryfile.sql
.Al servidor remoto
Al servidor local
fuente
A veces hago un mysqldump y canalizo la salida a otro comando mysql para importarlo a una base de datos diferente.
mysqldump --add-drop-table -u wordpress -p wordpress | mysql -u wordpress -p wordpress_backup
fuente
Cree un archivo mysqldump en el sistema que tenga los datos y use pipe para dar este archivo mysqldump como entrada al nuevo sistema. El nuevo sistema se puede conectar mediante el comando ssh.
sin espacio entre -p [contraseña]
fuente
Aquí hay un archivo bat de Windows que escribí que combina las sugerencias de Vincent y Paul. Solicita al usuario los nombres de origen y destino.
Simplemente modifique las variables en la parte superior para establecer las rutas adecuadas a sus ejecutables / puertos de base de datos.
:: Creates a copy of a database with a different name. :: User is prompted for Src and destination name. :: Fair Warning: passwords are passed in on the cmd line, modify the script with -p instead if security is an issue. :: Uncomment the rem'd out lines if you want script to prompt for database username, password, etc. :: See also: http://stackoverflow.com/questions/1887964/duplicate-entire-mysql-database @set MYSQL_HOME="C:\sugarcrm\mysql\bin" @set mysqldump_exec=%MYSQL_HOME%\mysqldump @set mysql_exec=%MYSQL_HOME%\mysql @set SRC_PORT=3306 @set DEST_PORT=3306 @set USERNAME=TODO_USERNAME @set PASSWORD=TODO_PASSWORD :: COMMENT any of the 4 lines below if you don't want to be prompted for these each time and use defaults above. @SET /p USERNAME=Enter database username: @SET /p PASSWORD=Enter database password: @SET /p SRC_PORT=Enter SRC database port (usually 3306): @SET /p DEST_PORT=Enter DEST database port: %MYSQL_HOME%\mysql --user=%USERNAME% --password=%PASSWORD% --port=%DEST_PORT% --execute="show databases;" @IF NOT "%ERRORLEVEL%" == "0" GOTO ExitScript @SET /p SRC_DB=What is the name of the SRC Database: @SET /p DEST_DB=What is the name for the destination database (that will be created): %mysql_exec% --user=%USERNAME% --password=%PASSWORD% --port=%DEST_PORT% --execute="create database %DEST_DB%;" %mysqldump_exec% --add-drop-table --user=%USERNAME% --password=%PASSWORD% --port=%SRC_PORT% %SRC_DB% | %mysql_exec% --user=%USERNAME% --password=%PASSWORD% --port=%DEST_PORT% %DEST_DB% @echo SUCCESSFUL!!! @GOTO ExitSuccess :ExitScript @echo "Failed to copy database" :ExitSuccess
Salida de muestra:
C:\sugarcrm_backups\SCRIPTS>copy_db.bat Enter database username: root Enter database password: MyPassword Enter SRC database port (usually 3306): 3308 Enter DEST database port: 3308 C:\sugarcrm_backups\SCRIPTS>"C:\sugarcrm\mysql\bin"\mysql --user=root --password=MyPassword --port=3308 --execute="show databases;" +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sugarcrm_550_pro | | sugarcrm_550_ce | | sugarcrm_640_pro | | sugarcrm_640_ce | +--------------------+ What is the name of the SRC Database: sugarcrm What is the name for the destination database (that will be created): sugarcrm_640_ce C:\sugarcrm_backups\SCRIPTS>"C:\sugarcrm\mysql\bin"\mysql --user=root --password=MyPassword --port=3308 --execute="create database sugarcrm_640_ce;" C:\sugarcrm_backups\SCRIPTS>"C:\sugarcrm\mysql\bin"\mysqldump --add-drop-table --user=root --password=MyPassword --port=3308 sugarcrm | "C:\sugarcrm\mysql\bin"\mysql --user=root --password=MyPassword --port=3308 sugarcrm_640_ce SUCCESSFUL!!!
fuente
Esto no funcionará para InnoDB. Utilice esta solución alternativa solo si está intentando copiar bases de datos MyISAM.
Si bloquear las tablas durante la copia de seguridad y, posiblemente, pausar MySQL durante la importación de la base de datos es aceptable, mysqlhotcopy puede funcionar más rápido.
P.ej
Apoyo:
# mysqlhotcopy -u root -p password db_name /path/to/backup/directory
Restaurar:
cp /path/to/backup/directory/* /var/lib/mysql/db_name
mysqlhotcopy también puede transferir archivos a través de SSH (scp) y, posiblemente, directamente al directorio de la base de datos duplicada.
P.ej
# mysqlhotcopy -u root -p password db_name /var/lib/mysql/duplicate_db_name
fuente
Hacer una copia de una base de datos
# mysqldump -u root -p password db1 > dump.sql # mysqladmin -u root -p password create db2 # mysql -u root -p password db2 < dump.sql
fuente
Esto funcionó para mí con el símbolo del sistema, desde FUERA del shell mysql:
# mysqldump -u root -p password db1 > dump.sql # mysqladmin -u root -p password create db2 # mysql -u root -p password db2 < dump.sql
Esto me busca de la mejor manera. Si comprime "dump.sql", simplemente puede almacenarlo como una copia de seguridad comprimida. ¡Frio! Para una base de datos de 1GB con tablas Innodb, alrededor de un minuto para crear "dump.sql" y alrededor de tres minutos para volcar datos en la nueva base de datos db2.
La copia directa del directorio db del agujero (mysql / data / db1) no funcionó para mí, supongo que debido a las tablas InnoDB.
fuente
Érase una vez en MySQL, simplemente podía copiar todos los archivos de la tabla a otro directorio en el árbol de mysql
mysql cli - crear base de datos db2
linux cli - cp db1 db2
fuente