mysqldump介绍,利用MySQL全备份(mysqldump),如何只恢复一个库或者一个表?

mysqldump介绍,利用MySQL全备份(mysqldump),如何只恢复一个库或者一个表?


mysql 按照备份恢复方式分为逻辑备份和物理备份。逻辑备份是备份 sql 语句,在恢复的时候执行备份的 sql 语句实现数据库数据的重现,物理备份就是备份数据文件了,比较形象点就是 cp 下数据文件,但真正备份的时候自然不是的 cp 这么简单。

2 种备份各有优劣,一般来说,物理备份恢复速度比较快,占用空间比较大,逻辑备份速度比较慢,占用空间比较小。

官方地址: http://dev.mysql.com/doc/refman/5.6/en/backup-and-recovery.html


1.1   mysqldump 工具

Mysqldump mysql 自带的备份工具,目录在 bin 目录下面: /usr/local/mysql/bin/mysqldump ,支持基于 innodb 的热备份。但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景。 Mysqldump 完全备份 + 二进制日志可以实现基于时间点的恢复。

 

myisam 存储引擎的表,只能使用温备份,这个时候要防止数据的写入,所以先加上读锁。这个时候也可以进入数据库手动加读锁,不过这样比较麻烦,可以在 mysqldump 工具中直接有一个加锁的选择,就是 --lock-all-tables ,例如 mysqldump --databases test--lock-all-tables--flush-logs>/tmp/backup_test_`date+%F-%H-%M`.sql

如果是备份单张表,直接在库名字 test 后面加上表名字即可。

 

对于 innodb 存储引擎表,可以热备,不必对数据库进行加锁的操作,加一个选项可以进行热备份, --single-transaction ,例如: mysqldump --databases test --single-transaction --flush-logs--master-data=2> /tmp/backup_test_`date +%F-%H-%M`.sql

   

PS :注意点,恢复的时候记得关闭二进制日志:

mysql> set sql_log_bin=0;

因为这是基于逻辑备份方式,所以执行 sql 会插入数据,会记录到二进制日志里面去,因为这事恢复,所以插入的二进制日志基本没有啥意思,可以关闭掉,缩短恢复时间。

4.mysqldump 以及 xtranbackup 的实现原理,

 

Ømysqldump 是最简单的逻辑备份方式。在备份 myisam 表的时候,如果要得到一致的数据,就需要锁表,简单而粗暴。而在备份 innodb 表的时候,加上– master-data=1 single-transaction 选项,在事务开始时刻,记录下 binlog pos 点,然后利用 mvcc 来获取一致的数据,由于是一个长事务,在写入和更新量很大的数据库上,将产生非常多的 undo ,显著影响性能,所以要慎用。

Ø 优点:简单,可针对单表备份,在全量导出表结构的时候尤其有用。

Ø 缺点:简单粗暴,单线程,备份慢而且恢复慢,跨 IDC 有可能遇到时区问题

Øxtrabackup 它实际上是物理备份 + 逻辑备份的组合。在备份 innodb 表的时候,它拷贝 ibd 文件,并一刻不停的监视 redo log 的变化, append 到自己的事务日志文件。在拷贝 ibd 文件过程中, ibd 文件本身可能被写”花”,这都不是问题,因为在拷贝完成后的第一个 prepare 阶段, Xtrabackup 采用类似于 innodb 崩溃恢复的方法,把数据文件恢复到与日志文件一致的状态,并把未提交的事务回滚。如果同时需要备份 myisam 表以及 innodb 表结构等文件,那么就需要用 flush tables with lock 来获得全局锁,开始拷贝这些不再变化的文件,同时获得 binlog 位置,拷贝结束后释放锁,也停止对 redo log 的监视。

 

1.1.1   导出表作为原始数据

mysqldump mysql 用于转存储数据库的实用程序。它主要产生一个 SQL 脚本,其中包含从头重新创建数据库所必需的命令 CREATE TABLE INSERT 等。

使用 mysqldump 导出数据需要使用 --tab 选项来指定导出文件指定的目录,该目标必须是可写的。

以下实例将数据表 tutorials_tbl 导出到 /tmp 目录中:

$ mysqldump -u root -p --no-create-info \            --tab=/tmp TUTORIALS tutorials_tblpassword ******


mysqldump 是一个客户端的工具,类似于 Oracle exp 工具。如果在 windows 平台上执行以下命令,其中 192.168.1.63 Linux 平台上的 MySQL 数据库服务器:


C:\Users\xiaomaimiao> mysqldump -uroot -plhr -h192.168.1.63 --databases ceshi > a.sql

执行完以上命令后,会在 C:\Users\ xiaomaimiao 目录下生成 a.sql 文件。



mysqldump 常用于 MySQL 数据库逻辑备份。

1、  各种用法说明

A.  最简单的用法:

mysqldump -uroot -pPassword [database name] > [dump file]

上述命令将指定数据库备份到某 dump 文件(转储文件)中,比如:

mysqldump -uroot -p123 test > test.dump

生成的 test.dump 文件中包含建表语句(生成数据库结构哦)和插入数据的 insert

语句。

B.  --opt

如果加上 --opt 参数则生成的 dump 文件中稍有不同:

. 建表语句包含 drop table if exists tableName

. insert 之前包含一个锁表语句 lock tables tableName write insert 之后包含 unlock tables

C.  跨主机备份使用下面的命令可以将 host1 上的 sourceDb 复制到 host2 targetDb ,前提是 host2 主机上已经创建 targetDb 数据库:

mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb

-C 指示主机间的数据传输使用数据压缩

D.  只备份表结构

mysqldump   --no-data   --databases   mydatabase1   mydatabase2   mydatabase3   >test.dump

将只备份表结构。 --databases 指示主机上要备份的数据库。如果要备份某个 MySQL

主机上的所有数据库可以使用 --all-databases 选项,如下:

mysqldump --all-databases

> test. dump

E.  从备份文件恢复数据库

mysql [database name] < [backup file name]

2、  结合 Linux cron 命令实现定时备份

比如需要在每天凌晨 1:30 备份某个主机上的所有数据库并压缩 dump 文件为 gz

式,那么可在 /etc/crontab 配置文件中加入下面代码行:

30 1 * * * root mysqldump - u root - pPASSWORD --all-databases | gzip > /mnt/disk2/database_`date '+%m-%d-%Y'`.sql.gz

前面 5 个参数分别表示分钟、小时、日、月、年,星号表示任意。 date '+%m-%d-%Y'

得到当前日期的 MM-DD-YYYY 格式。

3 、一个完整的 Shell 脚本备份 MySQL 数据库示例

# vi /backup/backup. sh

#!bin/bash cd /backup

echo "You are in backup dir" mv backup* /oldbackup

echo "Old dbs are moved to oldbackup folder" File = backup-$Now.sql

mysqldump -u user -p password database-name > $File echo "Your database backup successfully completed"

上面脚本文件保存为 backup.sh ,并且系统中已经创建两个目录 /olcbackup /backup 。每次执行 backup.sh 时都会先将 /backup 目录下所有名称为 backup 开头的文件移到 /oldbackup 目录。

为上述脚本制定执行计划如下:

#crontab -e

30 1 * * * /backup. sh

4 mysqldump 全量备份 +mysqlbinlog 二进制日志增量备份从 mysqldump 备份文件恢复数据会丢失掉从备份点开始的更新数据,所以还需要结合 mysqlbinlog 二进制日志增量备份。确保 my.ini 或者 my.cnf 中包含下面的配置以启用二进制日志,或者 mysqld ---log-bin

