Dupliquer la firebase database MySQL

Est-il possible de dupliquer une firebase database MySQL complète sur un serveur Linux?

Je sais que je peux utiliser l’exportation et l’importation, mais la firebase database d’origine est> 25 Mo, ce qui n’est pas idéal.

Est-il possible d’utiliser mysqldump ou de dupliquer directement les fichiers de firebase database?

Commencez par créer la firebase database en double:

CREATE DATABASE duplicateddb; 

Assurez-vous que l’utilisateur et les permissions sont tous en place et:

  mysqldump -u admin -p originaldb | mysql -u backup -pPassword duplicateddb; 

Vers le serveur distant

 mysqldump mydbname | ssh host2 "mysql mydbcopy" 

Vers le serveur local

 mysqldump mydbname | mysql mydbcopy 

Je fais parfois un mysqldump et dirige la sortie vers une autre commande mysql pour l’importer dans une autre firebase database.

 mysqldump --add-drop-table -u wordpress -p wordpress | mysql -u wordpress -p wordpress_backup 

Créez un fichier mysqldump dans le système qui contient les données et utilisez pipe pour donner ce fichier mysqldump en entrée du nouveau système. Le nouveau système peut être connecté à l’aide de la commande ssh.

 mysqldump -u user -p'password' db-name | ssh user@some_far_place.com mysql -u user -p'password' db-name 

pas d’espace entre -p [mot de passe]

Voici un fichier Windows Bat que j’ai écrit et qui combine les suggestions de Vincent et Paul. Il invite l’utilisateur pour les noms de source et de destination.

Modifiez simplement les variables en haut pour définir les chemins appropriés vers les ports de vos exécutables / bases de données.

 :: 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 

Sortie de l’échantillon:

 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!!! 

Cela ne fonctionnera pas pour InnoDB. Utilisez cette solution de contournement uniquement si vous essayez de copier des bases de données MyISAM.

Si le locking des tables pendant la sauvegarde et, éventuellement, la suspension de MySQL lors de l’importation de la firebase database sont acceptables, mysqlhotcopy peut fonctionner plus rapidement.

Par exemple

Sauvegarde:

 # mysqlhotcopy -u root -p password db_name /path/to/backup/directory 

Restaurer:

 cp /path/to/backup/directory/* /var/lib/mysql/db_name 

mysqlhotcopy peut également transférer des fichiers via SSH (scp) et, éventuellement, directement dans le répertoire de firebase database en double.

Par exemple

 # mysqlhotcopy -u root -p password db_name /var/lib/mysql/duplicate_db_name 

Faire une copie d’une firebase database

 # mysqldump -u root -p password db1 > dump.sql # mysqladmin -u root -p password create db2 # mysql -u root -p password db2 < dump.sql 

Cela a fonctionné pour moi avec l’invite de commande, du shell mysql OUTSIDE:

 # mysqldump -u root -p password db1 > dump.sql # mysqladmin -u root -p password create db2 # mysql -u root -p password db2 < dump.sql 

Cela me semble la meilleure façon. Si vous compressez "dump.sql", vous pouvez le stocker comme une sauvegarde compressée. Cool! Pour une firebase database de 1 Go avec des tables Innodb, environ une minute pour créer "dump.sql", et environ trois minutes pour vider les données dans la nouvelle firebase database DB2.

Copier directement le répertoire hole db (mysql / data / db1) ne fonctionnait pas pour moi, à cause des tables InnoDB.