it-swarm-eu.dev

Obnovte databázi mysql s jiným názvem

Jak můžeme obnovit databázi mysql s jiným názvem než soubor mysqldump. Nechci otevřít soubor výpisu a upravovat jej. Nějaké další lepší metody?

42

Můžete nechat mysqldump vytvořit výpis takovým způsobem, že nevytvoří ani nevybere databázi.

PŘÍKLAD: Rozkládáte databázi db1 a načítáte ji do databáze db2

Tím se do výpisu vloží příkazy CREATE DATABASE a USE

mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql

Toto nebude vloží příkaz CREATE DATABASE a USE do výpisu ( to je to, co chcete )

mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql

Můžete jej načíst do jiné databáze (například db2) jedním ze čtyř (4) způsobů:

MOŽNOST 1

$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2

MOŽNOST 2

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql

MOŽNOST

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql

MOŽNOST 4

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql

Pokusit se !!!

60
RolandoMySQLDBA

Jsem velkým fanouškem skládky, editace a vkládání. ale nemusíte otevírat textový soubor (výpisový soubor), abyste jej změnili (je to zvláště užitečné, když je několik milionů řádků dlouhé). pokud chcete vypsat databázi MYDATABASE.

mysqldump MYDATABASE > mydump.sql

pak použijte sed k nahrazení starého názvu databáze novým

sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql

pak můžete jednoduše vytvořit novou databázi a znovu ji importovat a vytvoří všechny tabulky s v nové databázi MYNEWDATABASE '

mysqladmin create MYNEWDATABASE

mysql MYNEWDATABASE < mydump.sql

Edit: Jak někteří pěkní lidé v poznámkách podotkli, může to být nebezpečné, pokud se některá data také změní výše, takže je možné konkretizovat způsoby, jak tomu zabránit.

1) Požádejte o to na skládce, než to změníte.

cat mydump.sql | grep "MYDATABASE"

a

2) můžeme přidat nějaké `, aby to bylo bezpečnější takto:

sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql

pokud má někdo jiný konkrétní návrhy, ráda upravím svou odpověď za další 4 roky.

7
Sverre

Pokud je soubor tím, co máte v ruce a manipulujete s ním ze shellu/konzole, použil bych sed k nahrazení řetězců na řádcích začínajících CREATE DABATASE, CREATE TABLE, USE a volitelně -- (komentáře mysqldump)

Nahrazení názvu db na řádcích, které odpovídají poznámkám Create Database, Create Table, Use a mysqldump

dbfile="yoursqldumpfile.sql";
dbname="current_db_name";
dbnewname="new_db_name";
dbnewfile="/tmp/$dbnewname.sql";
cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile


Samozřejmě, jako mnoho odpovědí, které jsou zde uvedeny, je snazší, pokud záloha mysqldump neobsahovala řádek CREATE DATABASE a USE. Význam možností --all-databases, --databases nebo jejich krátké verze -A nebo -B nebyly použity.

3
bksunday

Udělal jsem to jednou, už dávno.

Když exportujete všechna data, je zde možnost nastavit název databáze na začátku souboru, například: "use database x"

Toto prohlášení tedy můžete změnit.

3
Victor

Pokud provedete výpis pomocí následujících dvou pravidel:

  1. Nepoužívejte možnosti jako --databases, --database a jednoduše vložte název databáze na konec příkazu bez těchto voleb.
  2. Zahrnout možnost --no-create-db

Pokud uděláte následující, mysqldump vytvoří SQL bez odkazu na databázi, pak můžete při importu použít nový název databáze na konci příkazu mysql!

mysqldump  --no-create-db old_db_name --single-transaction --compress --order-by-primary --Host old_db_Host -u old_db_user -pOld_db_password | mysql --Host new_Host -u new_user -pnewpassword new_db_name
2
Neo

Zde je skript Shell, který vám umožní přidat příponu/příponu ke všem názvům schémat za běhu.

http://snippets.dzone.com/posts/show/13749

1
shantanuo