[mysqld] log-bin=mysql-bin

mysqldump 命令必须带上 --flush-logs 选项以生成新的二进制日志文件:

mysqldump --single-transaction --flush-logs --master-data=2 > backup.sql

这样生成的增量二进制日志文件比如为 mysql-bin.000003 ,那么恢复数据时如下:

shell> mysql -uroot -pPwd < backup_sunday_1_PM.sql

shell> mysqlbinlog mysql-bin.000003 | mysql -uroot -pPwd

此外 mysqlbinlog 还可以指定 --start-date --stop-date --start-position --stop-position 参数,用于精确恢复数据到某个时刻之前或者跳过中间某个出问题时间段恢复数据

 

三、mysqldump参数说明 

(1)mysqldump字符集设置


mysqldump -uusername -ppassword --default-character-set=gb2312 db1 table1 > tb1.sql


mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个sql服务器(不一定是一个mysql服务器)。转储包含创建表和/或装载表的sql语句。
如果在服务器上进行备份,并且表均为myisam表,应考虑使用mysqlhotcopy,因为可以更快地进行备份和恢复。

(2)其他参数

--all-databases  , -A

 

导出全部数据库。

mysqldump -uroot -p --all-databases

--all-tablespaces  , -Y

导出全部表空间。

mysqldump -uroot -p --all-databases --all-tablespaces

--no-tablespaces  , -y

不导出任何表空间信息。

mysqldump -uroot -p --all-databases --no-tablespaces

--add-drop-database

每个数据库创建之前添加drop数据库语句。

mysqldump -uroot -p --all-databases --add-drop-database

--add-drop-table

每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)

mysqldump -uroot -p --all-databases  (默认添加drop语句)

mysqldump -uroot -p --all-databases –skip-add-drop-table  (取消drop语句)

--add-locks

在每个表导出之前增加LOCK TABLES并且之后UNLOCK  TABLE。(默认为打开状态,使用--skip-add-locks取消选项)

mysqldump -uroot -p --all-databases  (默认添加LOCK语句)

mysqldump -uroot -p --all-databases –skip-add-locks   (取消LOCK语句)

--allow-keywords

允许创建是关键词的列名字。这由表名前缀于每个列名做到。

mysqldump -uroot -p --all-databases --allow-keywords

--apply-slave-statements

在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'。

mysqldump -uroot -p --all-databases --apply-slave-statements

--character-sets-dir

字符集文件的目录

mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets

--comments

附加注释信息。默认为打开,可以用--skip-comments取消

mysqldump -uroot -p --all-databases  (默认记录注释)

mysqldump -uroot -p --all-databases --skip-comments   (取消注释)

--compatible

导出的数据将和其它数据库或旧版本的MySQL 相兼容。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,

要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。

mysqldump -uroot -p --all-databases --compatible=ansi

--compact

导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys

mysqldump -uroot -p --all-databases --compact

--complete-insert,  -c

使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。

mysqldump -uroot -p --all-databases --complete-insert

--compress, -C

在客户端和服务器之间启用压缩传递所有信息

mysqldump -uroot -p --all-databases --compress

--create-options,  -a

在CREATE TABLE语句中包括所有MySQL特性选项。(默认为打开状态)

mysqldump -uroot -p --all-databases

--databases,  -B

导出几个数据库。参数后面所有名字参量都被看作数据库名。

mysqldump -uroot -p --databases test mysql

--debug

输出debug信息,用于调试。默认值为:d:t,/tmp/mysqldump.trace

mysqldump -uroot -p --all-databases --debug

mysqldump -uroot -p --all-databases --debug=” d:t,/tmp/debug.trace”

--debug-check

检查内存和打开文件使用说明并退出。

mysqldump -uroot -p --all-databases --debug-check

--debug-info

输出调试信息并退出

mysqldump -uroot -p --all-databases --debug-info

--default-character-set

设置默认字符集,默认值为utf8

mysqldump -uroot -p --all-databases --default-character-set=utf8

--delayed-insert

采用延时插入方式(INSERT DELAYED)导出数据

mysqldump -uroot -p --all-databases --delayed-insert

--delete-master-logs

master备份后删除日志. 这个参数将自动激活--master-data。

mysqldump -uroot -p --all-databases --delete-master-logs

--disable-keys

对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态。

mysqldump -uroot -p --all-databases

--dump-slave

该选项将主的binlog位置和文件名追加到导出数据的文件中(show slave status)。设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,会在change前加上注释。该选项将会打开--lock-all-tables,除非--single-transaction被指定。该选项会自动关闭--lock-tables选项。默认值为0。

mysqldump -uroot -p --all-databases --dump-slave=1

mysqldump -uroot -p --all-databases --dump-slave=2

 

--master-data

该选项将当前服务器的binlog的位置和文件名追加到输出文件中(show master status)。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE  MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。

mysqldump -uroot -p --host=localhost --all-databases --master-data=1;

mysqldump -uroot -p --host=localhost --all-databases --master-data=2;

--events, -E

导出事件。

mysqldump -uroot -p --all-databases --events

--extended-insert,  -e

使用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度。默认为打开状态,使用--skip-extended-insert取消选项。

mysqldump -uroot -p --all-databases

mysqldump -uroot -p --all-databases--skip-extended-insert   (取消选项)

--fields-terminated-by

导出文件中忽略给定字段。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump -uroot -p test test --tab=”/home/mysql” --fields-terminated-by=”#”

--fields-enclosed-by

输出文件中的各个字段用给定字符包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump -uroot -p test test --tab=”/home/mysql” --fields-enclosed-by=”#”

--fields-optionally-enclosed-by

输出文件中的各个字段用给定字符选择性包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump -uroot -p test test --tab=”/home/mysql” --fields-enclosed-by=”#” --fields-optionally-enclosed-by  =”#”

--fields-escaped-by

输出文件中的各个字段忽略给定字符。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump -uroot -p mysql user --tab=”/home/mysql” --fields-escaped-by=”#”

--flush-logs

开始导出之前刷新日志。

请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。

mysqldump -uroot -p --all-databases --flush-logs

--flush-privileges

在导出mysql数据库之后,发出一条FLUSH  PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。

mysqldump -uroot -p --all-databases --flush-privileges

--force

在导出过程中忽略出现的SQL错误。

mysqldump -uroot -p --all-databases --force

--help

显示帮助信息并退出。

mysqldump --help

--hex-blob

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

mysqldump -uroot -p --all-databases --hex-blob

--host, -h

需要导出的主机信息

mysqldump -uroot -p --host=localhost --all-databases

--ignore-table

不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……

mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user

--include-master-host-port

在--dump-slave产生的'CHANGE  MASTER TO..'语句中增加'MASTER_HOST=,MASTER_PORT=

mysqldump -uroot -p --host=localhost --all-databases --include-master-host-port

--insert-ignore

在插入行时使用INSERT IGNORE语句.

mysqldump -uroot -p --host=localhost --all-databases --insert-ignore

--lines-terminated-by

输出文件的每行用给定字符串划分。与--tab选项一起使用,不能用于--databases和--all-databases选项。

mysqldump -uroot -p --host=localhost test test --tab=”/tmp/mysql”  --lines-terminated-by=”##”

--lock-all-tables,  -x

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

mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables

--lock-tables,  -l

开始导出前,锁定所有表。用READ  LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。

请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。

