Дублировать Всю Базу Данных MySQL


возможно ли дублировать всю базу данных MySQL на сервере linux?

Я знаю, что могу использовать экспорт и импорт, но исходная база данных >25 МБ, так что это не идеально.

возможно ли использовать mysqldump или напрямую дублировать файлы базы данных?

8 76

8 ответов:

создать дубликат базы данных:

CREATE DATABASE duplicateddb;

убедитесь, что пользователь и разрешения все на месте и:

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

на удаленный сервер

mysqldump mydbname | ssh host2 "mysql mydbcopy"

локальный сервер

mysqldump mydbname | mysql mydbcopy

Я иногда делаю mysqldump и передаю вывод в другую команду mysql, чтобы импортировать ее в другую базу данных.

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

создать файл mysqldump в системе, которая имеет данные и использовать канал, чтобы дать этот файл mysqldump в качестве входных данных для новой системы. Новая система может быть подключена с помощью команды ssh.

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

без пробела между-p[пароль]

вот файл Windows bat, который я написал, который сочетает в себе предложения Винсента и Паулса. Он запрашивает у пользователя имена источника и назначения.

просто измените переменные в верхней части, чтобы установить правильные пути к вашим исполняемым файлам / портам базы данных.

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

пример вывода:

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

Это не будет работать для InnoDB. Используйте этот обходной путь только в том случае, если вы пытаетесь скопировать базы данных MyISAM.

если блокировка таблиц во время резервного копирования и, возможно, приостановка MySQL во время импорта базы данных приемлемы,mysqlhotcopy может работать быстрее.

например.

резервное копирование:

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

восстановить:

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

mysqlhotcopy может также передавать файлы по SSH (scp), и, возможно, прямо в дубликат каталога базы данных.

например.

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

создание копии базы данных

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

это работало для меня с командной строкой, из внешней оболочки mysql:

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

Это выглядит для меня наилучшим образом. Если застегивать " дамп.sql " вы можете просто хранить его в виде сжатой резервной копии. Круто! Для базы данных 1GB с таблицами Innodb, около минуты, чтобы создать " дамп.sql", и около трех минут для сброса данных в новую БД db2.

прямое копирование каталога hole db (mysql/data / db1) не сработало для меня, я думаю, из-за таблиц InnoDB.