使用mysqldump转储数据
本节将调查使您能够使用mysqldump解决特定问题的技术:
- 如何制作数据库副本
- 如何将数据库从一台服务器复制到另一台服务器
- 如何转储的程序(存储的过程和函数,触发器和事件)
- 如何分别转储定义和数据
制作数据库副本
shell> mysqldump db1 > dump.sql shell> mysqladmincreate db2 shell> mysql db2 < dump.sql
请勿--databases
在mysqldump命令行上使用,因为这会导致USE db1
转储文件中包含该文件,该文件将覆盖mysql命令行db2
上的命名效果。
将数据库从一台服务器复制到另一台服务器
在服务器1上:
shell>mysqldump --databases db1 > dump.sql
将转储文件从服务器1复制到服务器2。
在服务器2上:
shell>mysql < dump.sql
使用--databases
与mysqldump的命令行导致转储文件,包括CREATE DATABASE
与USE
创建数据库,如果它确实存在,并使其成为默认的数据库为重新加载数据报表。
另外,您可以--databases
从mysqldump命令中省略。然后,您将需要在服务器2上创建数据库(如果需要),并在重新加载转储文件时将其指定为默认数据库。
在服务器1上:
shell>mysqldump db1 > dump.sql
在服务器2上:
shell>mysqladmin create db1 shell>mysql db1 < dump.sql
在这种情况下,您可以指定一个不同的数据库名称,因此--databases
从mysqldump命令中省略可以使您从一个数据库中转储数据并将其加载到另一个数据库中。
转储的程序
有几个选项控制mysqldump如何处理存储程序(存储过程和函数,触发器和事件):
--events
:转储事件计划程序事件--routines
:转储存储过程和函数--triggers
:表的转储触发器
--triggers
默认情况下,此选项是启用的,以便在转储表时,表将带有它们具有的任何触发器。其他选项默认情况下处于禁用状态,并且必须明确指定以转储相应的对象。要禁用的任何选项明确,利用其跳跃的形式:--skip-events
,--skip-routines
,或--skip-triggers
。
分别转储表定义和内容
该--no-dat
选项告诉mysqldump不要转储表数据,从而导致转储文件仅包含创建表的语句。相反,该--no-create-info
选项告诉mysqldump抑制CREATE
输出中的语句,以便转储文件仅包含表数据。
例如,要分别转储test
数据库的表定义和数据,请使用以下命令:
shell>mysqldump --no-dat test > dump-defs.sql shell>mysqldump --no-create-info test > dump-dat .sql
对于仅定义的转储,添加--routines
和--events
选项以还包括存储的例程和事件定义:
shell>mysqldump --no-dat --routines --events test > dump-defs.sql
使用mysqldump测试升级不兼容性
在考虑进行MySQL升级时,请谨慎选择将新版本与当前生产版本分开安装。然后,您可以从生产服务器中转储数据库和数据库对象定义,并将它们加载到新服务器中,以验证它们是否已正确处理。(这对于测试降级也很有用。)
在生产服务器上:
shell>mysqldump --all-databases --no-dat --routines --events > dump-defs.sql
在升级的服务器上:
shell>mysql < dump-defs.sql
因为转储文件不包含表数据,所以可以对其进行快速处理。这使您能够发现潜在的不兼容性,而无需等待冗长的数据加载操作。在处理转储文件时查找警告或错误。
验证定义是否正确处理后,转储数据并尝试将其加载到升级的服务器中。
在生产服务器上:
shell>mysqldump --all-databases --no-create-info > dump-dat .sql
在升级的服务器上:
shell>mysql < dump-dat .sql
现在检查表内容并运行一些测试查询。