重复整个MySQL数据库

时间:2009-12-11 13:08:13

标签: mysql database linux

在Linux服务器上复制整个MySQL数据库是否可行?

我知道我可以使用导出和导入,但原始数据库大于25MB,因此不太理想。

是否可以使用mysqldump或直接复制数据库文件?

10 个答案:

答案 0 :(得分:165)

首先创建重复数据库:

CREATE DATABASE duplicateddb;

确保用户和权限全部到位并且:

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

答案 1 :(得分:16)

到远程服务器

mysqldump mydbname | ssh host2 "mysql mydbcopy"

到本地服务器

mysqldump mydbname | mysql mydbcopy

答案 2 :(得分:5)

我有时会做一个mysqldump并将输出传递给另一个mysql命令,以将其导入另一个数据库。

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

答案 3 :(得分:3)

在系统中创建一个mysqldump文件,该文件具有数据并使用管道将此mysqldump文件作为新系统的输入。可以使用ssh命令连接新系统。

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

-p [密码]

之间没有空格

答案 4 :(得分:1)

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

答案 5 :(得分:1)

这对InnoDB无效。 仅在尝试复制MyISAM数据库时才使用此解决方法。

如果在备份期间锁定表,并且可能在数据库导入期间暂停MySQL是可以接受的, mysqlhotcopy 可能会更快。

E.g。

备份

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

恢复:

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

mysqlhotcopy 也可以通过SSH(scp)传输文件,并且可能直接传输到重复的数据库目录中。

E.g。

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

答案 6 :(得分:1)

制作数据库副本

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

答案 7 :(得分:0)

这对我来说是命令提示符,来自OUTSIDE 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

这是我最好的方式。如果压缩&#34; dump.sql&#34;您可以将其作为压缩备份存储。凉!对于带有Innodb表的1GB数据库,大约需要一分钟来创建&#34; dump.sql&#34;,以及大约三分钟将数据转储到新的DB db2中。

直接复制漏洞db目录(mysql / data / db1)对我来说没有用,我猜是因为InnoDB表。

答案 8 :(得分:0)

对我来说,以下代码行起到了作用

mysqldump --quote-names -q -u username1 --password='password1' originalDB | mysql -u username2 --password='password2' duplicateDB

答案 9 :(得分:-2)

曾经有一段时间在MySQL中,您可以将所有表文件复制到mysql树中的另一个目录

mysql cli-创建数据库db2

linux cli-cp db1 db2