Bir MySQL veritabanını aynı MySql örneğinde klonlama


154

Ben hangi kopya benim şimdiki veritabanını bir senaryo yazmak istiyorum sitedb1için sitedb2aynı MySQL veritabanı örneğinde. Sitedb1'i bir sql betiğine dökebileceğimi biliyorum:

mysqldump -u root -p sitedb1 >~/db_name.sql

ve sonra içine aktarın sitedb2. İlk veritabanını bir sql dosyasına dökmeden daha kolay bir yol var mı?


Yanıtlar:


303

Kılavuzun Veritabanlarını Kopyalama bölümünde söylediği gibi, dökümü doğrudan mysql istemcisine bağlayabilirsiniz:

mysqldump db_name | mysql new_db_name

Eğer MyISAM kullanıyorsanız, olabilir dosyaları kopyalamak, ama bunu tavsiye etmem. Biraz tehlikeli.

Çeşitli diğer iyi cevaplardan entegre edilmiştir

Hem mysqldumpve mysqlkomutlar gibi, bağlantı ayrıntıları ayarı (ve çok daha fazlası) için seçenekleri kabul ediyoruz:

mysqldump -u <user name> --password=<pwd> <original db> | mysql -u <user name> -p <new db>

Ayrıca, yeni veritabanı henüz mevcut değilse, önceden oluşturmalısınız (örn echo "create database new_db_name" | mysql -u <dbuser> -p. İle ).


2
Tür ... verileri iki kez okumak / yazmak zorunda olmadığınız için çok fazla disk IO atlıyor
Greg

8
Veritabanınız gigabayt boyutundaysa, bu muhtemelen size çok fazla kazanç sağlamaz. Bence OP hangi alıyor, kopyayı dışlamak istemiyorlar: tamamen mysql içinde yapılabilir mi?
cletus

3
DB ne kadar büyük olursa o kadar çok kazanır ... Bunu MySQL afaik içinde yapmanın bir yolu yok (elle, bir seferde bir tablo / görünüm hariç)
Greg

41
İlk önce standart mysql komutunu kullanarak new_db oluşturmak zorunda kaldı: "CREATE DATABASE new_db;" ve sonra şu komutları kullandı: mysqldump -u root -p old_db | mysql -u kök -p new_db
valentt

4
Ben damping ve böyle ithalatı için şifre koymak için varsa bu, benim için çalışmıyor: mysqldump -uroot -p database1 | mysql -uroot -p database2. Ben her iki pws sorulur ama sadece bir koyabilirsiniz. İstemi görünüyor bu gibi: Enter password: Enter password: . İlk pw verdikten sonra süreç sonsuza kadar bekler.
Torsten

66

MySQL Yardımcı Programlarını Kullanma

MySQL Yardımcı Programları, mysqldbcopyvarsayılan olarak tüm ilgili nesneleri (“tablolar, görünümler, tetikleyiciler, olaylar, prosedürler, işlevler ve veritabanı düzeyinde hibeler”) içeren bir DB'yi kopyalayan ve bir DB sunucusundan diğerine aynı veya diğerine veri kopyalayan güzel bir araç içerir. DB sunucusu. Gerçekten kopyalananları özelleştirmek için birçok seçenek vardır.

OP'nin sorusunu cevaplamak için:

mysqldbcopy \
    --source=root:your_password@localhost \
    --destination=root:your_password@localhost \
    sitedb1:sitedb2

1
Bu benim için iyi çalıştı, mysqldumptabanlı çözüm başarısız oldu.
saji89

1
Benim durumumda böyle bağlantı noktasını belirtmek zorunda kaldım: --source = root: your_password @ localhost: 3307 (aksi takdirde bana erişim reddedildi hatası verecekti)
pbz

4
Gerek sudo apt-get install mysql-utilities, ama bu çok temiz. Parolayı dışarıda bırakıp girmem istenebilir mi?
ADTC

2
@ ADTC mysqldbcopyŞifreyi sormanıza izin veren yerleşik bir yol olup olmadığını bilmiyorum ; en azından belgelerde böyle bir şey bulamadım. Yine de bu işlevi kendiniz oluşturabilirsiniz. Bash'de şöyle görünebilir:mysqldbcopy --source=root:"$(read -sp 'Source password: ' && echo $REPLY)"@localhost --destination=root:"$(read -sp 'Destination password: ' && echo $REPLY)"@localhost sitedb1:sitedb2
Chriki