mysqldump -uroot -p --host=localhost --all-databases --lock-tables

--log-error

附加警告和错误信息到给定文件

mysqldump -uroot -p --host=localhost --all-databases  --log-error=/tmp/mysqldump_error_log.err

--max_allowed_packet

服务器发送和接受的最大包长度。

mysqldump -uroot -p --host=localhost --all-databases --max_allowed_packet=10240

--net_buffer_length

TCP/IP和socket连接的缓存大小。

mysqldump -uroot -p --host=localhost --all-databases --net_buffer_length=1024

--no-autocommit

使用autocommit/commit 语句包裹表。

mysqldump -uroot -p --host=localhost --all-databases --no-autocommit

--no-create-db,  -n

只导出数据,而不添加CREATE DATABASE 语句。

mysqldump -uroot -p --host=localhost --all-databases --no-create-db

--no-create-info,  -t

只导出数据,而不添加CREATE TABLE 语句。

mysqldump -uroot -p --host=localhost --all-databases --no-create-info

--no-data, -d

不导出任何数据,只导出数据库表结构。

mysqldump -uroot -p --host=localhost --all-databases --no-data

--no-set-names,  -N

等同于--skip-set-charset

mysqldump -uroot -p --host=localhost --all-databases --no-set-names

--opt

等同于--add-drop-table, --add-locks, --create-options, --quick, --extended-insert,--lock-tables,  --set-charset,--disable-keys 该选项默认开启,  可以用--skip-opt禁用.

mysqldump -uroot -p --host=localhost --all-databases --opt

--order-by-primary

如果存在主键,或者第一个唯一键,对每个表的记录进行排序。在导出MyISAM表到InnoDB表时有效,但会使得导出工作花费很长时间。

mysqldump -uroot -p --host=localhost --all-databases --order-by-primary

--password, -p

连接数据库密码

--pipe(windows系统可用)

使用命名管道连接mysql

mysqldump -uroot -p --host=localhost --all-databases --pipe

--port, -P

连接数据库端口号

--protocol

使用的连接协议,包括:tcp, socket, pipe, memory.

mysqldump -uroot -p --host=localhost --all-databases --protocol=tcp

--quick, -q

不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。

mysqldump -uroot -p --host=localhost --all-databases

mysqldump -uroot -p --host=localhost --all-databases --skip-quick

--quote-names,-Q

