95 votes

Duplication de 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 fait plus de 25 Mo, ce qui n'est pas idéal.

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

181voto

Vincent Ramdhanie Points 46265

Créez d'abord la base de données dupliquée :

CREATE DATABASE duplicateddb;

Assurez-vous que l'utilisateur et les autorisations sont tous en place et :

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

30 votes

Je ne pense pas qu'il devrait y avoir un espace entre "-p" et "password" dans la 2ème partie de votre 2ème ligne de commande

0 votes

Si vous voulez dupliquer toutes les bases de données (y compris les mysql base de données du système contenant les détails des utilisateurs, etc. --all-databases de la commande mysqldump, plutôt que de spécifier une base de données particulière.

17 votes

Non l'espace ne devrait pas être là ! La réponse est correcte comme ceci. La page de manuel de mysql dit : --password[=mot de passe], -p[mot de passe] Le mot de passe à utiliser lors de la connexion au serveur. Si vous utilisez la forme courte de l'option (-p), vous ne pouvez pas avoir d'espace entre l'option et le mot de passe. Si vous omettez la valeur du mot de passe après l'option --password ou -p sur la ligne de commande, mysql vous en demande un. La spécification d'un mot de passe sur la ligne de commande doit être considérée comme non sécurisée. Voir la Section 6.1.2.1, " Directives pour les utilisateurs finaux concernant le mot de passe... ".

17voto

Peter Lindqvist Points 6812

Vers le serveur distant

mysqldump mydbname | ssh host2 "mysql mydbcopy"

Vers le serveur local

mysqldump mydbname | mysql mydbcopy

0 votes

ERREUR 1064 (42000) : You have an error in your SQL syntax ;, hi showing error while using command in local server, please help.

0 votes

5voto

Paul Tomblin Points 83687

Je fais parfois un mysqldump et j'envoie la sortie dans une autre commande mysql pour l'importer dans une autre base de données.

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

0 votes

Lorsque j'utilise cette méthode, je reçois une erreur indiquant que la base de données dest n'existe pas. Vous avez donc besoin d'une ligne CREATE DATABASE également.

1voto

blak3r Points 5096

Voici un fichier bat Windows que j'ai écrit et qui combine les suggestions de Vincent et de Paul. Il demande à l'utilisateur les noms de la source et de la 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: 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

Exemple de sortie :

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

1voto

Pavel Points 1

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 verrouillage des tables pendant la sauvegarde et, éventuellement, la mise en pause de MySQL pendant l'importation de la base de données 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 par SSH (scp), et, éventuellement, directement dans le répertoire de la base de données dupliquée.

Par exemple

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X