1
FYI: Görünüşe göre Chriki'nin emri kusursuz çalışıyor. Daha önce hedef veritabanını oluşturmuş olduğum --forceiçin mysqldbcopykomuta eklemek zorunda kaldım. Teşekkürler!
Niavlys

19
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

2
Kabul edilen cevaba ne katar? Benzer, ancak bazı farklılıklar ekleyin, daha iyi anlamak için bazı yorumlar ekleyin
Yaroslav

Veritabanını oluşturacağı için bu kabul edilmiş cevap olmalıdır, aynı zamanda kimlik doğrulaması için de iyidir. kabul edilen geçerli cevap size erişimin reddedildiğini söyleyecektir, o zaman tablo mevcut değildir.
Rami Dabain

14

Komutu terminal / komut isteminden çalıştırmanız gerekir.

mysqldump -u <user name> -p <pwd> <original db> | mysql -u <user name> <pwd> <new db>

Örneğin: mysqldump -u root test_db1 | mysql -u root test_db2

Bu, test_db1'i test_db2'ye kopyalar ve 'root' @ 'localhost'a erişim izni verir


Bu cevabı beğendim, net. Ancak, benim için mysql şifre önce -p gerekli.
lwitzel

1
Orijinal veritabanında oluşturulan işlevleri, olayları vb. Nasıl kopyalayabiliriz? Bu yalnızca tabloları kopyalar.
Doğan Askan

12

En iyi ve kolay yol, bu komutları terminalinize girip kök kullanıcıya izinler vermektir. Benim için çalışıyor..!

:~$> mysqldump -u root -p db1 > dump.sql
:~$> mysqladmin -u root -p create db2
:~$> mysql -u root -p db2 < dump.sql

1
Soru, ihracat / ithalat yönteminin zaten bilindiğini açıkça belirtti.
lav

3
Bunu yapmanın en iyi yolu budur. Büyük veritabanları ile de çalışır, oysa borulu sürüm mysqldump -u <user> -p <pwd> db_name | mysql -u <user> -p <pwd> new_db_namebüyük veritabanları ile sorunlu olabilir.
Alex

10

Şunu kullanabilirsiniz (sözde kodda):

FOREACH tbl IN db_a:
    CREATE TABLE db_b.tbl LIKE db_a.tbl;
    INSERT INTO db_b.tbl SELECT * FROM db_a.tbl;

CREATE TABLE ... SELECT ... sözdizimini kullanmamanın nedeni, dizinleri korumaktır. Tabii ki bu sadece tabloları kopyalar. Aynı şekilde yapılabilmesine rağmen, görünümler ve prosedürler kopyalanmaz.

Bkz . TABLO OLUŞTUR .


3
Bağımlı tablolar henüz kopyalanamadığı için bu, başvuru bütünlüğünde başarısız olabilir. Belki büyük bir işlemde işe yarayabilir.
Ondrej Galbavı

4

İlk önce yinelenen veritabanını oluşturun:

CREATE DATABASE duplicateddb;

İzinlerin vb. Yerlerinde olduğundan emin olun ve:

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

2

Aşağıdaki gibi bir şey yapabilirsiniz:

mysqldump -u[username] -p[password] database_name_for_clone 
 | mysql -u[username] -p[password] new_database_name

1

Bu ifade MySQL 5.1.7'de eklendi, ancak tehlikeli olduğu bulundu ve MySQL 5.1.23'te kaldırıldı. 5.1'den önceki veritabanlarının, veritabanı adlarını veritabanı dizini adlarıyla eşleştirmek için 5.1'de uygulanan kodlamayı kullanmasını sağlamak üzere tasarlanmıştır. Ancak, bu ifadenin kullanılması veritabanı içeriğinin kaybolmasına neden olabilir, bu yüzden kaldırılmıştır. Kullanıldığı önceki sürümlerde RENAME DATABASE'i kullanmayın.

