Dupliquer Toute La Base De Données MySQL

est-il possible de dupliquer une base de données MySQL entière sur un serveur linux?

je sais que je peux utiliser l'exportation et l'importation, mais la base de données originale est >25MB donc ce n'est pas idéal.

est-il possible d'utiliser mysqldump ou de dupliquer directement les fichiers de la base de données?

76
demandé sur Adam Dempsey 2009-12-11 16:08:13

8 réponses

créer D'abord la base de données dupliquée:

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; 
153
répondu Vincent Ramdhanie 2014-01-21 13:21:56

au serveur distant

mysqldump mydbname | ssh host2 "mysql mydbcopy"

au serveur local

mysqldump mydbname | mysql mydbcopy
15
répondu Peter Lindqvist 2009-12-11 13:12:09

il m'arrive de faire un mysqldump et de Piper la sortie dans une autre commande mysql pour l'importer dans une base de données différente.

mysqldump --add-drop-table -u wordpress -p wordpress | mysql -u wordpress -p wordpress_backup
5
répondu Paul Tomblin 2009-12-11 13:10:22

crée un fichier mysqldump dans le système qui a les données et utilise pipe pour donner ce fichier mysqldump comme entrée dans le nouveau système. Le nouveau système peut être connecté en utilisant 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]

3
répondu JintoThomas 2015-05-07 09:52:09

voici un fichier bat windows que j'ai écrit qui combine les suggestions de Vincent et Pauls. Il invite l'utilisateur pour les noms de source et de destination.

il suffit de modifier les variables en haut pour définir les chemins appropriés vers vos exécutables / ports de base 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: /q/duplicate-entire-mysql-database-3778/"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 D'é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!!!
1
répondu blak3r 2012-03-07 02:28:38

ça ne marchera pas pour InnoDB. Utilisez cette solution de contournement seulement si vous essayez de copier les bases de données MyISAM.

si le verrouillage des tables pendant la sauvegarde, et, éventuellement, l'arrêt de MySQL pendant l'importation de la base de données est acceptable, mysqlhotcopy peut fonctionner plus rapidement.

E. G.

de Sauvegarde:

# mysqlhotcopy -u root -p password db_name /path/to/backup/directory
"1519110920 de Restauration":
cp /path/to/backup/directory/* /var/lib/mysql/db_name

mysqlhotcopie peut également transférer des fichiers sur SSH (scp), et, éventuellement, directement dans le répertoire de la base de données dupliquée.

E. G.

# mysqlhotcopy -u root -p password db_name /var/lib/mysql/duplicate_db_name
1
répondu Pavel 2014-12-04 13:19:46

faire une copie d'une base de données

# mysqldump -u root -p password db1 > dump.sql
# mysqladmin -u root -p password create db2
# mysql -u root -p password db2 < dump.sql
1
répondu Maulik patel 2017-12-19 08:53:23

cela a fonctionné pour moi avec l'invite de commande, depuis l'extérieur du 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

Cela ressemble pour moi la meilleure façon. Si la compression de "vidage.sql" vous pouvez le stocker comme une sauvegarde compressée. Cool! Pour une base de données de 1 Go avec des tables Innodb, environ une minute pour créer " dump.sql", et environ trois minutes pour décharger des données dans la nouvelle DB db2.

copier directement le répertoire hole db (mysql / data / db1) n'a pas fonctionné pour moi, je suppose à cause de L'InnoDB table.

0
répondu DrOne 2018-03-18 18:31:13