Frage Doppelte vollständige MySQL-Datenbank


Ist es möglich, eine komplette MySQL-Datenbank auf einem Linux-Server zu duplizieren?

Ich weiß, dass ich exportieren und importieren kann, aber die ursprüngliche Datenbank ist> 25 MB, das ist nicht ideal.

Ist es möglich, mysqldump zu verwenden oder die Datenbankdateien direkt zu duplizieren?


76
2017-12-11 13:08


Ursprung


Antworten:


Erstellen Sie zuerst die doppelte Datenbank:

CREATE DATABASE duplicateddb;

Stellen Sie sicher, dass alle Benutzer und Berechtigungen vorhanden sind und:

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

151
2017-12-11 13:13



Zum entfernten Server

mysqldump mydbname | ssh host2 "mysql mydbcopy"

Zum lokalen Server

mysqldump mydbname | mysql mydbcopy

15
2017-12-11 13:12



Ich mache manchmal eine mysqldump und pipe die Ausgabe in einen anderen mysql-Befehl, um es in eine andere Datenbank zu importieren.

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

5
2017-12-11 13:10



Erstellen Sie eine mysqldump-Datei im System mit den Daten und verwenden Sie pipe, um diese mysqldump-Datei als Eingabe für das neue System zu verwenden. Das neue System kann mit dem Befehl ssh verbunden werden.

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

kein Leerzeichen zwischen -p [Passwort]


3
2018-05-06 13:25



Hier ist eine Windows-Fledermaus-Datei, die Vincent und Pauls Vorschläge kombiniert. Es fordert den Benutzer zur Eingabe von Quell- und Zielnamen auf.

Ändern Sie einfach die Variablen oben, um die richtigen Pfade zu Ihren ausführbaren Dateien / Datenbankports festzulegen.

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

Beispielausgabe:

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
2018-03-07 02:28



Dies funktioniert nicht für InnoDB. Verwenden Sie diese Problemumgehung nur, wenn Sie versuchen, MyISAM-Datenbanken zu kopieren.

Wenn das Sperren der Tabellen während der Sicherung und möglicherweise das Anhalten von MySQL während des Datenbankimports zulässig ist, mysqlhotcopy kann schneller arbeiten.

Z.B.

Sicherung:

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

Wiederherstellen:

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

mysqlhotcopy kann Dateien auch über SSH (scp) und möglicherweise direkt in das doppelte Datenbankverzeichnis übertragen.

Z.B.

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

1
2018-01-22 20:52



Eine Kopie einer Datenbank erstellen

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

1
2017-12-19 08:53



Dies funktionierte für mich mit der Eingabeaufforderung, von OUTSIDE mysql shell:

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

Das sieht für mich am besten aus. Wenn Sie "dump.sql" zippen, können Sie es als komprimiertes Backup speichern. Cool! Für eine 1-GB-Datenbank mit Innodb-Tabellen, etwa eine Minute zum Erstellen von "dump.sql" und etwa drei Minuten zum Bereitstellen von Daten in der neuen Datenbank db2.

Das direkte Kopieren des loch Datenbank-Verzeichnisses (mysql / data / db1) funktionierte bei mir nicht, ich vermute wegen der InnoDB-Tabellen.


0
2018-03-18 18:31