Veritabanı adlarını yeni kodlamayla yükseltme görevini yerine getirmek için ALTER DATABASE db_name yerine YÜKSELTME VERİ YÖNÜ ADI'nı kullanın: http://dev.mysql.com/doc/refman/5.1/en/alter-database.html


1

Phpmyadmin yüklediyseniz bunu yapmanın basit bir yolu :

Veritabanınıza gidin, "işlem" sekmesini seçin ve "veritabanını kopyala" bloğunu görebilirsiniz. Kullanın ve veritabanını kopyalayabilirsiniz.


1

Bahsedildiği üzere Greg'in cevap , mysqldump db_name | mysql new_db_nameolan , ücretsiz kasa ve kolay veritabanları arasında veri aktarmak için bir yol. Ancak, aynı zamanda gerçekten yavaş .

Verileri yedeklemek istiyorsanız, (bu veya diğer veritabanlarında) veri kaybetmeyi göze alamıyorsanız veya dışında tablolar kullanıyorsanız innodb, kullanmalısınız mysqldump.

Geliştirme için bir şey arıyorsanız, tüm veritabanlarınızı başka bir yerde yedekleyin ve rahatlıkla temizleyip yeniden kurun mysql her şey yanlış gittiğinde (muhtemelen manuel olarak), o zaman sizin için bir çözüm olabilir.

İyi bir alternatif bulamadım, bu yüzden bunu kendim yapmak için bir senaryo oluşturdum. Bunu ilk kez çalışmak için çok zaman harcadım ve dürüstçe şu anda değişiklikler yapmak beni biraz korkutuyor. Innodb veritabanlarının kopyalanması ve yapıştırılması amaçlanmamıştır. Küçük değişiklikler bunun muhteşem bir şekilde başarısız olmasına neden olur. Kodu tamamladığımdan beri bir sorun yaşamadım ama bu yapmayacağınız anlamına gelmiyor.

Test edilen sistemler (ancak yine de başarısız olabilir):

  • Ubuntu 16.04, varsayılan mysql, innodb, tablo başına ayrı dosyalar
  • Ubuntu 18.04, varsayılan mysql, innodb, tablo başına ayrı dosyalar

Bu ne yapar

  1. Alır sudoveritabanını klonlamak için yeterli depolama alanı ayrıcalık ve doğrular
  2. Kök MySQL ayrıcalıklarını alır
  3. Geçerli git dalının adını taşıyan yeni bir veritabanı oluşturur
  4. Klonların yapısı yeni veritabanına
  5. Innodb için kurtarma moduna geçer
  6. Yeni veritabanındaki varsayılan verileri siler
  7. MySQL'i durdurur
  8. Verileri yeni veritabanına klonlar
  9. MySQL'i başlatır
  10. İçe aktarılan verileri yeni veritabanına bağlar
  11. Innodb için kurtarma modunu kapatır
  12. MySQL'i yeniden başlatır
  13. MySQL kullanıcı veritabanına erişim sağlar
  14. Geçici dosyaları temizler

İle nasıl karşılaştırılır mysqldump

3GB'lık bir veritabanında mysqldumpve mysqlmakinemde 40-50 dakika sürecek. Bu yöntemi kullanarak, aynı işlem sadece ~ 8 dakika sürecektir.

Nasıl Kullanıyoruz

SQL değişikliklerimizi kodumuzla birlikte kaydettik ve yükseltme işlemi hem üretim hem de geliştirme üzerinde otomatikleştiriliyor; her değişiklik kümesi, hatalar varsa geri yüklemek için veritabanının yedeğini alıyor. Karşılaştığımız bir sorun, veritabanı değişiklikleriyle uzun vadeli bir proje üzerinde çalışırken ve bir veya üç hatayı düzeltmek için ortasındaki dalları değiştirmek zorunda kalmamızdı.

Geçmişte, tüm şubeler için tek bir veritabanı kullanıyorduk ve yeni veritabanı değişiklikleriyle uyumlu olmayan bir şubeye geçiş yaptığımızda veritabanını yeniden oluşturmak zorunda kalıyorduk. Ve geri döndüğümüzde, yükseltmeleri tekrar çalıştırmak zorunda kalacağız.

mysqldumpVeritabanını farklı dallar için kopyalamaya çalıştık , ancak bekleme süresi çok uzundu (40-50 dakika) ve bu arada başka bir şey yapamadık.