使用(`)引起表和列名。默认为打开状态,使用--skip-quote-names取消该选项。

mysqldump -uroot -p --host=localhost --all-databases

mysqldump -uroot -p --host=localhost --all-databases --skip-quote-names

--replace

使用REPLACE INTO 取代INSERT INTO.

mysqldump -uroot -p --host=localhost --all-databases --replace

--result-file,  -r

直接输出到指定文件中。该选项应该用在使用回车换行对(\\r\\n)换行的系统上(例如:DOS,Windows)。该选项确保只有一行被使用。

mysqldump -uroot -p --host=localhost --all-databases--result-file=/tmp/mysqldump_result_file.txt

--routines, -R

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

mysqldump -uroot -p --host=localhost --all-databases --routines

--set-charset

添加'SET NAMES default_character_set'到输出文件。默认为打开状态,使用--skip-set-charset关闭选项。

mysqldump -uroot -p --host=localhost --all-databases

mysqldump -uroot -p --host=localhost --all-databases --skip-set-charset

--single-transaction

该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK  TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。

mysqldump -uroot -p --host=localhost --all-databases --single-transaction

--dump-date

将导出时间添加到输出文件中。默认为打开状态,使用--skip-dump-date关闭选项。

mysqldump -uroot -p --host=localhost --all-databases

mysqldump -uroot -p --host=localhost --all-databases --skip-dump-date

--skip-opt

禁用–opt选项.

mysqldump -uroot -p --host=localhost --all-databases --skip-opt

--socket,-S

指定连接mysql的socket文件位置,默认路径/tmp/mysql.sock

mysqldump -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock

--tab,-T

为每个表在给定路径创建tab分割的文本文件。注意:仅仅用于mysqldump和mysqld服务器运行在相同机器上。注意使用--tab不能指定--databases参数

mysqldump -uroot -p --host=localhost test test --tab="/home/mysql"

--tables

覆盖--databases (-B)参数,指定需要导出的表名,在后面的版本会使用table取代tables。

mysqldump -uroot -p --host=localhost --databases test --tables test

--triggers

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

mysqldump -uroot -p --host=localhost --all-databases --triggers

--tz-utc

在导出顶部设置时区TIME_ZONE='+00:00' ,以保证在不同时区导出的TIMESTAMP 数据或者数据被移动其他时区时的正确性。

mysqldump -uroot -p --host=localhost --all-databases --tz-utc

--user, -u

指定连接的用户名。

--verbose, --v

输出多种平台信息。

--version, -V

输出mysqldump版本信息并退出

--where, -w

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

mysqldump -uroot -p --host=localhost --all-databases --where=” user=’root’”

--xml, -X

导出XML格式.

mysqldump -uroot -p --host=localhost --all-databases --xml

--plugin_dir

客户端插件的目录,用于兼容不同的插件版本。

mysqldump -uroot -p --host=localhost --all-databases--plugin_dir=”/usr/local/lib/plugin”

--default_auth

客户端插件默认使用权限。

mysqldump -uroot -p --host=localhost --all-databases--default-auth=”/usr/local/lib/plugin/


MySQL入门篇(六)之mysqldump备份和恢复

  • 一、备份单个数据库

1、备份命令:mysqldump

  MySQL数据库自带的一个很好用的备份命令。是逻辑备份,导出 的是SQL语句。也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的过程。


单实例语法(Syntax):
mysqldump -u  -p  > /path/to/***.sql
多实例的备份语法(Syntax):
mysqldump -u  -p   -S  > /path/to/***.sql
eg: mysqldump -u root -p wordpress > /opt/wordpress_$(date +%F).sql


2、参数解析


-A --all-databases:导出全部数据库
-Y --all-tablespaces:导出全部表空间
-y --no-tablespaces:不导出任何表空间信息
--add-drop-database每个数据库创建之前添加drop数据库语句。
--add-drop-table每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)
--add-locks在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)
--comments附加注释信息。默认为打开,可以用--skip-comments取消
--compact导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys
-c --complete-insert:使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。
-C --compress:在客户端和服务器之间启用压缩传递所有信息
-B--databases:导出几个数据库。参数后面所有名字参量都被看作数据库名。
--debug输出debug信息,用于调试。默认值为:d:t:o,/tmp/
--debug-info输出调试信息并退出
--default-character-set设置默认字符集,默认值为utf8
--delayed-insert采用延时插入方式(INSERT DELAYED)导出数据
-E--events:导出事件。
--master-data:在备份文件中写入备份时的binlog文件,在恢复进,增量数据从这个文件之后的日志开始恢复。值为1时,binlog文件名和位置没有注释,为2时,则在备份文件中将binlog的文件名和位置进行注释
--flush-logs开始导出之前刷新日志。请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。
--flush-privileges在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。
--force在导出过程中忽略出现的SQL错误。
-h --host:需要导出的主机信息
--ignore-table不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……
-x --lock-all-tables:提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。
-l --lock-tables:开始导出前,锁定所有表。用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。
--single-transaction:适合innodb事务数据库的备份。保证备份的一致性,原理是设定本次会话的隔离级别为Repeatable read,来保证本次会话(也就是dump)时,不会看到其它会话已经提交了的数据。
-F:刷新binlog,如果binlog打开了,-F参数会在备份时自动刷新binlog进行切换。
-n --no-create-db:只导出数据,而不添加CREATE DATABASE 语句。
-t --no-create-info:只导出数据,而不添加CREATE TABLE 语句。
-d --no-data:不导出任何数据,只导出数据库表结构。
-p --password:连接数据库密码
-P --port:连接数据库端口号
-u --user:指定连接的用户名。


举例使用:


a、导出整个数据库(包括数据库中的数据)
mysqldump -u username -p dbname > dbname.sql 
b、导出数据库结构(不含数据)
mysqldump -u username -p -d dbname > dbname.sql
c、导出数据库中的某张数据表(包含数据)
mysqldump -u username -p dbname tablename > tablename.sql
d、导出数据库中的某张数据表的表结构(不含数据)
mysqldump -u username -p -d dbname tablename > tablename.sql



3、恢复操作

语法(Syntax):
mysql -u -p  < /opt/mytest_bak.sql   #库必须保留,空库也可
说明:指定dbname,相当于use 


4、示例

  (1)无参数备份数据库mytest和恢复


(1)备份操作
a、备份
mysqldump -uroot -p‘123456’ mytest > /mnt/mytest_bak_$(date +%F).sql
(2)恢复操作
a、删除student表(库必须要保留,空库都行)
mysql -uroot -p'123456' -e "use mytest;drop table student;"
b、恢复数据
mysql -uroot -p'123456' mytest < /mnt/mytest_bak.sql 
c、查看数据
mysql -uroot -p'123456' -e "select * from mytest.student;"



(2)-B参数备份和恢复(建议使用)


(1)备份操作
a、备份
mysqldump -uroot -p'123456' -B mytest > /mnt/mytest_bak_B.sql
说明:加了-B参数后,备份文件中多的Create database和use mytest的命令
加-B参数的好处:
加上-B参数后,导出的数据文件中已存在创建库和使用库的语句,不需要手动在原库是创建库的操作,在恢复过程中不需要手动建库,可以直接还原恢复。
(2)恢复操作
a、删除mytest库
mysql -uroot -p'123456' -e "drop database mytest;"
b、恢复数据
(1)使用不带参数的导出文件导入(导入时不指定要恢复的数据库),报错
mysql -uroot - p'123456' < /mnt/mytest_bak.sql   
ERROR 1046 (3D000) at line 22: No database selected
(2)使用带-B参数的导出文件导入(导入时也不指定要恢复的数据库),成功
mysql -uroot -p'123456' < /mnt/mytest_bak_B.sql 
c、查看数据
mysql -uroot -p'123456' -e "select * from mytest.student;"


(3)--compact参数优化备份文小大小,减少输出注释(一般用于Debug调试)

(1)备份 mysqldump -uroot -p'123456' --compact -B mytest > /mnt/mytest_bak_Compact.sql
说明: 使用--compact参数,可以优化输出内容的大小,让容量更少,适合调试。便会忽略--skip-add-drop-table,--no-set-names,--skip-disable-keys,--skip-add-locks等几个参数的功能。


(4)指定压缩命令来压缩备份文件

(1)备份 mysqldump -uroot -p'123456'  -B mytest | gzip > /mnt/mytest_bak_.sql.gz
说明: mysqldump导出的文件是文本文件,压缩效率很高


(5)备份多个数据库

(1)说明 通过-B参数指定相关数据库,每个数据库名之前用空格分格。当使用-B参数后,将所有数据库全部列全,则此时等同于-A参数。 (2)备份 mysqldump -uroot -p'123456' -B mytest wiki | gzip > /mnt/mytestAndWiki_bak.sql.gz


(6)分库备份

  分库备份实际上就是执行一个备份语句就备份一个库,有多个库时,就执行多条相同的备份语句,只是备份的库名和备份文件名不同而已。可能通过shell脚本自动生成并执行相应的操作,也可以把所有单个备份语句写在一个shell脚本中,通过cron定时任务来备份。

分库备份的意义是在所有库都备份成一个备份文件时,恢复其中一个库的数据是比较麻烦的,所以分库备份,利于恢复。分库备份脚本如下:


for dbname in ` mysql -uroot -p'123456' -e "show databases;" | grep -Evi "database|infor|perfor"`
do
    mysqldump -uroot -p"123456" --events -B $dbname | gzip > /mnt/${dbname}_bak.sql.gz
done

说明:${dbname}_bak ,由于要求备份文件名以$dbname_bak.sql.gz 格式命令,但系统无法辨别变量是$dbname 还是$dbname_bak ,所以此时就需要用大括号“{} ”将变量括起来,就是${dbname}_bak.sql.gz 了。

(7)-d参数,只备份数据库中表结构

mysqldump -uroot -p'123456' -d mytest > /mnt/mytestDesc_bak.sql

(8)-A参数备份全库,并且-F刷新和切换binlog

mysqldump -uroot -p'123456' -A -B -F > /mnt/All_bak.sql

(9)--master-data参数在备份文件中写入当前binlog文件号


mysqldump -uroot -p'123456' --master-data=1 --compact mytest > /mnt/All_bak.sql
mysqldump -uroot -p'123456' --master-data=2 --compact mytest > /mnt/All_bak.sql




  • 二、备份单个表

语法(Syntax):不能加-B参数 mysqldump -u -p dbname tablename1 tablename2... > /path/to/***.sql

示例:


示例1:备份mytest库中的student表
mysqldump -uroot -p'123456' mytest student > /mnt/table_bak/student_bak.sql
示例2:备份mytest库中所有表,就是备份mytest库
mysqldump -uroot -p'123456' mytest  > /mnt/table_bak/all_bak.sql
示例3:备份mytest库中的student和test表
mysqldump -uroot -p'123456' mytest student test > /mnt/table_bak/two_bak.sql
示例4:-d参数,只备份表结构
mysqldump -uroot -p'123456' -d mytest stusent > /mnt/studentDesc_bak.sql
示例5:-t参数,只备份数据
mysqldump -uroot -p'123456' --compact -t mytest stusent > /mnt/studentData_bak.sql
INSERT INTO `student` VALUES (1,'Tom',20,'S11'),(2,'Jary',21,'S12'),(3,'King',25,'S10'),(4,'Smith',19,'S11'),(5,'??',20,'S11'),(6,'张三',20,'S11');


  • 三、企业生产场景不同引擎备份命令参数

1 mysqldump 的关键参数


-B:指定多个库,在备份文件中增加建库语句和use语句
--compact:去掉备份文件中的注释,适合调试,生产场景不用
-A:备份所有库
-F:刷新binlog日志
--master-data:在备份文件中增加binlog日志文件名及对应的位置点
-x  --lock-all-tables:锁表
-l:只读锁表
-d:只备份表结构
-t:只备份数据
--single-transaction:适合innodb事务数据库的备份
   InnoDB表在备份时,通常启用选项--single-transaction来保证备份的一致性,原理是设定本次会话的隔离级别为Repeatable read,来保证本次会话(也就是dump)时,不会看到其它会话已经提交了的数据。


2 、不同引擎备份命令参数用法


1)Myisam引擎:
mysqldump -uroot -p123456 -A -B --master-data=1 -x| gzip > /data/all_$(date +%F).sql.gz
(2)InnoDB引擎:
mysqldump -uroot -p123456 -A -B  --master-data=1 --single-transaction > /data/bak.sql
(3)生产环境DBA给出的命令
a、for MyISAM
mysqldump --user=root --all-databases --flush-privileges --lock-all-tables \
--master-data=1 --flush-logs --triggers --routines --events \
--hex-blob > $BACKUP_DIR/full_dump_$BACKUP_TIMESTAMP.sql
b、for InnoDB
mysqldump --user=root --all-databases --flush-privileges --single-transaction \
--master-data=1 --flush-logs --triggers --routines --events \
--hex-blob > $BACKUP_DIR/full_dump_$BACKUP_TIMESTAMP.sql




1.1.2   mysqldump 导出 SQL 格式的数据

[root@rhel6_lhr ~]# mysqldump -?

mysqldump  Ver 10.13 Distrib 5.6.21, for Linux (x86_64)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Dumping structure and contents of MySQL databases and tables.

Usage: mysqldump [OPTIONS] database [tables]

OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]

OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

 

Default options are read from the following files in the given order:

/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

The following groups are read: mysqldump client

The following options may be given as the first argument:

--print-defaults        Print the program argument list and exit.

--no-defaults           Don't read default options from any option file,

                        except for login file.

--defaults-file=#       Only read default options from the given file #.

--defaults-extra-file=# Read this file after the global files are read.

--defaults-group-suffix=#

                        Also read groups with concat(group, suffix)

--login-path=#          Read this path from the login file.

  -A, --all-databases Dump all the databases. This will be same as --databases

                      with all databases selected.

  -Y, --all-tablespaces

                      Dump all the tablespaces.

  -y, --no-tablespaces

                      Do not dump any tablespace information.

  --add-drop-database Add a DROP DATABASE before each create.

  --add-drop-table    Add a DROP TABLE before each create.

                      (Defaults to on; use --skip-add-drop-table to disable.)

  --add-drop-trigger  Add a DROP TRIGGER before each create.

  --add-locks         Add locks around INSERT statements.

                      (Defaults to on; use --skip-add-locks to disable.)

  --allow-keywords    Allow creation of column names that are keywords.

  --apply-slave-statements

                      Adds 'STOP SLAVE' prior to 'CHANGE MASTER' and 'START

                      SLAVE' to bottom of dump.

  --bind-address=name IP address to bind to.

  --character-sets-dir=name

                      Directory for character set files.

  -i, --comments      Write additional information.

                      (Defaults to on; use --skip-comments to disable.)

  --compatible=name   Change the dump to be compatible with a given mode. By

                      default tables are dumped in a format optimized for

                      MySQL. Legal modes are: ansi, mysql323, mysql40,

                      postgresql, oracle, mssql, db2, maxdb, no_key_options,

                      no_table_options, no_field_options. One can use several

                      modes separated by commas. Note: Requires MySQL server

                      version 4.1.0 or higher. This option is ignored with

                      earlier server versions.

  --compact           Give less verbose output (useful for debugging). Disables

                      structure comments and header/footer constructs.  Enables

                      options --skip-add-drop-table --skip-add-locks

                      --skip-comments --skip-disable-keys --skip-set-charset.

  -c, --complete-insert

                      Use complete insert statements.

  -C, --compress      Use compression in server/client protocol.

  -a, --create-options

                      Include all MySQL specific create options.

                      (Defaults to on; use --skip-create-options to disable.)

  -B, --databases     Dump several databases. Note the difference in usage; in

                      this case no tables are given. All name arguments are

                      regarded as database names. 'USE db_name;' will be

                      included in the output.

  -#, --debug[=#]     This is a non-debug version. Catch this and exit.

  --debug-check       Check memory and open file usage at exit.

  --debug-info        Print some debug info at exit.

  --default-character-set=name

                      Set the default character set.

  --delayed-insert    Insert rows with INSERT DELAYED.

  --delete-master-logs

                      Delete logs on master after backup. This automatically

                      enables --master-data.

  -K, --disable-keys  '/*!40000 ALTER TABLE tb_name DISABLE KEYS */; and

                      '/*!40000 ALTER TABLE tb_name ENABLE KEYS */; will be put

                      in the output.

                      (Defaults to on; use --skip-disable-keys to disable.)

  --dump-slave[=#]    This causes the binary log position and filename of the

                      master to be appended to the dumped data output. Setting

                      the value to 1, will printit as a CHANGE MASTER command

                      in the dumped data output; if equal to 2, that command

                      will be prefixed with a comment symbol. This option will

                      turn --lock-all-tables on, unless --single-transaction is

                      specified too (in which case a global read lock is only

                      taken a short time at the beginning of the dump - don't

                      forget to read about --single-transaction below). In all

                      cases any action on logs will happen at the exact moment

                      of the dump.Option automatically turns --lock-tables off.

  -E, --events        Dump events.

  -e, --extended-insert

                      Use multiple-row INSERT syntax that include several

                      VALUES lists.

                      (Defaults to on; use --skip-extended-insert to disable.)

  --fields-terminated-by=name

                      Fields in the output file are terminated by the given

                      string.

  --fields-enclosed-by=name

                      Fields in the output file are enclosed by the given

                      character.

  --fields-optionally-enclosed-by=name

                      Fields in the output file are optionally enclosed by the

                      given character.

  --fields-escaped-by=name

                      Fields in the output file are escaped by the given

                      character.

  -F, --flush-logs    Flush logs file in server before starting dump. Note that

                      if you dump many databases at once (using the option

                      --databases= or --all-databases), the logs will be

                      flushed for each database dumped. The exception is when

                      using --lock-all-tables or --master-data: in this case

                      the logs will be flushed only once, corresponding to the

                      moment all tables are locked. So if you want your dump

                      and the log flush to happen at the same exact moment you

                      should use --lock-all-tables or --master-data with

                      --flush-logs.

  --flush-privileges  Emit a FLUSH PRIVILEGES statement after dumping the mysql

                      database.  This option should be used any time the dump

                      contains the mysql database and any other database that

                      depends on the data in the mysql database for proper

                      restore.

  -f, --force         Continue even if we get an SQL error.

  -?, --help          Display this help message and exit.

  --hex-blob          Dump binary strings (BINARY, VARBINARY, BLOB) in

                      hexadecimal format.

  -h, --host=name     Connect to host.

  --ignore-table=name Do not dump the specified table. To specify more than one

                      table to ignore, use the directive multiple times, once

                      for each table.  Each table must be specified with both

                      database and table names, e.g.,

                      --ignore-table=database.table.

  --include-master-host-port

                      Adds 'MASTER_HOST=, MASTER_PORT=' to 'CHANGE

                      MASTER TO..' in dump produced with --dump-slave.

  --insert-ignore     Insert rows with INSERT IGNORE.

  --lines-terminated-by=name

                      Lines in the output file are terminated by the given

                      string.

  -x, --lock-all-tables

                      Locks all tables across all databases. This is achieved

                      by taking a global read lock for the duration of the

                      whole dump. Automatically turns --single-transaction and

                      --lock-tables off.

  -l, --lock-tables   Lock all tables for read.

                      (Defaults to on; use --skip-lock-tables to disable.)

  --log-error=name    Append warnings and errors to given file.

  --master-data[=#]   This causes the binary log position and filename to be

                      appended to the output. If equal to 1, will print it as a

                      CHANGE MASTER command; if equal to 2, that command will

                      be prefixed with a comment symbol. This option will turn

                      --lock-all-tables on, unless --single-transaction is

                      specified too (in which case a global read lock is only

                      taken a short time at the beginning of the dump; don't

                      forget to read about --single-transaction below). In all

                      cases, any action on logs will happen at the exact moment

                      of the dump. Option automatically turns --lock-tables

                      off.

  --max-allowed-packet=#

                      The maximum packet length to send to or receive from

                      server.

  --net-buffer-length=#

                      The buffer size for TCP/IP and socket communication.

  --no-autocommit     Wrap tables with autocommit/commit statements.

  -n, --no-create-db  Suppress the CREATE DATABASE ... IF EXISTS statement that

                      normally is output for each dumped database if

                      --all-databases or --databases is given.

  -t, --no-create-info

                      Don't write table creation info.

  -d, --no-data       No row information.

  -N, --no-set-names  Same as --skip-set-charset.

  --opt               Same as --add-drop-table, --add-locks, --create-options,

                      --quick, --extended-insert, --lock-tables, --set-charset,

                      and --disable-keys. Enabled by default, disable with

                      --skip-opt.

  --order-by-primary  Sorts each table's rows by primary key, or first unique

                      key, if such a key exists.  Useful when dumping a MyISAM

                      table to be loaded into an InnoDB table, but will make

                      the dump itself take considerably longer.

  -p, --password[=name]

                      Password to use when connecting to server. If password is

                      not given it's solicited on the tty.

  -P, --port=#        Port number to use for connection.

  --protocol=name     The protocol to use for connection (tcp, socket, pipe,

                      memory).

  -q, --quick         Don't buffer query, dump directly to stdout.

                      (Defaults to on; use --skip-quick to disable.)

  -Q, --quote-names   Quote table and column names with backticks (`).

                      (Defaults to on; use --skip-quote-names to disable.)

  --replace           Use REPLACE INTO instead of INSERT INTO.

  -r, --result-file=name

                      Direct output to a given file. This option should be used

                      in systems (e.g., DOS, Windows) that use carriage-return

                      linefeed pairs (\r\n) to separate text lines. This option

                      ensures that only a single newline is used.

  -R, --routines      Dump stored routines (functions and procedures).

  --set-charset       Add 'SET NAMES default_character_set' to the output.

                      (Defaults to on; use --skip-set-charset to disable.)

  --set-gtid-purged[=name]

                      Add 'SET @@GLOBAL.GTID_PURGED' to the output. Possible

                      values for this option are ON, OFF and AUTO. If ON is

                      used and GTIDs are not enabled on the server, an error is

                      generated. If OFF is used, this option does nothing. If

                      AUTO is used and GTIDs are enabled on the server, 'SET

                      @@GLOBAL.GTID_PURGED' is added to the output. If GTIDs

                      are disabled, AUTO does nothing. If no value is supplied

                      then the default (AUTO) value will be considered.

  --single-transaction

                      Creates a consistent snapshot by dumping all tables in a

                      single transaction. Works ONLY for tables stored in

                      storage engines which support multiversioning (currently

                      only InnoDB does); the dump is NOT guaranteed to be

                      consistent for other storage engines. While a

                      --single-transaction dump is in process, to ensure a

                      valid dump file (correct table contents and binary log

                      position), no other connection should use the following

                      statements: ALTER TABLE, DROP TABLE, RENAME TABLE,

                      TRUNCATE TABLE, as consistent snapshot is not isolated

                      from them. Option automatically turns off --lock-tables.

  --dump-date         Put a dump date to the end of the output.

                      (Defaults to on; use --skip-dump-date to disable.)

  --skip-opt          Disable --opt. Disables --add-drop-table, --add-locks,

                      --create-options, --quick, --extended-insert,

                      --lock-tables, --set-charset, and --disable-keys.

  -S, --socket=name   The socket file to use for connection.

  --secure-auth       Refuse client connecting to server if it uses old

                      (pre-4.1.1) protocol.

                      (Defaults to on; use --skip-secure-auth to disable.)

  --ssl               Enable SSL for connection (automatically enabled with

                      other flags).

  --ssl-ca=name       CA file in PEM format (check OpenSSL docs, implies

                      --ssl).

  --ssl-capath=name   CA directory (check OpenSSL docs, implies --ssl).

  --ssl-cert=name     X509 cert in PEM format (implies --ssl).

  --ssl-cipher=name   SSL cipher to use (implies --ssl).

  --ssl-key=name      X509 key in PEM format (implies --ssl).

  --ssl-crl=name      Certificate revocation list (implies --ssl).

  --ssl-crlpath=name  Certificate revocation list path (implies --ssl).

  --ssl-verify-server-cert

                      Verify server's "Common Name" in its cert against

                      hostname used when connecting. This option is disabled by

                      default.

  -T, --tab=name      Create tab-separated textfile for each table to given

                      path. (Create .sql and .txt files.) NOTE: This only works

                      if mysqldump is run on the same machine as the mysqld

                      server.

  --tables            Overrides option --databases (-B).

  --triggers          Dump triggers for each dumped table.

                      (Defaults to on; use --skip-triggers to disable.)

  --tz-utc            SET TIME_ZONE='+00:00' at top of dump to allow dumping of

                      TIMESTAMP data when a server has data in different time

                      zones or data is being moved between servers with

                      different time zones.

                      (Defaults to on; use --skip-tz-utc to disable.)

  -u, --user=name     User for login if not current user.

  -v, --verbose       Print info about the various stages.

  -V, --version       Output version information and exit.

  -w, --where=name    Dump only selected records. Quotes are mandatory.

  -X, --xml           Dump a database as well formed XML.

  --plugin-dir=name   Directory for client-side plugins.

  --default-auth=name Default authentication client-side plugin to use.

 

