Mysql veritabanını mysqldump dosyasından farklı adlarla nasıl geri yükleyebiliriz. Dökümü dosyasını açmak ve düzenlemek istemiyorum. Başka daha iyi yöntemler var mı?
Mysql veritabanını mysqldump dosyasından farklı adlarla nasıl geri yükleyebiliriz. Dökümü dosyasını açmak ve düzenlemek istemiyorum. Başka daha iyi yöntemler var mı?
Yanıtlar:
Mysqldump öğesinin veritabanını oluşturmayacağı veya seçmeyeceği şekilde dökümü oluşturmasına izin verebilirsiniz.
ÖRNEK: db1 veritabanını atıyor ve db2 veritabanına yüklüyorsunuz
Bu, CREATE DATABASE ve USE komutlarını çöplüğe koyuyor
mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql
Bu olmaz (CREATE DATABASE ve çöplükte KULLANIM komutları koymak istediğini budur )
mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
Dört (4) yoldan biriyle başka bir veritabanına (db2 gibi) yükleyebilirsiniz:
SEÇENEK 1
$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2
SEÇENEK 2
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql
SEÇENEK 3
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql
SEÇENEK 4
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql
Bir şans ver !!!
ALTER DATABASE ... CHARACTER SET ...
içeri aktarımı engelleyen bir içeriğe sahip . Düzenleme: Oracle temelde hatayı görmezden geliyor .
Ben büyük bir çöplük hayranıyım, kurgula ve yerleştir. ancak bunu değiştirmek için metin dosyasını (döküm dosyası) açmak zorunda değilsiniz (bu birkaç milyon satır uzunluğunda olduğunda özellikle yararlıdır). veritabanını boşaltmak istiyorsanız MYDATABASE
.
mysqldump MYDATABASE > mydump.sql
sonra eski veritabanının adını bunun gibi yenisiyle değiştirmek için sed komutunu kullanın.
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
o zaman basitçe yeni veritabanını oluşturabilir ve tekrar içe aktarabilir ve tüm veri tablolarını MYNEWDATABASE içindeki yeni veri tablolarında yaratacaktır.
mysqladmin create MYNEWDATABASE
mysql MYNEWDATABASE < mydump.sql
Düzenleme: Yorumlar bölümündeki bazı hoş insanlar, işaret ettikleri gibi, bazı veriler yukarıdakilerle de değiştirildiyse, bu tehlikeli olabilir;
1) Çöpte bunun için Grep'i, değiştirmeden önce, böyle yapın.
cat mydump.sql | grep "MYDATABASE"
ve
2) bazılarını bu şekilde daha güvenli hale getirmek için ekleyebiliriz:
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
Başka birinin somut önerileri varsa, cevabımı başka bir 4 yılda düzenlemekten memnuniyet duyarım.
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
) çalıştırmadan önce, cat mydump.sql | grep "MYDATABASE"
yalnızca veritabanı adının değiştirildiğinden emin olmak için MYDATABASE'in tüm oluşumlarını kontrol edin , diğer veriler dokunulmadan kalır.
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
# potansiyel olarak daha güvenli buhar düzenleme. veritabanı dökümü, USE veya CREATE DATABASE deyimlerini içermiyor, ancak db adı sql yorumlarında, görünümlerinde ve tetikleyicilerinde bulunuyor (MySQL 5.7). Bu, yorumlarda veritabanı adını değiştirmez, ancak sonuçta ortaya çıkan veritabanı üzerinde etkisi yoktur. Bu benim için iyi çalıştı.
Elinizde ne varsa dosyasıdır ve bir kabuk / konsoldan manipüle ediyorlar, ben kullanırım sed
ile başlayan hatları üzerinde dize değiştirmeler yapmak CREATE DABATASE
, CREATE TABLE
, USE
ve optionnally --
(Mysqldump yorum)
Db adını, Veritabanı Oluştur, Tablo Oluştur, Kullan ve mysqldump açıklamalarıyla eşleşen satırlara yerleştirme
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
Elbette buradaki cevapların çoğunda olduğu gibi, mysqldump yedeklemesinin bir CREATE DATABASE ve bir USE satırı içermemesi daha kolay. Seçeneklerin --all-databases
, --databases
kısa sürümlerin -A
veya -B
kullanılmadığı anlamına gelir.
--no-create-db
olsun --database
ya da olmasın , tetikleyici ve görünümlerde veritabanı adını içerir --databases
.
Aşağıdaki iki kuralı kullanarak bir dökümü yaparsanız:
--databases
, Gibi seçenekleri kullanmayın --database
ve sadece bu seçenek olmadan komutun sonuna veritabanı adını koymanız yeterlidir.--no-create-db
Aşağıdakileri yaparsanız, mysqldump veritabanına başvurmadan SQL'i yaratacaktır, daha sonra içe aktarma sırasında mysql komutunuzun sonunda yeni veritabanı adını kullanabilirsiniz!
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
--no-create-db
olsun --database
ya da olmasın , tetikleyici ve görünümlerde veritabanı adını içerir --databases
.
İşte anında tüm şema adlarına sonek / ek eklemek için izin verecek kabuk betiği.
-Ddb2
etmişse, önünde bir tire olmamalıdır. En azından, eklediğimde bir MySQL sözdizimi hatası aldım.