Duplicar toda la Base de Datos MySQL


¿Es posible duplicar una base de datos MySQL completa en un servidor linux?

Sé que puedo usar exportar e importar, pero la base de datos original es >25MB, así que eso no es ideal.

¿Es posible usar mysqldump o duplicar directamente los archivos de la base de datos?

Author: Adam Dempsey, 2009-12-11

8 answers

Primero cree la base de datos duplicada:

CREATE DATABASE duplicateddb;

Asegúrese de que el usuario y los permisos están todos en su lugar y:

 mysqldump -u admin -p originaldb | mysql -u backup -pPassword duplicateddb; 
 153
Author: Vincent Ramdhanie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-21 13:21:56

Al servidor remoto

mysqldump mydbname | ssh host2 "mysql mydbcopy"

Al servidor local

mysqldump mydbname | mysql mydbcopy
 15
Author: Peter Lindqvist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-11 13:12:09

A veces hago un mysqldump y canalizo la salida a otro comando mysql para importarla a una base de datos diferente.

mysqldump --add-drop-table -u wordpress -p wordpress | mysql -u wordpress -p wordpress_backup
 5
Author: Paul Tomblin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-11 13:10:22

Cree un archivo mysqldump en el sistema que tenga los datos y use pipe para dar este archivo mysqldump como entrada al nuevo sistema. El nuevo sistema se puede conectar usando el comando ssh.

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

No hay espacio entre-p[contraseña]

 3
Author: JintoThomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-07 09:52:09

Aquí hay un archivo de Windows bat que escribí que combina Vincent y Pauls sugerencias. Solicita al usuario los nombres de origen y destino.

Simplemente modifique las variables en la parte superior para establecer las rutas adecuadas a sus ejecutables / puertos de base de datos.

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

Salida de muestra:

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
Author: blak3r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-07 02:28:38

Esto no funcionará para InnoDB. Utilice esta solución solo si está intentando copiar bases de datos MyISAM.

Si es aceptable bloquear las tablas durante la copia de seguridad y, posiblemente, pausar MySQL durante la importación de la base de datos, mysqlhotcopy puede funcionar más rápido.

Por ejemplo

Copia de seguridad:

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

Restaurar:

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

mysqlhotcopy también puede transferir archivos a través de SSH (scp), y, posiblemente, directamente a la base de datos duplicada directorio.

Por ejemplo

# mysqlhotcopy -u root -p password db_name /var/lib/mysql/duplicate_db_name
 1
Author: Pavel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-04 13:19:46

Hacer una copia de una Base de datos

# mysqldump -u root -p password db1 > dump.sql
# mysqladmin -u root -p password create db2
# mysql -u root -p password db2 < dump.sql
 1
Author: Maulik patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-19 08:53:23

Esto funcionó para mí con el símbolo del sistema, desde FUERA de mysql shell:

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

Esto me parece la mejor manera. Si comprime " volcado.sql " puede simplemente almacenarlo como una copia de seguridad comprimida. ¡Órale! Para una base de datos de 1 GB con tablas Innodb, aproximadamente un minuto para crear " volcado.sql", y unos tres minutos para volcar los datos en la nueva DB db2.

Copiar directamente el directorio hole db (mysql/data/db1) no funcionó para mí, supongo que debido a las tablas InnoDB.

 0
Author: DrOne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-18 18:31:13