Variables (--variable-name=value)

and boolean options {FALSE|TRUE}  Value (after reading options)

--------------------------------- ----------------------------------------

all-databases                     FALSE

all-tablespaces                   FALSE

no-tablespaces                    FALSE

add-drop-database                 FALSE

add-drop-table                    TRUE

add-drop-trigger                  FALSE

add-locks                         TRUE

allow-keywords                    FALSE

apply-slave-statements            FALSE

bind-address                      (No default value)

character-sets-dir                (No default value)

comments                          TRUE

compatible                        (No default value)

compact                           FALSE

complete-insert                   FALSE

compress                          FALSE

create-options                    TRUE

databases                         FALSE

debug-check                       FALSE

debug-info                        FALSE

default-character-set             utf8

delayed-insert                    FALSE

delete-master-logs                FALSE

disable-keys                      TRUE

dump-slave                        0

events                            FALSE

extended-insert                   TRUE

fields-terminated-by              (No default value)

fields-enclosed-by                (No default value)

fields-optionally-enclosed-by     (No default value)

fields-escaped-by                 (No default value)

flush-logs                        FALSE

flush-privileges                  FALSE

force                             FALSE

hex-blob                          FALSE

host                              (No default value)

include-master-host-port          FALSE

insert-ignore                     FALSE

