mysql中利用mysqldump命令备份还原数据库

一、常用操作:

备份整个数据库

格式:
mysqldump -h主机名  -P端口 -u用户名 -p密码 (–database) 数据库名 > 文件名.sql
mysqldump -h{hostname} -P{port} -u{username} -p{password} {databasename} > {backupfile.sql}
例如:
 
代码如下:

 代码如下 复制代码
mysqldump -hlocalhost -P3306 -uzhuchao -p123456 db_test > backfile1.sql

备份MySQL数据库为带删除表的格式
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
格式:mysqldump -–add-drop-table -u{username} -p{password} {databasename} > {backfile.sql}
例如:
 
代码如下:

 代码如下 复制代码
mysqldump -–add-drop-table –uzhuchao -p123456 db_test > backfile2.sql

直接将MySQL数据库压缩备份
格式:mysqldump -h{hostname} -u{username} -p{password} {databasename} | gzip > {backfile.sql.gz}
例如:
 
代码如下:

 代码如下 复制代码
mysqldump –hlocalhost –uzhuchao –p123456 db_test1 | gzip > backfile3.sql.gz

备份MySQL数据库某个(些)表
格式:mysqldump -h主机名  -P端口 -u用户名 -p密码 (–tables | –quick) 数据库名 表名1 (表名2 …) > 文件名.sql (括号中的可缺省)。
mysqldump -h{hostname} (-P{port}) -u{user} -p{password} (–tables | –quick) {databasename} {table1} {table2} > {backfile.sql}
例如:
 
代码如下:

 代码如下 复制代码
mysqldump -hlocalhost -uzhuchao -p123456 db_test tbl_test > backfile4-1.sql
mysqldump -hlocalhost -P3306 -uzhuchao -p123456 db_test tbl_test > backfile4-2.sql
mysqldump -hlocalhost -P3306 -uzhuchao -p123456 --quick db_test tbl_test > backfile4-3.sql
mysqldump -hlocalhost -P3306 -uzhuchao -p123456 --tables db_test tbl_test1 tbl_test2 > backfile4-4.sql

同时备份多个MySQL数据库
格式:mysqldump -h{hostname} (-P{port}) -u{username} -p{password} –databases {databasename1} {databasename2} {databasename3} > multibackfile.sql
例如:
 
代码如下:

 代码如下 复制代码
mysqldump -hlocalhost -uzhuchao -p123456 –databases db_test1 db_test2 db_test3 > multibackfile.sql

仅仅备份数据库结构
格式:mysqldump –no-data –databases {databasename1} {databasename2} > {structurebackfile.sql}
例如:
 
代码如下:

 代码如下 复制代码
mysqldump –no-data –databases db_test1 db_test2 > structurebackfile.sql

备份服务器上所有数据库
格式:mysqldump –all-databases > allbackupfile.sql
 
========================================================================
 
还原MySQL数据库的命令
格式:mysql -h{hostname} -u{username} -p{password} {databasename} < {backfile.sql}
例如:
 
代码如下:

 代码如下 复制代码
mysql -hlocalhost -uroot -p123456 db_test4 < back_file1.sql

还原压缩的MySQL数据库
格式:gunzip < {backfile.sql.gz} | mysql –u{username} –p{password} {databasename}
例如:
 
代码如下:

 代码如下 复制代码
gunzip < backfile.sql.gz | mysql –uzhuchao –p123456 db_test5

将数据库转移到新服务器
mysqldump –u{username} –p{password} {databasename} | mysql –host=*.*.*.* –C {databasename}
 
二、其他:
1、如果端口为默认的3306时,可省略 -P {端口号} 这一项。
 
2、命令行格式中 { } 中的内容都是变量
主机名 : {hostname}
端   口:{port}    (一般默认3306,可缺省)
用户名:{user} {username} (如root)
密   码:{password}
数据库名 :{databasename}
表   名:{table}  {table1}  {table2}
文件名:{backfile.sql}

相关知识:

本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL 版本为 5.0.22。

目前 MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。

1、mysqldump

1.1 备份

mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。

现在来讲一下 mysqldump 的一些主要参数:

–compatible=name

它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。

–complete-insert,-c

导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。

–default-character-set=charset

指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。

–disable-keys

告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。

–extended-insert = true|false

默认情况下,mysqldump 开启 –complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。

–hex-blob

使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。

–lock-all-tables,-x

在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 –single-transaction 和 –lock-tables 选项。

–lock-tables

它和 –lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 –single-transaction 选项。

–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 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 –skip-opt 禁用。注意,如果运行 mysqldump 没有指定 –quick 或 –opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。

–quick,-q

该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。

–routines,-R

导出存储过程以及自定义函数。

–single-transaction

该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。

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

要想导出大表的话,应结合使用 –quick 选项。

–triggers

同时导出触发器。该选项默认启用,用 –skip-triggers 禁用它。

其他参数详情请参考手册,我通常使用以下 SQL 来备份 MyISAM 表:

 代码如下 复制代码

