Pertanyaan Gandakan Seluruh Database MySQL


Apakah mungkin untuk menduplikasi seluruh database MySQL di server linux?

Saya tahu saya bisa menggunakan ekspor dan impor tetapi database aslinya adalah> 25MB jadi itu tidak ideal.

Apakah mungkin menggunakan mysqldump atau dengan langsung menduplikasi file database?


76
2017-12-11 13:08


asal


Jawaban:


Pertama buat duplikat basis data:

CREATE DATABASE duplicateddb;

Pastikan pengguna dan perizinan semuanya di tempat dan:

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

151
2017-12-11 13:13



Ke server jarak jauh

mysqldump mydbname | ssh host2 "mysql mydbcopy"

Ke server lokal

mysqldump mydbname | mysql mydbcopy

15
2017-12-11 13:12



Saya kadang-kadang melakukan mysqldump dan menyalurkan output ke perintah mysql lain untuk mengimpornya ke database yang berbeda.

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

5
2017-12-11 13:10



Buat file mysqldump di sistem yang memiliki data dan gunakan pipa untuk memberikan file mysqldump ini sebagai masukan ke sistem baru. Sistem baru dapat dihubungkan menggunakan perintah ssh.

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

tidak ada spasi di antara -p [kata sandi]


3
2018-05-06 13:25



Ini adalah file windows bat yang saya tulis yang menggabungkan saran Vincent dan Paul. Ini mendorong pengguna untuk sumber dan nama tujuan.

Ubah saja variabel di bagian atas untuk mengatur jalur yang tepat ke port executable / database Anda.

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

Output sampel:

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



Ini tidak akan berfungsi untuk InnoDB. Gunakan solusi ini hanya jika Anda mencoba menyalin basis data MyISAM.

Jika mengunci tabel selama pencadangan, dan, mungkin, menghentikan sementara MySQL selama impor basis data dapat diterima, mysqlhotcopy dapat bekerja lebih cepat.

Misalnya.

Cadangkan:

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

Mengembalikan:

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

mysqlhotcopy juga dapat mentransfer file melalui SSH (scp), dan, mungkin, langsung ke direktori database duplikat.

Misalnya.

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

1
2018-01-22 20:52



Membuat Salinan Basis Data

# 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



Ini bekerja untuk saya dengan command prompt, dari shell mysql OUTSIDE:

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

Ini mencari saya cara terbaik. Jika zipping "dump.sql" Anda dapat menyimpannya secara simpel sebagai cadangan terkompresi. Keren! Untuk database 1GB dengan tabel Innodb, sekitar satu menit untuk membuat "dump.sql", dan sekitar tiga menit untuk membuang data ke DB db2 baru.

Lurus menyalin direktori lubang db (mysql / data / db1) tidak bekerja untuk saya, saya kira karena tabel InnoDB.


0
2018-03-18 18:31