将MySQL数据库从一台电脑复制到另一台电脑

25

我想将我的 MySQL 数据库从我的电脑复制到另一台电脑。我该怎么做?


1
使用导出数据库命令并将其导入。 - Anand Somasekhar
@homen,请看一下我针对问题的清晰参考资料... - jmail
如果您得到了答案,应该点击选中按钮并像以下链接一样给予赞扬 http://meta.stackexchange.com/a/5235/255001 - jmail
7个回答

27

如何使用mysqldump从一个电脑复制MySQL数据库到另一个电脑/备份数据库

  1. 我们可以使用mysqldump命令将MySQL数据库从一个计算机传输到另一个计算机。

  2. 我们需要创建数据库的转储文件才能将数据库从一个计算机转移到另一个计算机。

  3. MySQL数据库不是可移植的数据库,即我们不能通过复制和粘贴将其从一台计算机转移到另一台计算机中。

  4. 我们可以使用以下方法来传输数据库。

  5. 从数据库创建转储文件/备份MySQL数据库:

  6. 打开命令提示符。

  7. 执行以下命令更改目录

>c:  “press enter”

>cd  program files/MySQL/MySQL Server 5.1/ bin “press enter”

>mysqldump -u root  -p database_name > database_name.sql  “press enter”

  Enter password: password of MySQL

复制SQL文件,并将其粘贴到您想要传输数据库的电脑上。

      2. Dumping sql file into database:-

      - Open MySQL  command line client command prompt.

      - Execute following command to create database.

创建数据库database_name;

按“Enter”键。必须将“database_name”替换为您实际想要创建的数据库名称。

将SQL文件复制到“c:/program files/MySQL/MySQL Server 5.1/bin”位置。

      *- Now open command prompt and execute following commands.*


        >C: “press enter”

        >cd program files/MySQL/MySQL Server5.1/bin “press enter”

        >mysql –u root –p database_name < database_name.sql “press enter”

        Your database is created on PC.

        Now in MySQL command prompt check your database.  

另外一个:1

最好且简单的方法是使用数据库工具(SQLyog)

http://www.webyog.com/product/downloads

使用此工具,您可以连接2个数据库服务器,并将A服务器上的一个数据库复制到B服务器上。

更多信息,请参见:

http://faq.webyog.com/content/12/32/en/mysql-5-objects-are-greyed-out-in-copy-db-to-other-host-dialogue.html

请看这里

另外一个:2

对于名为“lbry”的数据库,请尝试以下操作:

mysqldump -u root -p lbry > dump-lbry.sql

在想要复制数据库内容的计算机上创建相同名称的数据库(例如,此处为“lbry”)

然后进行导入:

mysql -u root -p lbry < dump-lbry.sql

@homen,请参考此链接:https://dev.mysql.com/doc/refman/5.5/en/access-denied.html - jmail
1
现在我遇到了这个错误:“mysqldump: Got error: 1030: Got error 1 from storage engine when using LOCK TABLES”。 - Homen
1
@homen,这个将会解决你的问题,请看这个网站:(http://mindit.co.kr/20?viewbar) - jmail
1
你每句话都要以“我们可以”开头吗?这真是一个很让人烦恼的写作习惯... - idmean
我稍微整理了一下 - 在源代码中,之前的第一行显然是多余的,我还修正了一些拼写错误。并没有感觉需要太大改动,但这些错别字一直在困扰着我。(假设编辑被批准了) - Tim S.
显示剩余4条评论

18

您可以使用MySQL WorkBench按照以下步骤进行操作:

  1. 安装MySQL Workbench
  2. 连接到现有数据库
  3. 进入导航器->管理->数据导出。 (这将在一个单独的文件夹中转储表的查询,Workbench使用相同的文件夹进行导入)
  4. 在目标PC上创建数据库。
  5. 连接到目标数据库(DB中不包含任何表)
  6. 进入导航器->管理->数据导入/还原。 (这将使用转储文件夹并在目标数据库中创建表)。

希望这能帮到您。


旧答案,但今天帮了我!谢谢 :) - Nsevens
运行得非常顺畅。 - yitz
MySQL Workbench 8.0 中已经没有 Navigator 选项,现在它在 Server > Data Export 下面。 - Yash

4
唯一安全的将数据库从一个机器复制到另一个机器的方法是先使数据库进入静默状态(确保没有客户端正在修改它),然后使用mysqldump命令创建模式和表内容的文本表示形式。然后将该文本文件复制到另一台机器上,并通过将其指定为mysql命令的输入来读取它。
试图复制实际的mysql数据目录只会引发麻烦,因为它们依赖于运行mysql的机器架构,很可能还与mysql的版本和所使用的任何存储引擎有关。

