重复整个MySQL数据库

可以在Linux服务器上复制整个MySQL数据库吗?

我知道我可以使用导出和导入,但原始数据库是> 25MB,所以这并不理想。

有可能使用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 user@some_far_place.com mysql -u user -p'password' db-name 

-p [密码]之间没有空格

这是我写的一个windows 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