Ik zou graag een script willen schrijven dat mijn huidige database sitedb1
kopieert naar sitedb2
op dezelfde mysql database-instantie. Ik weet dat ik de sitedb1 naar een sql-script kan dumpen:
mysqldump -u root -p sitedb1 >~/db_name.sql
en importeer het dan in sitedb2
.
Is er een eenvoudigere manier, zonder de eerste database naar een sql-bestand te dumpen?
Antwoord 1, autoriteit 100%
Zoals de handleiding zegt in Databases kopiërenkan de dump rechtstreeks naar de mysql-client sturen:
mysqldump db_name | mysql new_db_name
Als je MyISAM gebruikt, zoude bestanden kunnen worden gekopieerd, maar ik zou het niet aanraden. Het is een beetje onbetrouwbaar.
Geïntegreerd vanuit verschillende goede andere antwoorden
Zowel mysqldump
als mysql
commando’s accepteren opties voor het instellen van verbindingsdetails (en nog veel meer), zoals:
mysqldump -u <user name> --password=<pwd> <original db> | mysql -u <user name> -p <new db>
Als de nieuwe database nog niet bestaat, moet u deze ook van tevoren maken (bijv. met echo "create database new_db_name" | mysql -u <dbuser> -p
).
p>
Antwoord 2, autoriteit 21%
MySQL-hulpprogramma’s gebruiken
De MySQL-hulpprogramma’s bevatten de mooie tool mysqldbcopy
die standaard een DB kopieert, inclusief alle gerelateerde objecten (“tabellen, weergaven, triggers, gebeurtenissen, procedures, functies en toewijzingen op databaseniveau”) en gegevens van de ene DB-server naar dezelfde of naar een andere DB-server. Er zijn veel opties beschikbaar om aan te passen wat er daadwerkelijk wordt gekopieerd.
Dus, om de vraag van de OP te beantwoorden:
mysqldbcopy \
--source=root:your_password@localhost \
--destination=root:your_password@localhost \
sitedb1:sitedb2
Antwoord 3, autoriteit 6%
De beste en makkelijke manier is om deze commando’s in je terminal in te voeren en de rechten voor de rootgebruiker in te stellen. Werkt voor mij..!
:~$> mysqldump -u root -p db1 > dump.sql
:~$> mysqladmin -u root -p create db2
:~$> mysql -u root -p db2 < dump.sql
Antwoord 4, autoriteit 5%
mysqladmin create DB_name -u DB_user --password=DB_pass && \
mysqldump -u DB_user --password=DB_pass DB_name | \
mysql -u DB_user --password=DB_pass -h DB_host DB_name
Antwoord 5, autoriteit 4%
U moet de opdracht uitvoeren vanaf terminal / opdrachtprompt.
mysqldump -u <user name> -p <pwd> <original db> | mysql -u <user name> <pwd> <new db>
bijv.: mysqldump -u root test_db1 | mysql -u root test_db2
Dit kopieert test_db1 naar test_db2 en verleent de toegang tot ‘root’@’localhost’
Antwoord 6, autoriteit 3%
Je zou kunnen gebruiken (in pseudocode):
FOREACH tbl IN db_a:
CREATE TABLE db_b.tbl LIKE db_a.tbl;
INSERT INTO db_b.tbl SELECT * FROM db_a.tbl;
De reden dat ik de CREATE TABLE … SELECT … syntaxis niet gebruik, is om indexen te behouden. Dit kopieert natuurlijk alleen tabellen. Aanzichten en procedures worden niet gekopieerd, hoewel het wel op dezelfde manier kan.
Zie TABEL MAKEN.
Antwoord 7, autoriteit 2%
Maak eerst de dubbele database:
CREATE DATABASE duplicateddb;
Zorg ervoor dat de rechten enz. allemaal aanwezig zijn en:
mysqldump -u admin -p originaldb | mysql -u backup -p password duplicateddb;
Antwoord 8
Een eenvoudige manier om dit te doen als u phpmyadminheeft geïnstalleerd:
Ga naar uw database, selecteer het tabblad “bewerking” en u ziet het blok “database kopiëren naar”. Gebruik het en je kunt de database kopiëren.
Antwoord 9
Je kunt zoiets als het volgende doen:
mysqldump -u[username] -p[password] database_name_for_clone
| mysql -u[username] -p[password] new_database_name
Antwoord 10
Deze verklaring is toegevoegd in MySQL 5.1.7, maar werd gevaarlijk bevonden en werd verwijderd in MySQL 5.1.23. Het was bedoeld om het upgraden van databases van vóór 5.1 mogelijk te maken om de codering te gebruiken die in 5.1 is geïmplementeerd voor het toewijzen van databasenamen aan databasedirectorynamen. Het gebruik van deze instructie kan echter leiden tot verlies van database-inhoud, daarom is deze verwijderd. Gebruik RENAME DATABASE niet in eerdere versies waarin het aanwezig is.
Als u de taak van het upgraden van databasenamen met de nieuwe codering wilt uitvoeren, gebruikt u in plaats daarvan ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME: http://dev.mysql.com/doc/refman/5.1/en/alter-database.html
Antwoord 11
Naast Gregs antwoord, is dit de gemakkelijkste en snelste manier als de new_db_name
dat niet doet bestaat nog niet:
echo "create database new_db_name" | mysql -u <user> -p <pwd>
mysqldump -u <user> -p <pwd> db_name | mysql -u <user> -p <pwd> new_db_name
Antwoord 12
Als u triggers in uw oorspronkelijke database heeft, kunt u de fout ‘Trigger bestaat al’ vermijden door een vervanging voor de import door te sturen:
mysqldump -u olddbuser -p -d olddbname | sed "s/`olddbname`./`newdbname`./" | mysql -u newdbuser -p -D newdbname
Antwoord 13
Mijndumper gebruiken
sudo apt install mydumper
Dump genereren
mydumper --user=YOUR_USER --password=YOUR_PASSWORD -B YOUR_CURRENT_DB \
--triggers --routines --events --outputdir YOUR_OUTPUT_DIR
Dump laden
myloader --user=YOUR_USER --password=YOUR_PASSWORD --database=YOUR_NEW_DB \
--directory=YOUR_OUTPUT_DIR