`
天梯梦
  • 浏览: 13730748 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

Linux:mysqldump 用法 数据库导出

 
阅读更多

mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。转储包含创建表和/或装载表的SQL语句。

如果你在服务器上进行备份,并且表均为MyISAM表,应考虑使用mysqlhotcopy,因为可以更快地进行备份和恢复。参见8.9节,“mysqlhotcopy:数据库备份程序”。

有3种方式来调用mysqldump:

shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] ---database DB1 [DB2 DB3...]
shell> mysqldump [options] --all--database

 
如果没有指定任何表或使用了---database或--all--database选项,则转储整个数据库。

要想获得你的版本的mysqldump支持的选项,执行mysqldump ---help。

如果运行mysqldump没有--quick或--opt选项,mysqldump在转储结果前将整个结果集装入内存。如果转储大数据库可能会出现问题。该选项默认启用,但可以用--skip-opt禁用。

如果使用最新版本的mysqldump程序生成一个转储重装到很旧版本的MySQL服务器中,不应使用--opt或-e选项。

mysqldump支持下面的选项:

---help,-?
    显示帮助消息并退出。

--add-drop--database

    在每个CREATE DATABASE语句前添加DROP DATABASE语句。

--add-drop-tables

    在每个CREATE TABLE语句前添加DROP TABLE语句。

--add-locking

    用LOCK TABLES和UNLOCK TABLES语句引用每个表转储。重载转储文件时插入得更快。参见7.2.16节,“INSERT语句的速度”。

--all--database,-A

    转储所有数据库中的所有表。与使用---database选项相同,在命令行中命名所有数据库。

--allow-keywords

    允许创建关键字列名。应在每个列名前面加上表名前缀。

---comments[={0|1}]

    如果设置为 0,禁止转储文件中的其它信息,例如程序版本、服务器版本和主机。--skip—comments与---comments=0的结果相同。 默认值为1,即包括额外信息。

--compact

    产生少量输出。该选项禁用注释并启用--skip-add-drop-tables、--no-set-names、--skip-disable-keys和--skip-add-locking选项。

--compatible=name

    产生与其它数据库系统或旧的MySQL服务器更兼容的输出。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options或者no_field_options。要使用几个值,用逗号将它们隔开。这些值与设置服务器SQL模式的相应选项有相同的含义。参见5.3.2节,“SQL服务器模式”。

    该选项不能保证同其它服务器之间的兼容性。它只启用那些目前能够使转储输出更兼容的SQL模式值。例如,--compatible=oracle 不映射Oracle类型或使用Oracle注释语法的数据类型。

--complete-insert,-c

    使用包括列名的完整的INSERT语句。

--compress,-C

    压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)。

--create-option

    在CREATE TABLE语句中包括所有MySQL表选项。

---database,-B

    转储几个数据库。通常情况,mysqldump将命令行中的第1个名字参量看作数据库名,后面的名看作表名。使用该选项,它将所有名字参量看作数据库名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name语句包含在每个新数据库前的输出中。

---debug[=debug_options],-# [debug_options]

    写调试日志。debug_options字符串通常为'd:t:o,file_name'。

--default-character-set=charset

    使用charsetas默认字符集。参见5.10.1节,“数据和排序用字符集”。如果没有指定,mysqldump使用utf8。

--delayed-insert

    使用INSERT DELAYED语句插入行。

--delete-master-logs

    在主复制服务器上,完成转储操作后删除二进制日志。该选项自动启用--master-data。

--disable-keys,-K

    对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地装载转储文件,因为在插入所有行后创建索引。该选项只适合MyISAM表。

--extended-insert,-e

    使用包括几个VALUES列表的多行INSERT语法。这样使转储文件更小,重载文件时可以加速插入。

--fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...,--行-terminated-by=...

    这些选项结合-T选项使用,与LOAD DATA INFILE的相应子句有相同的含义。参见13.2.5节,“LOAD DATA INFILE语法”。

--first-slave,-x

    不赞成使用,现在重新命名为--lock-all-tables。

--flush-logs,-F


    开始转储前刷新MySQL服务器日志文件。该选项要求RELOAD权限。请注意如果结合--all--database(或-A)选项使用该选项,根据每个转储的数据库刷新日志。例外情况是当使用--lock-all-tables或--master-data的时候:在这种情况下,日志只刷新一次,在所有 表被锁定后刷新。如果你想要同时转储和刷新日志,应使用--flush-logs连同--lock-all-tables或--master-data。

--force,-f


    在表转储过程中,即使出现SQL错误也继续。

--host=host_name,-h host_name


    从给定主机的MySQL服务器转储数据。默认主机是localhost。

--hex-blob


    使用十六进制符号转储二进制字符串列(例如,'abc' 变为0x616263)。影响到的列有BINARY、VARBINARY、BLOB。

--lock-all-tables,-x


    所有数据库中的所有表加锁。在整体转储过程中通过全局读锁定来实现。该选项自动关闭--single-transaction和--lock-tables。

--lock-tables,-l


    开始转储前锁定所有表。用READ LOCAL锁定表以允许并行插入MyISAM表。对于事务表例如InnoDB和BDB,--single-transaction是一个更好的选项,因为它不根本需要锁定表。
    请注意当转储多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证转储文件中的表在数据库之间的逻辑一致性。不同数据库表的转储状态可以完全不同。

--master-data[=value]


    该选项将二进制日志的位置和文件名写入到输出中。该选项要求有RELOAD权限,并且必须启用二进制日志。如果该选项值等于1,位置和文件名被写入CHANGE MASTER语句形式的转储输出,如果你使用该SQL转储主服务器以设置从服务器,从服务器从主服务器二进制日志的正确位置开始。如果选项值等于2,CHANGE MASTER语句被写成SQL注释。如果value被省略,这是默认动作。

--master-data


    选项启用--lock-all-tables,除非还指定--single-transaction(在这种情况下,只在刚开始转储时短时间获得全局读锁定。又见--single-transaction。在任何一种情况下,日志相关动作发生在转储时。该选项自动关闭--lock-tables。

--no-create-db,-n

    该选项禁用CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name语句,如果给出---database或--all--database选项,则包含到输出中。

--no-create-info,-t

    不写重新创建每个转储表的CREATE TABLE语句。

--no-data,-d

    不写表的任何行信息。如果你只想转储表的结构这很有用。

--opt

    该选项是速记;等同于指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以给出很快的转储操作并产生一个可以很快装入MySQL服务器的转储文件。该选项默认开启,但可以用--skip-opt禁用。要想只禁用确信用-opt启用的选项,使用--skip形式;例如,--skip-add-drop-tables或--skip-quick。

--password[=password],-p[password]

    连接服务器时使用的密码。如果你使用短选项形式(-p),不能在选项和密码之间有一个空格。如果在命令行中,忽略了--password或-p选项后面的 密码值,将提示你输入一个。

--port=port_num,-P port_num

    用于连接的TCP/IP端口号。

--protocol={TCP | SOCKET | PIPE | MEMORY}

    使用的连接协议。

--quick,-q

    该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中。

--quote-names,-Q

    用‘`’字符引用数据库、表和列名。如果服务器SQL模式包括ANSI_QUOTES选项,用‘"’字符引用名。默认启用该选项。可以用--skip-quote-names禁用,但该选项应跟在其它选项后面,例如可以启用--quote-names的--compatible。