lines-terminated-by               (No default value)

lock-all-tables                   FALSE

lock-tables                       TRUE

log-error                         (No default value)

master-data                       0

max-allowed-packet                25165824

net-buffer-length                 1046528

no-autocommit                     FALSE

no-create-db                      FALSE

no-create-info                    FALSE

no-data                           FALSE

order-by-primary                  FALSE

port                              0

quick                             TRUE

quote-names                       TRUE

replace                           FALSE

routines                          FALSE

set-charset                       TRUE

single-transaction                FALSE

dump-date                         TRUE

socket                            (No default value)

secure-auth                       TRUE

ssl                               FALSE

ssl-ca                            (No default value)

ssl-capath                        (No default value)

ssl-cert                          (No default value)

ssl-cipher                        (No default value)

ssl-key                           (No default value)

ssl-crl                           (No default value)

ssl-crlpath                       (No default value)

ssl-verify-server-cert            FALSE

tab                               (No default value)

triggers                          TRUE

tz-utc                            TRUE

user                              (No default value)

verbose                           FALSE

where                             (No default value)

plugin-dir                        (No default value)

default-auth                      (No default value)

[root@rhel6_lhr ~]#

 

导出 SQL 格式的数据到指定文件,如下所示:

$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txtpassword ******

 

以上命令创建的文件内容如下:


