Soru Tüm MySQL Veritabanını Kopyala


Tüm MySQL veritabanını linux sunucusunda çoğaltmak mümkün mü?

Ben ihracat ve ithalat kullanabilirsiniz biliyorum ama orijinal veritabanı> 25MB yani bu ideal değil.

Mysqldump kullanarak veya veritabanı dosyalarını doğrudan kopyalayarak mümkün mü?


76
2017-12-11 13:08


Menşei




Cevaplar:


İlk olarak yinelenen veritabanını oluşturun:

CREATE DATABASE duplicateddb;

Kullanıcı ve izinlerin hepsinin yerinde olduğundan emin olun:

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

151
2017-12-11 13:13



2. komut hattınızın 2. bölümünde "-p" ile "şifre" arasında boşluk olması gerektiğini düşünmüyorum
hayır yer olmamalı! Cevap böyle doğrudur. Mysql man sayfası şunları söyledi: --password [= password], -p [password] Sunucuya bağlanırken kullanılacak şifre. Kısa seçenek formunu (-p) kullanırsanız, seçenek ve parola arasında boşluk olamaz. Komut satırında -password veya -p seçeneğini izleyerek şifre değerini çıkarırsanız, mysql bir tane ister. Komut satırında bir parola belirtmek, güvensiz kabul edilmelidir. Bkz. Bölüm 6.1.2.1, "Son Kullanıcı Kılavuzu P ... - nils petersohn
Mysqldump'un varsayılan olarak tetikleyicileri yedeklediği ancak saklı yordamları desteklemediğini unutmayın. --routines Bu dava için bir seçenek olarak. - LinuxDevOps
Bunu böyle yapıyorsanız ve bu kullanıcının MySQL şifresinin bash geçmişinde kullanılabilir olmasını istemiyorsanız, ~/.bash_history dosyayı çalıştırdıktan sonra. Ya da ilk komutun sonucunu geçici bir dosyaya verebilir ve ardından aşağıdakileri çalıştırabilirsiniz (şifre ile size bilgi verecektir). mysql -p -u admin duplicatedb < temporaryfile.sql. - Mike
Bu cevap kesinlikle işe yarıyor, ancak soruları "Ben ihracat ve ithalat kullanabileceğimi biliyorum ama orijinal veritabanı> 25MB yani bu ideal değil" ve bu cevabın temel olarak ihracat ve ithalat olduğunu gösteriyor. - el.pescado


Uzak sunucuya

mysqldump mydbname | ssh host2 "mysql mydbcopy"

Yerel sunucuya

mysqldump mydbname | mysql mydbcopy

15
2017-12-11 13:12



ERROR 1064 (42000): SQL sözdiziminde bir hata var; yerel sunucuda komut kullanırken hata gösteriliyor, lütfen yardım edin - amit_game
stackoverflow.com/questions/23446377/... - Peter Lindqvist


Bazen bir mysqldump yaparım ve farklı bir veritabanına almak için çıktıyı başka bir mysql komutuna aktarıyorum.

mysqldump --add-drop-table -u wordpress -p wordpress | mysql -u wordpress -p wordpress_backup

5
2017-12-11 13:10



Bunu kullandığımda, dest veritabanının bulunmadığı konusunda bir hata alıyorum. Yani, bir CREATE DATABASE hattına da ihtiyacınız var. - blak3r
çok kullanışlı, teşekkürler! - Sumit Bisht


Veriyi içeren sistemde bir mysqldump dosyası oluşturun ve bu mysqldump dosyasını yeni sisteme bir girdi olarak vermek için boru kullanın. Yeni sistem ssh komutu kullanılarak bağlanabilir.

mysqldump -u user -p'password' db-name | ssh user@some_far_place.com mysql -u user -p'password' db-name

-p [şifre] arasında boşluk yok


3
2018-05-06 13:25



Bunun nasıl çalıştığına dair bir açıklama ekleyebilir misiniz? borunun kullanımı? - kalyfe


Vincent ve Pauls önerilerini birleştiren yazdığım bir windows bat dosyası. Kullanıcıyı kaynak ve hedef adları için yönlendirir.

Sadece çalıştırılabilir / veritabanı bağlantı noktalarınıza uygun yolları ayarlamak için üstteki değişkenleri değiştirin.

:: 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

Örnek çıkış:

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!!!

1
2018-03-07 02:28





Bu InnoDB için işe yaramaz. Bu geçici çözümü yalnızca MyISAM veritabanlarını kopyalamaya çalışıyorsanız kullanın.

Yedekleme sırasında tabloları kilitlerseniz ve muhtemelen veritabanı alımı sırasında MySQL'i duraklatmak kabul edilebilirse, mysqlhotcopy daha hızlı çalışabilir.

Örneğin.

Yedekleme:

# mysqlhotcopy -u root -p password db_name /path/to/backup/directory

Restore:

cp /path/to/backup/directory/* /var/lib/mysql/db_name

mysqlhotcopy Ayrıca dosyaları SSH (scp) üzerinden ve muhtemelen çift veritabanı dizinine aktarabilir.

Örneğin.

# mysqlhotcopy -u root -p password db_name /var/lib/mysql/duplicate_db_name

1
2018-01-22 20:52





Veritabanının bir kopyasını oluşturma

# mysqldump -u root -p password db1 > dump.sql
# mysqladmin -u root -p password create db2
# mysql -u root -p password db2 < dump.sql

1
2017-12-19 08:53





Bu, OUTSIDE mysql kabuğundan komut istemi ile benim için çalıştı:

# mysqldump -u root -p password db1 > dump.sql
# mysqladmin -u root -p password create db2
# mysql -u root -p password db2 < dump.sql

Bu bana en iyi yolu gösteriyor. "Dump.sql" yi sıkıştırırsanız, bunu sıkıştırılmış bir yedek olarak saklayabilirsiniz. Güzel! Innodb tabloları içeren bir 1GB veritabanı için "dump.sql" oluşturmak için yaklaşık bir dakika ve verileri yeni DB db2'ye dökmek için yaklaşık üç dakika.

Düz db dizinini kopyalama (mysql / data / db1) benim için işe yaramadı, InnoDB tabloları nedeniyle sanırım.


0
2018-03-18 18:31