Czy można powielić całą bazę danych MySQL na serwerze z systemem Linux?
Wiem, że mogę eksportować i importować, ale oryginalna baza danych ma> 25 MB, więc nie jest to idealne rozwiązanie.
Czy jest to możliwe przy użyciu mysqldump lub poprzez bezpośrednie kopiowanie plików bazy danych?
--routines
jako opcję w tym przypadku.~/.bash_history
pliku po wykonaniu. Możesz też wyprowadzić wynik pierwszego polecenia do pliku tymczasowego i wykonać następujące po nim (co spowoduje wyświetlenie monitu o hasło)mysql -p -u admin duplicatedb < temporaryfile.sql
.Na zdalny serwer
Do lokalnego serwera
źródło
Czasami wykonuję mysqldump i przesyłam dane wyjściowe do innego polecenia mysql, aby zaimportować je do innej bazy danych.
mysqldump --add-drop-table -u wordpress -p wordpress | mysql -u wordpress -p wordpress_backup
źródło
Utwórz plik mysqldump w systemie, który zawiera dane i użyj potoku, aby przekazać ten plik mysqldump jako dane wejściowe do nowego systemu. Nowy system można podłączyć za pomocą polecenia ssh.
brak spacji między -p [hasło]
źródło
Oto plik nietoperza systemu Windows, który napisałem, który łączy sugestie Vincenta i Paulsa. Pyta użytkownika o nazwy źródłowe i docelowe.
Po prostu zmodyfikuj zmienne u góry, aby ustawić odpowiednie ścieżki do plików wykonywalnych / portów bazy danych.
:: 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
Przykładowe dane wyjściowe:
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!!!
źródło
To nie zadziała w przypadku InnoDB. Użyj tego obejścia tylko wtedy, gdy próbujesz skopiować bazy danych MyISAM.
Jeśli blokowanie tabel podczas tworzenia kopii zapasowej i prawdopodobnie wstrzymywanie MySQL podczas importu bazy danych jest dopuszczalne, mysqlhotcopy może działać szybciej.
Na przykład
Utworzyć kopię zapasową:
# mysqlhotcopy -u root -p password db_name /path/to/backup/directory
Przywracać:
cp /path/to/backup/directory/* /var/lib/mysql/db_name
mysqlhotcopy może również przesyłać pliki przez SSH (scp) i prawdopodobnie bezpośrednio do zduplikowanego katalogu bazy danych.
Na przykład
# mysqlhotcopy -u root -p password db_name /var/lib/mysql/duplicate_db_name
źródło
Tworzenie kopii bazy danych
# mysqldump -u root -p password db1 > dump.sql # mysqladmin -u root -p password create db2 # mysql -u root -p password db2 < dump.sql
źródło
To zadziałało dla mnie z wierszem poleceń, z 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
To wygląda dla mnie najlepiej. Jeśli spakujesz plik „dump.sql”, możesz zapisać go jako skompresowaną kopię zapasową. Fajne! W przypadku bazy danych o pojemności 1 GB z tabelami Innodb potrzeba około minuty na utworzenie pliku „dump.sql” i około trzech minut na zrzucenie danych do nowej bazy DB db2.
Proste skopiowanie katalogu db otworu (mysql / data / db1) nie zadziałało dla mnie, chyba z powodu tabel InnoDB.
źródło
Dawno temu w MySQL można było po prostu skopiować wszystkie pliki tabel do innego katalogu w drzewie mysql
mysql cli - tworzy bazę danych db2
linux cli - cp db1 db2
źródło