--result-file=file,-r file

    将输出转向给定的文件。该选项应用在Windows中,因为它禁止将新行‘\n’字符转换为‘\r\n’回车、返回/新行序列。

--routines,-R

    在转储的数据库中转储存储程序(函数和程序)。使用---routines产生的输出包含CREATE PROCEDURE和CREATE FUNCTION语句以重新创建子程序。但是,这些语句不包括属性,例如子程序定义者或创建和修改时间戳。这说明当重载子程序时,对它们进行创建时定义者应设置为重载用户,时间戳等于重载时间。

    如果你需要创建的子程序使用原来的定义者和时间戳属性,不使用--routines。相反,使用一个具有mysql数据库相应权限的MySQL账户直接转储和重载mysql.proc表的内容。

    该选项在MySQL 5.1.2中添加进来。在此之前,存储程序不转储。

--set-charset

    将SET NAMES default_character_set加到输出中。该选项默认启用。要想禁用SET NAMES语句,使用--skip-set-charset。

--single-transaction

    该选项从服务器转储数据之前发出一个BEGIN SQL语句。它只适用于事务表,例如InnoDB和BDB,因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态。

    当使用该选项时,应记住只有InnoDB表能以一致的状态被转储。例如,使用该选项时任何转储的MyISAM或HEAP表仍然可以更改状态。

