Ответ 1
Сначала создайте дублируемую базу данных:
CREATE DATABASE duplicateddb;
Убедитесь, что пользователь и разрешения все на месте и:
mysqldump -u admin -p originaldb | mysql -u backup -pPassword duplicateddb;
Возможно ли дублировать всю базу данных MySQL на сервере Linux?
Я знаю, что могу использовать экспорт и импорт, но исходная база данных составляет > 25 МБ, поэтому не идеальна.
Возможно ли использование mysqldump или путем прямого дублирования файлов базы данных?
Сначала создайте дублируемую базу данных:
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 в системе с данными и используйте pipe, чтобы предоставить этот файл mysqldump в качестве входа в новую систему. Новая система может быть подключена с помощью команды ssh.
mysqldump -u user -p'password' db-name | ssh [email protected]_far_place.com mysql -u user -p'password' db-name
нет пробела между -p [пароль]
Вот файл bat bat, который я написал, который сочетает предложения Vincent и Pauls. Он запрашивает у пользователя имена источников и получателей.
Просто измените переменные вверху, чтобы установить правильные пути к портам исполняемых файлов/базы данных.
:: 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
Это выглядит для меня лучшим способом. Если вы заархивировали "dump.sql", вы можете хранить его в виде сжатой резервной копии. Здорово! Для базы данных объемом 1 ГБ с таблицами Innodb, около минуты для создания "dump.sql" и около трех минут для выгрузки данных в новую базу данных db2.
Прямое копирование дырочного каталога db (mysql/data/db1) у меня не сработало, наверное, из-за таблиц InnoDB.
Когда-то в MySQL вы могли просто скопировать все файлы таблиц в другой каталог в дереве MySQL
mysql cli - создать базу данных db2
Linux Cli - CP DB1 DB2