Bu çözüm veri tabanı klonlama süresini kısaltır (kahve ve banyo molası uzun bir öğle yemeği yerine düşünün).

Ortak görevler ve zamanları

Uyumsuz veritabanı değişikliklerine sahip dallar arasında geçiş yapmak, tek bir veritabanında 50+ dakika sürer, ancak mysqldumpbu kurulumla veya bu kodla ilk kurulum süresinden sonra hiç zaman yoktur . Bu kod sadece ~ 5 kat daha hızlı olurmysqldump .

Bazı yaygın görevler ve her bir yöntemle yaklaşık ne kadar sürecekleri aşağıda verilmiştir:

Veritabanı değişiklikleriyle özellik dalı oluşturun ve hemen birleştirin:

  • Tek veritabanı: ~ 5 dakika
  • İle klonlayın mysqldump: 50-60 dakika
  • Bu kodla klonlayın: ~ 18 dakika

Veritabanı değişiklikleriyle özellik dalı oluşturma, masterhata düzeltmesi için geçiş yapma, özellik dalında düzenleme yapma ve birleştirme:

  • Tek veritabanı: ~ 60 dakika
  • İle klonlayın mysqldump: 50-60 dakika
  • Bu kodla klonlayın: ~ 18 dakika

Veritabanı değişiklikleriyle özellik dalı oluşturun, özellik dalında masterönceden düzenleme yaparken 5 kez hata düzeltmesi yapın ve birleştirin:

  • Tek veritabanı: ~ 4 saat, 40 dakika
  • İle klonlayın mysqldump: 50-60 dakika
  • Bu kodla klonlayın: ~ 18 dakika

Kod

Yukarıdaki her şeyi okuma ve anlamadığınız sürece bunu kullanmayın.

#!/bin/bash
set -e

# This script taken from: https://stackoverflow.com/a/57528198/526741

function now {
    date "+%H:%M:%S";
}

# Leading space sets messages off from step progress.
echosuccess () {
    printf "\e[0;32m %s: %s\e[0m\n" "$(now)" "$1"
    sleep .1
}
echowarn () {
    printf "\e[0;33m %s: %s\e[0m\n" "$(now)" "$1"
    sleep .1
}
echoerror () {
    printf "\e[0;31m %s: %s\e[0m\n" "$(now)" "$1"
    sleep .1
}
echonotice () {
    printf "\e[0;94m %s: %s\e[0m\n" "$(now)" "$1"
    sleep .1
}
echoinstructions () {
    printf "\e[0;104m %s: %s\e[0m\n" "$(now)" "$1"
    sleep .1
}
echostep () {
    printf "\e[0;90mStep %s of 13:\e[0m\n" "$1"
    sleep .1
}

MYSQL_CNF_PATH='/etc/mysql/mysql.conf.d/recovery.cnf'
OLD_DB='YOUR_DATABASE_NAME'
USER='YOUR_MYSQL_USER'

# You can change NEW_DB to whatever you like
# Right now, it will append the current git branch name to the existing database name
BRANCH=`git rev-parse --abbrev-ref HEAD`
NEW_DB="${OLD_DB}__$BRANCH"

THIS_DIR=./site/upgrades
DB_CREATED=false

tmp_file () {
    printf "$THIS_DIR/$NEW_DB.%s" "$1"
}
sql_on_new_db () {
    mysql $NEW_DB --unbuffered --skip-column-names -u root -p$PASS 2>> $(tmp_file 'errors.log')
}

general_cleanup () {
    echoinstructions 'Leave this running while things are cleaned up...'

    if [ -f $(tmp_file 'errors.log') ]; then
        echowarn 'Additional warnings and errors:'
        cat $(tmp_file 'errors.log')
    fi

    for f in $THIS_DIR/$NEW_DB.*; do
        echonotice 'Deleting temporary files created for transfer...'
        rm -f $THIS_DIR/$NEW_DB.*
        break
    done

    echonotice 'Done!'
    echoinstructions "You can close this now :)"
}