/usr/local/mysql/bin/mysqldump -uyejr -pyejr

–default-character-set=utf8 –opt –extended-insert=false

–triggers -R –hex-blob -x db_name > db_name.sql

使用以下 SQL 来备份 Innodb 表:

 代码如下 复制代码

/usr/local/mysql/bin/mysqldump -uyejr -pyejr

–default-character-set=utf8 –opt –extended-insert=false

–triggers -R –hex-blob –single-transaction db_name > db_name.sql

另外,如果想要实现在线备份,还可以使用 –master-data 参数来实现,如下:

 代码如下 复制代码

/usr/local/mysql/bin/mysqldump -uyejr -pyejr

–default-character-set=utf8 –opt –master-data=1

–single-transaction –flush-logs db_name > db_name.sql

它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。

1.2 还原

用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。

直接用 mysql 客户端

例如:

 代码如下 复制代码

/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql

用 SOURCE 语法

其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:

 代码如下 复制代码

SOURCE /tmp/db_name.sql;

这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件

时间: 2024-12-11 11:06:49

mysql中利用mysqldump命令备份还原数据库的相关文章

mysql 备份还原-navicat for mysql 导入导出sql文件 备份还原 数据库的原理 相关指令大概是怎样的?

问题描述 navicat for mysql 导入导出sql文件 备份还原 数据库的原理 相关指令大概是怎样的? 本地不用安装mysql也可以使用?不用配置环境变量?自己用mysqldump备份要安装mysql还有配环境,求高人指点

MySQL中的mysqldump命令使用详解

mysql|详解 MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半,另外的一般是从MySQL数据库中导出数据.有许多的原因我们需要导出数据.一个重要的原因是用于备份数据库.数据的造价常常是昂贵的,需要谨慎处理它们.经常地备份可以帮助防止宝贵数据地丢失:另外一个原因是,也许您希望导出数据来共享. 在这个信息技术不断成长的世界中,共享数据变得越来越常见. 比方说Macmillan USA维护护着一个将要出版的书籍的大型数据库.这个数据库在许多书店之间共享,这样他们就知道哪些书将会很快

unix中利用Find命令备份根文件系统

在Unix操作系统中有很多命令可以用来备份文件.但是Unix操作系统中根文件系统是一种比较特殊 的文件.通常情况下对这类文件进行备份的话,必须要卸载其他文件系统.因为根文件系统是其他文件 系统的祖宗,如果不卸载的话,会同时备份其他文件系统中的文件.但是如果先卸载其他文件系统再进 行备份的话,那么就会很麻烦.为此在find命令中提供了一个很有用的参数,可以帮助我们实现这个功 能. 一.根文件系统备份的重要性及备份的难点. 当系统发生崩溃时,虽然可以通过重新安装操作系统来恢复.但是这个工作量很大,因

SQL点滴12—SQL Server备份还原数据库中的小把戏

原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息"is formatted to support  1 media families, but 2 media families are expected according to the backup device specification".如下图: 解决办法是首先选中击上一次备份的文件,点击Remove,去掉当前的备份文件,然后再点击OK备份.这样才能正确的备份.也

mysql中的load命令使用方法_Mysql

使用mysql 中的load 命令,讲txt 文件中的内容加载到数据库表中,例如,创建table,名称是user,一个字段username:当前有db.txt文件,内容是以空格分开的用户名,例如:xiaowang xiaoliu zhangsan 将该文件加载到数据表user中,使用命令即可: 复制代码 代码如下: load data local infile "/home/beaver/db" into table user lines terminated by ' ';  作者

使用mysqldump工具备份还原Mysql数据库

我们在网站数据维护中经常会遇到备份数据库,还原数据库的情况,我们一般用一下两种方式来处理: 1.使用into outfile 和 load data infile导入导出备份数据 这种方法的好处是,导出的数据可以自己规定格式,并且导出的是纯数据,不存在建表信息,你可以直接导入另外一个同数据库的不同表中,相对于mysqldump比较灵活机动. 我们来看下面的例子: (1)下面的mysql命令是把select的mytable表中的数据导出到/home/db_bak2012文件. select * f

MySQL 备份还原数据库批处理_Mysql

1.备份数据库(单个表备份) bk_table.bat 复制代码 代码如下: mysqldump -h127.0.0.1 -P3306 -uroot -proot --default-character-set=gbk -t database1 table1>table1.sql mysqldump -h127.0.0.1 -P3306 -uroot -proot --default-character-set=gbk -t database2 table2>table2.sql mysqld

备份-还原数据库时,当前命令发生了严重错误 应放弃任何可能产生的结果.错误:211

问题描述 还原数据库时,当前命令发生了严重错误 应放弃任何可能产生的结果.错误:211 各位帮忙看看,是不是数据库中有异常数据,备份出来之后没办法还原了? 解决方案 http://blog.csdn.net/attilax/article/details/41521285

mysqldump命令导入导出数据库方法与实例汇总_Mysql

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.s