-- MySQL dump 8.23
--
-- Host: localhost    Database: TUTORIALS
---------------------------------------------------------
-- Server version       3.23.58
--
-- Table structure for table `tutorials_tbl`
--
CREATE TABLE tutorials_tbl (
  tutorial_id int(11) NOT NULL auto_increment,
  tutorial_title varchar(100) NOT NULL default '',
  tutorial_author varchar(40) NOT NULL default '',
  submission_date date default NULL,
  PRIMARY KEY  (tutorial_id),
  UNIQUE KEY AUTHOR_INDEX (tutorial_author)
) TYPE=MyISAM;
--
-- Dumping data for table `tutorials_tbl`
--
INSERT INTO tutorials_tbl 
       VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO tutorials_tbl 
       VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO tutorials_tbl 
       VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');



 

一、  备份单库

如果你需要导出 个数据库的数据,可以使用以下命令:

$ mysqldump -u root -p TUTORIALS > database_dump.txtpassword ******

 

[root@rhel6_lhr ~]# mysqldump -u root -p viewdb > /tmp/viewdb_bk.sql

Enter password:

[root@rhel6_lhr ~]# more /tmp/viewdb_bk.sql

-- MySQL dump 10.13  Distrib 5.6.21, for Linux (x86_64)

--

-- Host: localhost    Database: viewdb

-- ------------------------------------------------------

-- Server version       5.6.21-enterprise-commercial-advanced-log

 

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

 

--

-- Table structure for table `user`

--

 