error_cleanup () {
    exitcode=$?

    # Just in case script was exited while in a prompt
    echo

    if [ "$exitcode" == "0" ]; then
        echoerror "Script exited prematurely, but exit code was '0'."
    fi

    echoerror "The following command on line ${BASH_LINENO[0]} exited with code $exitcode:"
    echo "             $BASH_COMMAND"

    if [ "$DB_CREATED" = true ]; then
        echo
        echonotice "Dropping database \`$NEW_DB\` if created..."
        echo "DROP DATABASE \`$NEW_DB\`;" | sql_on_new_db || echoerror "Could not drop database \`$NEW_DB\` (see warnings)"
    fi

    general_cleanup

    exit $exitcode
}

trap error_cleanup EXIT

mysql_path () {
    printf "/var/lib/mysql/"
}
old_db_path () {
    printf "%s%s/" "$(mysql_path)" "$OLD_DB"
}
new_db_path () {
    printf "%s%s/" "$(mysql_path)" "$NEW_DB"
}
get_tables () {
    (sudo find /var/lib/mysql/$OLD_DB -name "*.frm" -printf "%f\n") | cut -d'.' -f1 | sort
}

STEP=0


authenticate () {
    printf "\e[0;104m"
    sudo ls &> /dev/null
    printf "\e[0m"
    echonotice 'Authenticated.'
}
echostep $((++STEP))
authenticate

TABLE_COUNT=`get_tables | wc -l`
SPACE_AVAIL=`df -k --output=avail $(mysql_path) | tail -n1`
SPACE_NEEDED=(`sudo du -s $(old_db_path)`)
SPACE_ERR=`echo "$SPACE_AVAIL-$SPACE_NEEDED" | bc`
SPACE_WARN=`echo "$SPACE_AVAIL-$SPACE_NEEDED*3" | bc`
if [ $SPACE_ERR -lt 0 ]; then
    echoerror 'There is not enough space to branch the database.'
    echoerror 'Please free up some space and run this command again.'
    SPACE_AVAIL_FORMATTED=`printf "%'d" $SPACE_AVAIL`
    SPACE_NEEDED_FORMATTED=`printf "%'${#SPACE_AVAIL_FORMATTED}d" $SPACE_NEEDED`
    echonotice "$SPACE_NEEDED_FORMATTED bytes needed to create database branch"
    echonotice "$SPACE_AVAIL_FORMATTED bytes currently free"
    exit 1
elif [ $SPACE_WARN -lt 0 ]; then
    echowarn 'This action will use more than 1/3 of your available space.'
    SPACE_AVAIL_FORMATTED=`printf "%'d" $SPACE_AVAIL`
    SPACE_NEEDED_FORMATTED=`printf "%'${#SPACE_AVAIL_FORMATTED}d" $SPACE_NEEDED`
    echonotice "$SPACE_NEEDED_FORMATTED bytes needed to create database branch"
    echonotice "$SPACE_AVAIL_FORMATTED bytes currently free"
    printf "\e[0;104m"
    read -p " $(now): Do you still want to branch the database? [y/n] " -n 1 -r CONFIRM
    printf "\e[0m"
    echo
    if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then
        echonotice 'Database was NOT branched'
        exit 1
    fi
fi

