如何复制MySQL数据库+包括存储过程(例程)

时间:2014-03-17 17:14:03

标签: mysql mysqldump

如果我想将复制/备份数据库放到同一台服务器上,我试试:

mysqldump -u root -pfirdi --opt fdev | mysql -u root -pfirdi fdev2

但不包括存储过程。

如果我试图跑:

mysqldump -u root -pfirdi -R --opt fdev | mysql -u root -pfirdi fdev2

(我在行中添加选项'-R'),它仍然不能(挂起)。

有人可以帮助我吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我经常使用这样的东西:

mysqldump ... -v -R yourDatabase | mysql ...

如果数据库太大,您可能需要先将其转储到文件中,然后将其加载到服务器中:

mysqldump ... > sqlFile.sql
mysql ... < sqlFile.sql

在Linux中,这样的事情可能有用:

mysqldump ... > sqlFile.sql && mysql ... < sqlFile.sql && rm sqlFile.sql

这将:

  1. 将数据库转储到sqlFile.sql
  2. sqlFile.sql加载到新数据库(仅当转储成功时)
  3. 删除sqlFile.sql(仅当加载操作成功时)。
  4. 如果其中任何步骤失败,说明将停止。

    mysqldump 的一些有用选项:

    • --delayed-insert:使用insert delayed代替正常插入。
    • --disable-keys:在alter table ... disable keysalter table ... enable keys之间插入每个表格的插入说明。这可以提高插入速度
    • -v:输出mysqldump正在对标准输出执行的操作。如果要查找挂起转储的表,这非常有用。
    • -R:还导出存储过程和函数。
    • -d:只转储数据结构......如果你想创建一个数据库&#34;模板&#34;它是很有用的。使用-R-d一起使用例程创建一个空的数据库转储(无数据)。

    如果您在导出例程时遇到问题,可以尝试这样的事情:

    1. 创建一个&#34;无数据&#34;转储您的数据库:mysql ... -d -R&gt; emptyDbDump.sql`
    2. 使用文本编辑器编辑emptyDbDump.sql文件以删除所有表和视图定义(仅保留存储的函数和过程定义)。
    3. 将此新emptyDbDump.sql文件加载到新数据库。
    4. 请查看reference manual以获取更多信息。

      希望这有帮助