mysql怎么导出数据库给别人mysqldump命令导⼊导出数据库⽅法与实例汇总mysqldump命令的⽤法
1、导出所有库
系统命令⾏
mysqldump -uusername -ppassword --all-databases > all.sql
2、导⼊所有库
mysql命令⾏
mysql>source all.sql;
3、导出某些库
系统命令⾏
mysqldump -uusername -ppassword --databases db1 db2 > db1db2.sql
4、导⼊某些库
mysql命令⾏
mysql>source db1db2.sql;
5、导⼊某个库
系统命令⾏
mysql -uusername -ppassword db1 < db1.sql;
或mysql命令⾏
mysql>source db1.sql;
6、导出某些数据表
系统命令⾏
mysqldump -uusername -ppassword db1 table1 table2 > tb1tb2.sql
7、导⼊某些数据表
系统命令⾏
mysql -uusername -ppassword db1 < tb1tb2.sql
或mysql命令⾏
mysql>
user db1;
source tb1tb2.sql;
8、mysqldump字符集设置
mysqldump -uusername -ppassword --default-character-set=gb2312 db1 table1 > tb1.sql
mysqldump客户端可⽤来转储数据库或搜集数据库进⾏备份或将数据转移到另⼀个sql服务器(不⼀定是⼀个mysql服务器)。转储包含创建表和/或装载表的sql语句。
如果在服务器上进⾏备份,并且表均为myisam表,应考虑使⽤mysqlhotcopy,因为可以更快地进⾏备份和恢复。
有3种⽅式来调⽤mysqldump:
shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] ---database db1 []
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语句引⽤每个表转储。重载转储⽂件时插⼊得更快。
--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模式的相应选项有相同的含义。
该选项不能保证同其它服务器之间的兼容性。它只启⽤那些⽬前能够使转储输出更兼容的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默认字符集。如果没有指定,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的相应⼦句有相同的含义。
--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⽂件,和⼀个包含其数据的⽂件。选项值为写⼊⽂件的⽬录。
默认情况,.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语法设置变量。然⽽,现在不赞成使⽤该语法。
mysqldump最常⽤于备份⼀个整个的数据库:
shell> mysqldump --opt db_name > backup-file.sql
可以这样将转储⽂件读回到服务器:
shell> mysql db_name < backup-file.sql
或者为:
shell> mysql -e "source /path-to--backup/backup-file.sql" db_name
mysqldump也可⽤于从⼀个mysql服务器向另⼀个服务器复制数据时装载数据库:
shell> mysqldump --opt db_name | mysql --host=remote_host -c db_name
可以⽤⼀个命令转储⼏个数据库:
shell> mysqldump ---database db_name1 [db_name2 ...] > my_databases.sql
如果想要转储所有数据库,使⽤--all--database选项:
shell> mysqldump --all-databases > all_databases.sql
如果表保存在innodb存储引擎中,mysqldump提供了⼀种联机备份的途径(参见下⾯的命令)。该备份只需要在开始转储时对所有表进⾏全局读锁定(使⽤flush tables with read lock)。获得锁定后,读取⼆进制⽇志的相应内容并将锁释放。因此如果并且只有当发出时正执⾏⼀个长的更新语句,mysql服务器才停⽌直到长语句结束,然后转储则释放锁。因此如果mysql服务器只接收到短("短执⾏时间")的更新语句,即使有⼤量的语句,也不会注意到锁期间。
shell> mysqldump --all-databases --single-transaction > all_databases.sql
对于点对点恢复(也称为“前滚”,当你需要恢复旧的备份并重放该备份以后的更改时),循环⼆进制⽇志或⾄少知道转储对应的⼆进制⽇志内容很有⽤:
shell> mysqldump --all-databases --master-data=2 > all_databases.sql
shell> mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql
如果表保存在innodb存储引擎中,同时使⽤--master-data和--single-transaction提供了⼀个很⽅便的⽅式来进⾏适合点对点恢复的联机备份。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。