PASS='badpass'
connect_to_db () {
    printf "\e[0;104m %s: MySQL root password: \e[0m" "$(now)"
    read -s PASS
    PASS=${PASS:-badpass}
    echo
    echonotice "Connecting to MySQL..."
}
create_db () {
    echonotice 'Creating empty database...'
    echo "CREATE DATABASE \`$NEW_DB\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" | mysql -u root -p$PASS 2>> $(tmp_file 'errors.log')
    DB_CREATED=true
}
build_tables () {
    echonotice 'Retrieving and building database structure...'
    mysqldump $OLD_DB --skip-comments -d -u root -p$PASS 2>> $(tmp_file 'errors.log') | pv --width 80  --name " $(now)" > $(tmp_file 'dump.sql')
    pv --width 80  --name " $(now)" $(tmp_file 'dump.sql') | sql_on_new_db
}
set_debug_1 () {
    echonotice 'Switching into recovery mode for innodb...'
    printf '[mysqld]\ninnodb_file_per_table = 1\ninnodb_force_recovery = 1\n' | sudo tee $MYSQL_CNF_PATH > /dev/null
}
set_debug_0 () {
    echonotice 'Switching out of recovery mode for innodb...'
    sudo rm -f $MYSQL_CNF_PATH
}
discard_tablespace () {
    echonotice 'Unlinking default data...'
    (
        echo "USE \`$NEW_DB\`;"
        echo "SET foreign_key_checks = 0;"
        get_tables | while read -r line;
            do echo "ALTER TABLE \`$line\` DISCARD TABLESPACE; SELECT 'Table \`$line\` imported.';";
        done
        echo "SET foreign_key_checks = 1;"
    ) > $(tmp_file 'discard_tablespace.sql')
    cat $(tmp_file 'discard_tablespace.sql') | sql_on_new_db | pv --width 80 --line-mode --size $TABLE_COUNT --name " $(now)" > /dev/null
}
import_tablespace () {
    echonotice 'Linking imported data...'
    (
        echo "USE \`$NEW_DB\`;"
        echo "SET foreign_key_checks = 0;"
        get_tables | while read -r line;
            do echo "ALTER TABLE \`$line\` IMPORT TABLESPACE; SELECT 'Table \`$line\` imported.';";
        done
        echo "SET foreign_key_checks = 1;"
    ) > $(tmp_file 'import_tablespace.sql')
    cat $(tmp_file 'import_tablespace.sql') | sql_on_new_db | pv --width 80 --line-mode --size $TABLE_COUNT --name " $(now)" > /dev/null
}
stop_mysql () {
    echonotice 'Stopping MySQL...'
    sudo /etc/init.d/mysql stop >> $(tmp_file 'log')
}
start_mysql () {
    echonotice 'Starting MySQL...'
    sudo /etc/init.d/mysql start >> $(tmp_file 'log')
}
restart_mysql () {
    echonotice 'Restarting MySQL...'
    sudo /etc/init.d/mysql restart >> $(tmp_file 'log')
}
copy_data () {
    echonotice 'Copying data...'
    sudo rm -f $(new_db_path)*.ibd
    sudo rsync -ah --info=progress2 $(old_db_path) --include '*.ibd' --exclude '*' $(new_db_path)
}
give_access () {
    echonotice "Giving MySQL user \`$USER\` access to database \`$NEW_DB\`"
    echo "GRANT ALL PRIVILEGES ON \`$NEW_DB\`.* to $USER@localhost" | sql_on_new_db
}

echostep $((++STEP))
connect_to_db

EXISTING_TABLE=`echo "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$NEW_DB'" | mysql --skip-column-names -u root -p$PASS 2>> $(tmp_file 'errors.log')`
if [ "$EXISTING_TABLE" == "$NEW_DB" ]
    then
        echoerror "Database \`$NEW_DB\` already exists"
        exit 1
fi

echoinstructions "The hamsters are working. Check back in 5-10 minutes."
sleep 5

echostep $((++STEP))
create_db
echostep $((++STEP))
build_tables
echostep $((++STEP))
set_debug_1
echostep $((++STEP))
discard_tablespace
echostep $((++STEP))
stop_mysql
echostep $((++STEP))
copy_data
echostep $((++STEP))
start_mysql
echostep $((++STEP))
import_tablespace
echostep $((++STEP))
set_debug_0
echostep $((++STEP))
restart_mysql
echostep $((++STEP))
give_access

echo
echosuccess "Database \`$NEW_DB\` is ready to use."
echo

trap general_cleanup EXIT

Her şey yolunda giderse, şöyle bir şey görmelisiniz:

Örneğin veritabanı için komut dosyası çıktısının ekran görüntüsü


0

Greg'in cevabına ek olarak , new_db_namehenüz yoksa en kolay ve en hızlı yol budur :

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

0

Özgün veritabanınızda tetikleyiciler varsa, içe aktarmadan önce bir değiştirme işlemi göndererek "Tetikleyici zaten var" hatasını önleyebilirsiniz:

mysqldump -u olddbuser -p -d olddbname | sed "s/`olddbname`./`newdbname`./" | mysql -u newdbuser -p -D newdbname

-4

Bunu yapmak için bir yöntem olduğunu düşünmüyorum. PHPMyAdmin bunu yaptığında, DB'yi döker ve ardından yeni adla yeniden ekler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.