DROP TABLE IF EXISTS `user`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `user` (

  `id` int(11) NOT NULL,

  `name` varchar(10) DEFAULT NULL,

  `age` int(11) DEFAULT NULL,

  `sex` enum('F','M','UN') DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `user`

--

 

LOCK TABLES `user` WRITE;

/*!40000 ALTER TABLE `user` DISABLE KEYS */;

INSERT INTO `user` VALUES (1,'TubeLiu',20,'F'),(2,'Kevin',20,'F'),(3,'Mark',30,'F'),(4,'July',40,'M');

/*!40000 ALTER TABLE `user` ENABLE KEYS */;

UNLOCK TABLES;

 

--

-- Table structure for table `userinfo`

--

 

DROP TABLE IF EXISTS `userinfo`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `userinfo` (

  `fid` int(11) NOT NULL,

  `phone` int(11) DEFAULT NULL,

  `location` varchar(20) DEFAULT NULL,

  KEY `fk_userinfo_fid` (`fid`),

  CONSTRAINT `fk_userinfo_fid` FOREIGN KEY (`fid`) REFERENCES `user` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `userinfo`

--

 

LOCK TABLES `userinfo` WRITE;

/*!40000 ALTER TABLE `userinfo` DISABLE KEYS */;

INSERT INTO `userinfo` VALUES (1,12345,'Shanghai'),(2,54321,'Beijing'),(3,32145,'Shenzhen'),(4,34521,'Dalian');

/*!40000 ALTER TABLE `userinfo` ENABLE KEYS */;

UNLOCK TABLES;

 

--

-- Temporary view structure for view `view_userinfo`

--

 

DROP TABLE IF EXISTS `view_userinfo`;

/*!50001 DROP VIEW IF EXISTS `view_userinfo`*/;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

/*!50001 CREATE VIEW `view_userinfo` AS SELECT

 1 AS `uname`,

 1 AS `mobile`*/;

SET character_set_client = @saved_cs_client;

 

--

-- Final view structure for view `view_userinfo`

--

 

/*!50001 DROP VIEW IF EXISTS `view_userinfo`*/;

/*!50001 SET @saved_cs_client          = @@character_set_client */;

/*!50001 SET @saved_cs_results         = @@character_set_results */;

/*!50001 SET @saved_col_connection     = @@collation_connection */;

/*!50001 SET character_set_client      = utf8 */;

/*!50001 SET character_set_results     = utf8 */;

/*!50001 SET collation_connection      = utf8_general_ci */;

/*!50001 CREATE ALGORITHM=UNDEFINED */

/*!50013 DEFINER=`root`@`%` SQL SECURITY DEFINER */

/*!50001 VIEW `view_userinfo` AS select `user`.`name` AS `uname`,`userinfo`.`phone` AS `mobile` from (`user` join `userinfo`) where (`user`.`id` = `userinfo`.`fid`) */;

/*!50001 SET character_set_client      = @saved_cs_client */;

/*!50001 SET character_set_results     = @saved_cs_results */;

/*!50001 SET collation_connection      = @saved_col_connection */;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

 

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

 

-- Dump completed on 2015-03-26 10:29:26

[root@rhel6_lhr ~]#

 

二、  备份多库

如果需要备份所有数据库,可以使用以下命令:

$ mysqldump -u root -p --all-databases > database_dump.txt

password ******

--all-databases 选项在 MySQL 3.23.12 及以后版本加入。

该方法可用于实现数据库的备份策略。

 

[root@rhel6_lhr ~]# mysqldump --databases -uroot -p db1 db4 lhr_test mydb opensource opesource viewdb worlddb wyzc > /tmp/mysqldb.sql        

Enter password:

[root@rhel6_lhr ~]# more /tmp/mysqldb.sql

-- MySQL dump 10.13  Distrib 5.6.21, for Linux (x86_64)

--

-- Host: localhost    Database: db1

-- ------------------------------------------------------

-- Server version       5.6.21-enterprise-commercial-advanced-log

 

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

 

--

-- Current Database: `db1`

--

 

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `db1` /*!40100 DEFAULT CHARACTER SET latin1 */;

 

USE `db1`;

 

--

-- Table structure for table `join_student`

--

 

DROP TABLE IF EXISTS `join_student`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `join_student` (

  `stu_id` int(11) NOT NULL AUTO_INCREMENT,

  `stu_no` char(10) DEFAULT NULL,

  `class_id` int(11) NOT NULL,

  `stu_name` varchar(10) DEFAULT NULL,

  `stu_info` text,

  PRIMARY KEY (`stu_id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET character_set_client = @saved_cs_client */;

 

。。。。。。。

DROP TABLE IF EXISTS `t1`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `t1` (

[root@rhel6_lhr ~]# less /tmp/mysqldb.sql       

[root@rhel6_lhr ~]#

[root@rhel6_lhr ~]# tail /tmp/mysqldb.sql     

 

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

 

-- Dump completed on 2015-03-26 14:08:28

 

 

[root@rhel6_lhr ~]# ll -h /tmp/mysqldb.sql

-rw-r--r-- 1 root root 65M  Mar 26 14:08 /tmp/mysqldb.sql

[root@rhel6_lhr ~]#

 

 

 

 

 

 

三、  备份单表

 

 

[root@rhel6_lhr ~]# mysqldump -u root -p worlddb City > /tmp/worldb_City_bk.sql

Enter password:

[root@rhel6_lhr ~]# more /tmp/worldb_City_bk.sql

-- MySQL dump 10.13  Distrib 5.6.21, for Linux (x86_64)

--

-- Host: localhost    Database: worlddb

-- ------------------------------------------------------

-- Server version       5.6.21-enterprise-commercial-advanced-log

 

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

 

--

-- Table structure for table `City`

--

 

DROP TABLE IF EXISTS `City`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `City` (

  `ID` int(11) NOT NULL AUTO_INCREMENT,

  `Name` char(35) NOT NULL DEFAULT '',

  `CountryCode` char(3) NOT NULL DEFAULT '',

  `District` char(20) NOT NULL DEFAULT '',

  `Population` int(11) NOT NULL DEFAULT '0',

  PRIMARY KEY (`ID`)

) ENGINE=MyISAM AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `City`

--

 

LOCK TABLES `City` WRITE;

/*!40000 ALTER TABLE `City` DISABLE KEYS */;

INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000),(2,'Qandahar','AFG','Qandahar',237500),(3,'Herat','AFG','Herat',186800),(4,'Mazar-e-Sharif','AFG','Balkh',127800),(5,'Amsterdam','NLD','Noord-Holland'

,731200),(6,'Rotterdam','NLD','Zuid-Holland',593321),(7,'Haag','NLD','Zuid-Holland',440900),(8,'Utrecht','NLD','Utrecht',234323),(9,'Eindhoven','NLD','Noord-Brabant',201843),(10,'Tilburg','NLD','Noord-Brabant',

193238),(11,'Groningen','NLD','Groningen',172701),(12,'Breda','NLD','Noord-Brabant',160398),(13,'Apeldoorn','NLD','Gelderland',153491),(14,'Nijmegen','NLD','Gelderland',152463),(15,'Enschede','NLD','Overijssel'

,149544),(16,'Haarlem','NLD','Noord-Holland',148772),(17,'Almere','NLD','Flevoland',142465),(18,'Arnhem','NLD','Gelderland',138020),(19,'Zaanstad','NLD','Noord-Holland',135621),(20,'´s-Hertogenbosch','NLD','Noo

 

。。。。。。

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

 

-- Dump completed on 2015-03-26 10:38:46

 

 

1.1.3   将数据表及数据库拷贝至其他主机

如果你需要将数据拷贝至其他的 MySQL 服务器上 , 你可以在 mysqldump 命令中指定数据库名及数据表。

在源主机上执行以下命令,将数据备份至 dump.txt 文件中 :

$mysqldump -u root -p database_name table_name > dump.txtpassword*****

如果完整备份数据库,则无需使用特定的表名称。

如果你需要将备份的数据库导入到 MySQL 服务器中,可以使用以下命令,使用以下命令你需要确认数据库已经创建:

$mysql -u root -p database_name < dump.txtpassword*****

你也可以使用以下命令将导出的数据直接导入到远程的服务器上,但请确保两台服务器是相通的,是可以相互访问的:

$mysqldump-u root-p database_name | mysql-h other-host.com database_name

 

以上命令中使用了管道来将导出的数据导入到指定的远程主机上。


  1. 导出结构:
  2. mysqldump -hlocalhost -uroot -P3306 -p6NbAFQBE -d btmox>./btmox.sql
  3. mysqldump -hlocalhost -uroot -P3306 -p6NbAFQBE -d mxhy>./mxhy.sql
  4. 导出结构和数据:
  5. mysqldump -hlocalhost -uroot -P3306 -p6NbAFQBE  btmox>./btmox- data .sql
  6. mysqldump -hlocalhost -uroot -P3306 -p6NbAFQBE -d mxhy>./mxhy- data .sql
  7. 导入sql文件:
  8. mysql -uroot  -P3306 -p6NbAFQBE  btmox< ./btmox- data .sql
  9. mysql -uroot  -P3306 -p6NbAFQBE  mxhy< ./mxhy- data .sql
  10. 授权:
  11. grant all privileges on *.* to 'root' @ '%' identified by '6NbAFQBE' ;
  12. grant all privileges on *.* to 'dbmanager' @ '%' identified by '6NbAFQBE' ;
  13. FLUSH PRIVILEGES;




利用MySQL全备份(mysqldump),如何只恢复一个库或者一个表?


在实际工作中,一个MySQL实例中可能有多个database。而我们备份时,通常采用完全备份,将所有database都备份到一个文件中。
但是,偶尔会遇到只恢复一个database或者一个表的情况。怎么解决呢?

一、利用全备恢复一个库(database)的数据

案例:朋友在群里问, MySQL全库备份。如何只恢复一个库?

1、采用--one-database 选项。不建议使用该方式,经常出现问题。


# mysql -uroot -pxx -D db1 -o


2、从全备份文件中将需要的库的建表语句和INSERT数据拿出来,然后再导入


# sed -n '/^-- Current Database: `db1`/,/^-- Current Database: `/p' all.dmp > db1.sql  
# mysql -uroot -pxx -D db1



二、利用全备恢复一张表(table)的数据

生产中遇到开发同事更新表时未加上where条件,造称 order_status 列所有数据都被更新为0.

通常,mysqldump对全库进行备份。恢复时如果恢复全库,太耗时间又没有必要。所以,我们只恢复想要的表即可。

mysqldump备份中,既有表结构,又有INSERT INTO语句包含数据。所以获得者两部分内容即可。

1、获得表结构


# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `ecs_ugo_order_info`/!d;q' mysqldump_2017-05-23.sql


2、获得INSERT INTO 语句,用于数据的恢复


# grep -i 'INSERT INTO `ecs_ugo_order_info`' mysqldump_2017-05-23.sql >data.sql &


3、根据得到的表结构创建表,并导入数据



mysql -uroot -pxxx xx



4、拼接update语句



mysql> select concat('update xx.ecs_ugo_order_info set order_status=',order_status,' where order_id=',order_id,';') from ecs_ugo_order_info into outfile '/tmp/ecs_ugo_order_info_rercovery.sql';



结果如下:



update xx.ecs_ugo_order_info set order_status=6 where order_id=3254778;

update xx.ecs_ugo_order_info set order_status=6 where order_id=3254824;

update xx.ecs_ugo_order_info set order_status=6 where order_id=3254870; 



5、在生产库中将order_status恢复成正常值


# mysql -uroot -pxxx xx < /tmp/ecs_ugo_order_info_rercovery.sql







About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub( http://blog.itpub.net/26736162 )、博客园( http://www.cnblogs.com/lhrbest )和个人weixin公众号( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 (满) 、618766405

● weixin群:可加我weixin,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 646634621 ,注明添加缘由

● 于 2019-04-01 06:00 ~ 2019-04-30 24:00 在魔都完成

● 最新修改时间:2019-04-01 06:00 ~ 2019-04-30 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店 : https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书 : http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用网络班 : http://blog.itpub.net/26736162/viewspace-2148098/

小麦苗腾讯课堂主页 : https://lhr.ke.qq.com/

........................................................................................................................

使用 weixin客户端 扫描下面的二维码来关注小麦苗的weixin公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗weixin, 学习最实用的数据库技术。

........................................................................................................................

欢迎与我联系

 

 



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2641620/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26736162/viewspace-2641620/

你可能感兴趣的:(mysqldump介绍,利用MySQL全备份(mysqldump),如何只恢复一个库或者一个表?)