--single-transaction选项和--lock-tables选项是互斥的,因为LOCK TABLES会使任何挂起的事务隐含提交。

    要想转储大的表,应结合--quick使用该选项。

--socket=path,-S path

    当连接localhost(为默认主机)时使用的套接字文件。

--skip--comments

    参见---comments选项的描述。

--tab=path,-T path

    产生tab分割的数据文件。对于每个转储的表,mysqldump创建一个包含创建表的CREATE TABLE语句的tbl_name.sql文件,和一个包含其数据的tbl_name.txt文件。选项值为写入文件的目录。

    默认情况,.txt数据文件的格式是在列值和每行后面的新行之间使用tab字符。可以使用--fields-xxx和--行--xxx选项明显指定格式。

    注释:该选项只适用于mysqldump与mysqld服务器在同一台机器上运行时。你必须具有FILE权限,并且服务器必须有在你指定的目录中有写文件的许可。

--tables

    覆盖---database或-B选项。选项后面的所有参量被看作表名。

--triggers

    为每个转储的表转储触发器。该选项默认启用;用--skip-triggers禁用它。

--tz-utc

    在转储文件中加入SET TIME_ZONE='+00:00'以便TIMESTAMP列可以在具有不同时区的服务器之间转储和重载。(不使用该选项,TIMESTAMP列在具有本地时区的源服务器和目的服务器之间转储和重载)。--tz-utc也可以保护由于夏令时带来的更改。--tz-utc默认启用。要想禁用它,使用--skip-tz-utc。该选项在MySQL 5.1.2中加入。

--user=user_name,-u user_name

    连接服务器时使用的MySQL用户名。

--verbose,-v

    冗长模式。打印出程序操作的详细信息。

--version,-V

    显示版本信息并退出。

--where='where-condition', -w 'where-condition'

    只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。

    例如:

    "--where=user='jimf'"
    "-wuserid>1"
    "-wuserid<1"
    --xml,-X

    将转储输出写成XML。

    还可以使用--var_name=value选项设置下面的变量:

    max_allowed_packet

    客户端/服务器之间通信的缓存区的最大大小。最大为1GB。

    net_buffer_length

    客户端/服务器之间通信的缓存区的初始大小。当创建多行插入语句时(如同使用选项--extended-insert或--opt),mysqldump创建长度达net_buffer_length的行。如果增加该变量,还应确保在MySQL服务器中的net_buffer_length变量至少这么大。

    还可以使用--set-variable=var_name=value或-O var_name=value语法设置变量。然而,现在不赞成使用该语法。

例1

a.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名

[root@linux mysql]# mysqldump -u dbadmin -p myblog > /home/zhangy/blog/database_bak/myblog.sql

 
b.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

[root@linux mysql]# mysqldump -u dbadmin -p myblog wp_users> /home/zhangy/blog/database_bak/blog_users.sql

 
c.导出一个数据库结构 -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

[root@linux mysql]# mysqldump -u dbadmin -p -d --add-drop-table myblog > /home/zhangy/blog/database_bak/blog_struc.sql

 
d.导出数据库一个表结构

