重复整个MySQL数据库
可以在Linux服务器上复制整个MySQL数据库吗?
我知道我可以使用导出和导入,但原始数据库是> 25MB,所以这并不理想。
有可能使用mysqldump或直接复制数据库文件?
首先创build重复的数据库:
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
在具有数据的系统中创build一个mysqldump文件,并使用pipe将这个mysqldump文件作为新系统的input。 新系统可以使用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的build议。 它会提示用户input源和目标名称。
只需修改顶部的variables,设置适当的path到您的可执行文件/数据库端口。
:: 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数据库时才使用此解决方法。
如果在备份期间locking表,并且可能在数据库导入过程中暂停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