3
  1. 本教程在Ubuntu上编写,但也适用于Redhat、Centos、Fedora和Suse。
  2. 我们可以导出数据库并将其传输到另一台服务器,然后进行恢复操作。
  3. 此教程将演示如何处理修改的凭据以及移动debian.cnf文件等问题。执行导出和恢复操作会使服务器变慢。

4.1 在源服务器上运行mysqldump命令:这将为目标服务器构建一个MySQL可执行脚本。在此期间,MySQL服务器将排队处理查询。

4.2 将导出的文件复制到目标服务器。

4.3 清空目标服务器。

4.4 在目标服务器上执行导出文件。

A服务器(源服务器) B服务器(目标服务器)

情况1:A服务器

root@source$ mysql --defaults-file=/etc/mysql/debain.cnf
mysql>show databases;
mysql>use testdb;(The database to dump)
mysql>show tables;(To Check the tables)
mysql>^c

--现在倾倒数据库

root@surce$ mysql --defaults-file=/etc/mysql/debain.cnf --all-databses | gzip -c > dump.sql.gz

root@surce$ gzip -dc dump.sql.gz

要复制文件,需要在源服务器上创建一个ssh密钥。

root@surce$ ssh-keygen
root@surce$ cat /root/.ssh/id_rsa.pub
select and copy all the ssh key string

root@surce$ scp dump.sql.gz ubuntu@destination:

前往目标服务器

最后一步是复制debain.cnf文件的内容

root@surce$ cat /etc/mysql/debain.cnf
[client]
host        = localhost
user        = debain-sys-maint
password    = mysecret
socket      = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host        = localhost
user        = debain-sys-maint
password    = mysecret
socket      = /var/run/mysqld/mysqld.sock
basedir     = /usr

选择全部并将此文件复制到目标服务器。

注意:在您的机器上,套接字路径可能是不同的。使用 locate 命令来查找精确路径。

情况 2. 服务器 B 删除所有数据库。

root@destination$ echo show databases | mysql --defaults-file=/etc/mysql/debian.cnf --skip-column-names | awk '{print "drop database "$1";"}'

如果此命令未删除数据库,请使用-force选项。

root@destination$ echo show databases | mysql --defaults-file=/etc/mysql/debian.cnf --skip-column-names | awk '{print "drop database "$1";"}' | mysql --defaults-file=/etc/mysql/debian.cnf -f

在目标服务器上复制ssh密钥

root@destination$ echo "将密钥粘贴至此" >> /home/ubuntu/.ssh/authorized_keys

回到源服务器,使用scp命令将备份文件移动至目标服务器

(注入文件)

root@destination$ gzip -dc /home/ubuntu/dump.sql.gz | mysql --defaults-file=/etc/mysql/debain.cnf

root@destination$ > /etc/mysql/debain.cnf
root@destination$ nano /etc/mysql/debain.cnf

将源服务器上 .cnf 文件的内容粘贴到此处并保存文件 :x
root@destination$ mysql --defaults-file= /etc/mysql/debain.cnf

如果您看到了 MySQL 提示符,那么一切应该都正常工作。
mysql>

0

我只是总结了jmail的答案:

将计算机1的数据库转换为SQL文件:
   mysqldump --user <用户名> --password <数据库> > <输出文件> 例如 mysqldump --user root --password movie > movie.sql

将SQL文件转换为计算机2的数据库:
   mysql --user <用户名> --password <数据库> < <输出文件> 例如 mysql --user root --password movie < movie.sql


0

mysqldump --databases dbname -hsource_server_ip -usource_server_userName -psource_server_passcode | mysql -udest_server_user_name -pdest_server_user_passcode &

有三种常见的调用mysqldump的方式:

shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases

如果您在db_name后没有命名任何表,或者使用--databases或--all-databases选项,则会转储整个数据库。

默认情况下,mysqldump不会转储INFORMATION_SCHEMA数据库。如果您在命令行上明确命名它,则MariaDB会转储INFORMATION_SCHEMA,尽管目前您还必须使用--skip-lock-tables选项。

要查看您的版本的mysqldump支持的选项列表,请执行mysqldump --help。


这可能可以解决问题,但您能否更新一下并加上一些解释,以便那些寻求解决方案的人能更好地理解。 - Luke

0

我能够按照@jmail的回答,通过此帖子恢复与我共享的备份,但我认为我可以为将来的用户提供更简洁的回答。我收到了一个扩展名为.sql的转储文件,而不是我预期的.dump扩展名。

我尝试将它放在我的项目文件夹中并进行还原,但出现了错误22,指的是访问权限。我将它移动到“c:/program files/MySQL/MySQL Server 5.1/bin”,然后通过以下方式运行:

1)在命令提示符中启动MySQL。

2)创建我想要还原到的新数据库

3)切换到该数据库

USE new_DB;

4) 运行

source c:/program files/MySQL/MySQL Server 5.1/bin/backup.sql

我不确定备份文件 backup.sql 是如何创建的,但这个方法可在我的 Windows 10 系统中用于还原。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接