[root@linux mysql]# mysqldump -u dbadmin -p -d --add-drop-table myblog  wp_users> /home/zhangy/blog/database_bak/blog_users_struc.sql

 
例2

mysqldump导出数据库并压缩

$ mysqldump -u user -ppassword database | xz > database.sql.xz  #使用xz压缩,如果换成gzip,可以改成gz压缩,bzip2同样,注意最后的扩展名

$ unxz -c database.sql.xz | mysql -u user -ppassword database    #不需要释放出已压缩的sql脚本直接进行导入操作,如果是其他格式的压缩,需要相应的解压命令,使用解压到stdout的参数

$ pv database.sql.xz | unxz -c | mysql -u user -ppassword database  #想看到导入的进度?没问题,使用pv命令就可以,需要自己安装pv命令,ubuntu系统直接apt-get install pv,RHEL/centos需要添加rpmfusion源之后yum install pv

 

来源: http://l.51yip.com/search/mysqldump

分享到:
评论

相关推荐

    mysql数据库的导入导出

    对于这些操作,尤其需要掌握的是mysqldump命令和MySQL的Source命令的使用方法。 首先,mysqldump是MySQL用于备份数据库的命令行工具。它能够将数据库或数据库表导出为SQL语句的集合,然后将这些SQL语句写入到文件中...

    mysql mysqldump只导出表结构或只导出数据的实现方法

    将通过`mysqldump`导出的SQL文件导入到另一个数据库中,你可以使用`mysql`客户端工具,如下: ```bash mysql 数据库名 文件名 ``` 或者 ```bash source /tmp/xxx.sql ``` 这会读取`xxx.sql`文件中的SQL语句并依次...

    java调用mysql命令 导入导出数据库

    使用`mysqldump`命令可以将数据库的数据和结构导出为SQL脚本文件。例如,如果我们要导出名为`mydatabase`的数据库,可以使用以下Java代码: ```java String cmd = "mysqldump -u username -p password mydatabase...

    linux下自动备份数据库

    在Linux环境下,自动备份数据库是一项至关重要的任务,它确保了数据的安全性和业务的连续性。以下是一份详尽的步骤指南,教你如何在Linux系统中设置数据库的自动备份。 1. **选择数据库类型**:首先,你需要确定你...

    Linux全攻略--MySQL数据库配置与管理[汇编].pdf

    * 创建数据库:可以使用两种方法来创建数据库,即在客户端程序mysql环境下使用SQL语句CREATE DATABASE或在LINUX的SHELL环境下使用管理工具mysqladmin的子命令CREATE。 * 删除数据库:可以利用上面两种方法实现。 * ...

    LNMP下使用命令行导出导入MySQL数据库的方法

    如果你对Linux下的命令比较熟悉,并且自己使用的是 vps 或云服务器的话,可以使用 MySQL 相关命令来导出和导入数据库,非常方便高效! 导出数据库 导出数据库为 db_wp.sql.gz 文件: mysqldump -u数据库用户名 -p...

    Linux VPS/服务器上轻松导入、导出MySQL数据库的几种方法

    MySQL数据库导出 方法1:mysqldump命令 执行命令: /usr/local/mysql/bin/mysqldump -u 用户名 -p 数据库名 》 文件名 如果数据库用户名有密码密码,执行后会提示输入密码。如果数据库用户名没有密码,就将命令中的...

    mysql数据库单表备份和调用mysqldump.exe进行数据库备份

    MySQL提供了多种备份工具和技术,其中最常用的是`mysqldump`命令行工具,它能够将整个数据库或指定的表导出为SQL脚本文件。 #### 三、使用mysqldump进行数据库备份 `mysqldump`是一个强大的工具,用于备份MySQL...

    mysql在linux系统下导数据库操作命令

    MySQL是一种广泛使用的开源关系型数据库管理系统,在Linux环境下进行MySQL的管理和操作是很多DBA、开发人员以及系统管理员必须掌握的一项技能。本文将详细介绍如何在Linux系统下使用MySQL的各种实用操作命令,包括但...

    Linux中mysqldump命令实例详解

    在Linux环境中,MySQL数据库的管理和维护中,`mysqldump`是一个非常关键的命令行工具,它允许用户将数据库或其中的表以SQL格式导出,以便进行备份、迁移或恢复操作。`mysqldump`不仅能够创建完整的数据库备份,还...

    Linux下mysql数据库备份 恢复.docx

    在Linux环境下,使用`mysqldump`工具进行MySQL数据库备份是非常常见的做法。此工具提供了丰富的选项,可以满足不同场景下的备份需求。 ##### 1.1 备份命令格式 ```bash mysqldump [选项] 数据库名 &gt; 备份文件路径 `...

    Linux全攻略--MySQL数据库配置与管理.pdf

    1. 创建数据库:可以使用两种方法来创建数据库,即在客户端程序mysql环境下使用SQL语句CREATE DATABASE或在LINUX的SHELL环境下使用管理工具mysqladmin的子命令CREATE。 2. 删除数据库:可以使用两种方法来删除数据库...

    mysql导出数据库几种方法 概述.docx

    在Linux系统中,你可以先启动MySQL服务,然后使用以下命令导出: ```bash /etc/init.d/mysql start mysqldump dbname &gt; /path/to/mydb.sql -u root -p ``` ### 使用第三方工具如Navicat Navicate是一款流行的...

    用SELECT… INTO OUTFILE语句导出MySQL数据的教程

    总之,SELECT… INTO OUTFILE和mysqldump是MySQL中两种强大的数据导出工具,可以根据不同的需求选择合适的方法。它们提供了灵活的方式来处理和管理数据库中的数据,无论是进行备份、迁移还是数据分析,都能提供极大...

    mysqldump-win-liunx-mac--v5.7

    《MySQL数据库备份神器:mysqldump在Win、Linux及Mac平台的应用...掌握它的使用方法和技巧,对保障数据库的安全和维护至关重要。在实际工作中,结合具体的业务场景和需求,灵活运用这些功能,可以极大地提升工作效率。

    利用Crontab为Linux定时备份Mysql数据库

    另一种方法是使用`mysqldump`工具来导出所有数据库到一个SQL文件: ```bash rq=`date +%Y%m%d` mysqldump --all-databases -u root -pyour_password &gt; /mysqldata/mysql$rq.sql ``` 请确保将`your_password`替换为...

    Linux平台下MySQL数据库备份的方法分析.pdf

    本文主要探讨在Linux平台上MySQL数据库的两种备份方法:使用Linux脚本命令和通过Java编写程序。 首先,Linux脚本命令是一种简单易行的备份方式。通过执行`mysqldump`命令,可以将MySQL数据库的数据导出为SQL格式的...

    linux服务器如何每天定时的备份mysql

    在脚本中,我们将使用`mysqldump`命令来导出MySQL数据库,并通过`gzip`进行压缩。此外,还需要使用`find`命令来查找并删除旧的备份文件。具体脚本内容如下所示: ```bash #!/bin/bash backupdir=/mysql_backup ...

    mysql 导入导出 sql文件

    使用`mysqldump`命令导出整个数据库 ```shell mysqldump -u 用户名 -p 数据库名 &gt; 导出的文件名 ``` 例如,导出名为`test`的数据库: ```shell mysqldump -u root -p test &gt; c:\a.sql ``` - `-u`: 指定MySQL...

    MySql和Oracle数据库本地或远程备份导出和导入(JAVA版)工具类.rar

    例如,在Linux系统中,可能需要指定为 `/usr/bin/mysqldump`。 - 工具类可能通过执行`Runtime.getRuntime().exec()`方法来调用`mysqldump`命令,传递相应的参数,如数据库名、用户名、密码、要备份的表等,生成SQL...

Global site tag (gtag.js) - Google Analytics