语法:
1. mysqldump [options] -all-databases
2. mysqldump [options] --databases database [database ...]
3. mysqldump [options] database [table]
mysqldump可以导出mysql中的数据和表结构。通常可以使用该实用工具备份数据库或将数据库从一个服务器复制到另一个服务器。你可以在处于运行状态的服务器上执行该工具。若要保持表间数据的一致性,需要给表加锁(参见 --lock-tables选项)或关闭mysqld后台。
该工具有三种语法形式。第一种语法用于备份服务器上所有的数据库。第二种语法用于备份指定数据库中所有的表。第三种语法用于备份指定数据库的指定表。
下面给出第一种语法的示例,对服务器上所有数据库进行备份(在linux的命令行下并不是mysql的命令行执行命令,使用mysql的root帐号)。
$ mysqldump --host=russell.dyerhouse.com --user=russell
--password --lock-tables --all-databases > /tmp/workrequests.sql
如果备份操作是在远程服务器上进行(例如:不是本机),则需使用--host选项指定主机的域名地址,也可以用IP地址替代域名。只有主机授予用户russell必要的权限,并且mysqldump正在主机上运行时,远程备份数据的操作才能实现。
要备份指定的数据库,可以使用mysqldump的第二种语法。在命令行输入下列内容:
$ mysqldump -u russell -p --lock-tables workrequests
> /tmp/wokrequests.sql
在此示例中,使用-u选项指定用户名。-p选项可以告知实用工具提示用户输入密码。这些短格式选项可同详细格式选项相互替换,但是详细格式选项已经渐渐成为标准,因此建议使用详细格式选项。--lock-tables选项可以令服务器锁定表,当备份操作结束后为表解锁。下一步,指定需要备份的数据库(workrequests)。最后使用重定向(大于标记)将备份结果存放到指定的文件中。
--lock-tables选项通常不是必需的,因为--opt是默认选项,它包含了对表的锁定操作。事实上,如果正在做备份操作的用户不具备LOCK TABLES权限,则运行mysqldump时会收到出错信息,这就是因为--opt对表进行了锁定。这种情况下,需要使用--skip-opt选项使用--opt失效,这样就不会对表进行锁定了。
如果你想备份指定的表而不是整个数据库,则可以使用第三种语法。语法并不复杂:只需在数据库名后指定一个或多个表名。示例:
$ mysqldump -u russell -p workrequests work_req clients
> /tmp/workreq_clients_tables.sql
mysqldump创建的备份文件是文本文件格式。文件一般包含一个CREATE TABLE语句,该语句用于创建数据库中的表。如果你想省略CREATE TABLE语句,可以为mysqldump添加 --no-create-info(也就是简写的 -t 选项) 选项,这样做就是只导出数据,示例:
$ mysqldump -u russell -p -t workrequests work_req clients
> /tmp/workreq_clients_tables.sql
如果只导出表结构,可以使用 --no-data选项(也就是简写的 -d 选项):
$ mysqldump -u russell -p -d workrequests work_req clients
> /tmp/workreq_clients_tables.sql
使用mysql客户机可以从mysqldump创建的备份文件中恢复数据。你可以在命令行输入如下内容,恢复前面语句创建的备份文件(其实只要是外部sql文件都可以这样执行):
$ mysql -u russell -p workrequests < /tmp/workrequests.sql
示例中通过小于号标记重定向stdin。这样可以令mysql客户机从指定的文件获取数据。接下来mysql客户机会按照顺序执行备份文件中的SQL语句。执行的过程中不用切换到监视器模式,可以一直保持在命令行状态下直到所有语句执行结束为止。
示例总结
导出整个数据库(表结构与数据,-u表示用户名选项,-p表示密码选项,如果是远程,还有-h表示主机):
$ mysqldump -u root -p openscanner > ~/openscanner.sql
导出整个数据库的表结构(-d选项,全称为--no-data选项,表示不导出数据):
$ mysqldump -u root -p -d openscanner > ~/openscanner.sql
导出整个数据库的数据(不导表结构,选项为-t,全称为 --no-create-info,表示不导出表结构):
$ mysqldump -u root -p -t openscanner > ~/openscanner.sql
导出某两张表:
$ mysqldump -u root -p openscanner wwos_sys_resource wwos_sys_user
> ~/openscanner.sql
导出某两张表的表结构:
$ mysqldump -u root -p -d openscanner wwos_sys_resource wwos_sys_user
> ~/openscanner.sql
导出某两张表的数据:
$ mysqldump -u root -p -t openscanner wwos_sys_resource wwos_sys_user
> ~/openscanner.sql
mysqldump的更多参数请查看文档!!!