MySQL入门篇(六)之mysqldump备份和恢复
一、备份单个数据库
1、备份命令:mysqldump
MySQL数据库自带的一个很好用的备份命令。是逻辑备份,导出 的是SQL语句。也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的过程。
单实例语法(Syntax):
mysqldump -u <username> -p <dbname> > /path/to/***.sql 多实例的备份语法(Syntax):
mysqldump -u <username> -p <dbname> -S <sockPath> > /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<username> -p<password> <dbname> < /opt/mytest_bak.sql #库必须保留,空库也可
说明:指定dbname,相当于use <dbname>
4、示例
(1)无参数备份数据库mytest和恢复
()备份操作
a、备份
mysqldump -uroot -p‘’ mytest > /mnt/mytest_bak_$(date +%F).sql
()恢复操作
a、删除student表(库必须要保留,空库都行)
mysql -uroot -p'' -e "use mytest;drop table student;"
b、恢复数据
mysql -uroot -p'' mytest < /mnt/mytest_bak.sql
c、查看数据
mysql -uroot -p'' -e "select * from mytest.student;"
(2)-B参数备份和恢复(建议使用)
()备份操作
a、备份
mysqldump -uroot -p'' -B mytest > /mnt/mytest_bak_B.sql 说明:加了-B参数后,备份文件中多的Create database和use mytest的命令
加-B参数的好处:
加上-B参数后,导出的数据文件中已存在创建库和使用库的语句,不需要手动在原库是创建库的操作,在恢复过程中不需要手动建库,可以直接还原恢复。 ()恢复操作
a、删除mytest库
mysql -uroot -p'' -e "drop database mytest;"
b、恢复数据
(1)使用不带参数的导出文件导入(导入时不指定要恢复的数据库),报错
mysql -uroot - p'' < /mnt/mytest_bak.sql
ERROR (3D000) at line : No database selected
(2)使用带-B参数的导出文件导入(导入时也不指定要恢复的数据库),成功
mysql -uroot -p'' < /mnt/mytest_bak_B.sql
c、查看数据
mysql -uroot -p'' -e "select * from mytest.student;"
(3)--compact参数优化备份文小大小,减少输出注释(一般用于Debug调试)
()备份
mysqldump -uroot -p'' --compact -B mytest > /mnt/mytest_bak_Compact.sql
说明:
使用--compact参数,可以优化输出内容的大小,让容量更少,适合调试。便会忽略--skip-add-drop-table,--no-set-names,--skip-disable-keys,--skip-add-locks等几个参数的功能。
(4)指定压缩命令来压缩备份文件
()备份
mysqldump -uroot -p'' -B mytest | gzip > /mnt/mytest_bak_.sql.gz
说明:
mysqldump导出的文件是文本文件,压缩效率很高
(5)备份多个数据库
()说明
通过-B参数指定相关数据库,每个数据库名之前用空格分格。当使用-B参数后,将所有数据库全部列全,则此时等同于-A参数。
()备份
mysqldump -uroot -p'' -B mytest wiki | gzip > /mnt/mytestAndWiki_bak.sql.gz
(6)分库备份
分库备份实际上就是执行一个备份语句就备份一个库,有多个库时,就执行多条相同的备份语句,只是备份的库名和备份文件名不同而已。可能通过shell脚本自动生成并执行相应的操作,也可以把所有单个备份语句写在一个shell脚本中,通过cron定时任务来备份。
分库备份的意义是在所有库都备份成一个备份文件时,恢复其中一个库的数据是比较麻烦的,所以分库备份,利于恢复。分库备份脚本如下:
for dbname in ` mysql -uroot -p'' -e "show databases;" | grep -Evi "database|infor|perfor"`
do
mysqldump -uroot -p"" --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'' -d mytest > /mnt/mytestDesc_bak.sql
(8)-A参数备份全库,并且-F刷新和切换binlog
mysqldump -uroot -p'' -A -B -F > /mnt/All_bak.sql
(9)--master-data参数在备份文件中写入当前binlog文件号
mysqldump -uroot -p'' --master-data= --compact mytest > /mnt/All_bak.sql mysqldump -uroot -p'' --master-data= --compact mytest > /mnt/All_bak.sql
二、备份单个表
语法(Syntax):不能加-B参数
mysqldump -u<username> -p<password> dbname tablename1 tablename2... > /path/to/***.sql
示例:
示例1:备份mytest库中的student表
mysqldump -uroot -p'' mytest student > /mnt/table_bak/student_bak.sql 示例2:备份mytest库中所有表,就是备份mytest库
mysqldump -uroot -p'' mytest > /mnt/table_bak/all_bak.sql 示例3:备份mytest库中的student和test表
mysqldump -uroot -p'' mytest student test > /mnt/table_bak/two_bak.sql 示例4:-d参数,只备份表结构
mysqldump -uroot -p'' -d mytest stusent > /mnt/studentDesc_bak.sql 示例5:-t参数,只备份数据
mysqldump -uroot -p'' --compact -t mytest stusent > /mnt/studentData_bak.sql
INSERT INTO `student` VALUES (,'Tom',,'S11'),(,'Jary',,'S12'),(,'King',,'S10'),(,'Smith',,'S11'),(,'??',,'S11'),(,'张三',,'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、不同引擎备份命令参数用法
)Myisam引擎:
mysqldump -uroot -p123456 -A -B --master-data= -x| gzip > /data/all_$(date +%F).sql.gz ()InnoDB引擎:
mysqldump -uroot -p123456 -A -B --master-data= --single-transaction > /data/bak.sql ()生产环境DBA给出的命令
a、for MyISAM
mysqldump --user=root --all-databases --flush-privileges --lock-all-tables \
--master-data= --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= --flush-logs --triggers --routines --events \
--hex-blob > $BACKUP_DIR/full_dump_$BACKUP_TIMESTAMP.sql
MySQL入门篇(六)之mysqldump备份和恢复的更多相关文章
- 第二章 MySQL入门篇
第一章 MySQL入门篇 一.MySql简介 简言: 和SQL Server数据库相同,MySQl也是一个关系型数据库管理系统.由瑞典的MySQL AB公司开发,2008年被SUN公司收购,2009年 ...
- 最新MySQL入门篇
一.SQL简介 SQL:结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系 ...
- 【SSRS】入门篇(六) -- 分组和总计
原文:[SSRS]入门篇(六) -- 分组和总计 通过[SSRS]入门篇(五) -- 设置报表格式的设计,一份简单格式的报表已产生,如下图: 这节来说说分组和总计: 根据日期.订单对数据进行分组 添加 ...
- MySQL入门篇之mysqldump备份和恢复
一.备份单个数据库 1.备份命令:mysqldump MySQL数据库自带的一个很好用的备份命令.是逻辑备份,导出 的是SQL语句.也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备 ...
- mysql学习(4)-mysqldump备份和恢复数据
背景 最近在公司做数据迁移方面的工作,使用mysql数据库在测试环境模拟数据迁移,在迁移测试的过程中需要做数据备份和恢复 mysql数据备份和恢复比较简单,可以选择mysqldump工具,这里简单提一 ...
- mysql的日志及利用mysqldump备份及还原
日志文件:6类 一般查询日志:log,general_log,log_output 慢查询日志: 错误日志 二进制日志 中继日志 ...
- MySQL入门篇(七)之Xtrabackup备份与恢复
一.Xtrabackup介绍 MySQL冷备.mysqldump.MySQL热拷贝都无法实现对数据库进行增量备份.在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况 ...
- MySQL入门篇(四)之MySQL主从复制
一.MySQL主从复制原理 随机站点访问量的鞥集啊,单台的MySQL服务器压力也不断地增加,此时需要对MySQL进行优化,如果在MySQL优化无明显改善时期,可以使用高可用.主从复制.读写分离.分库分 ...
- Python全栈 MySQL 数据库 (SQL查询、备份、恢复、授权)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 今天接着昨天的说 索引有4种: 普通 索引 :ind ...
随机推荐
- 带参sql$和#的区别(注解)
主要区别就是#带双引号,$不带 例如:#{id}代表'id',${id}代表id 下面是Mybatis @Select注解方式的sql @Select("select id,name fro ...
- weblogic之CVE-2016-3510反序列化分析
将反序列化的对象封装进了weblogic.corba.utils.MarshalledObject,然后再对MarshalledObject进行序列化,生成payload字节码.由于Marshalle ...
- 【金融123】CNY和CNH的差异和关联
https://www.sohu.com/a/117406459_473263 离岸人民币(CNH)与在岸人民币(CNY) 差异: CNY CNH 法律监管限制 在岸人民币受大陆市场的管制,外汇和 ...
- selenium断言的分类
操作(action).辅助(accessors)和断言(assertion): 操作action: 模拟用户与 Web 应用程序的交互. 辅助accessors: 这是辅助工具.用于检查应用程序的状态 ...
- java中的序列化问题
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间.序列化是 ...
- VS2012打开Web项目提示《ASP.NET 4.X 尚未在Web服务器上注册。你需要手动将...》解决方案
用VS12创建的WEB项目时,默认使用IIS Experess开发服务器,但是每次打开会提示如下提示 但是同一个项目用VS13或VS15打开时,就能正常打开,不会出现以上提示信息. 怀疑是IIS Ex ...
- jquery 查找已经选中的下拉框/select
$("select[name='select_name']").find('option:selected').text(); $('#select_name option:sel ...
- oracle定时器在项目中的应用
业务需求: 现在业务人员提出了一个需求: 在项目中的工作流,都要有一个流程编号,此编号有一定的规则: 前四五位是流程的字母缩写,中间是8位的日期,后面五位是流水码,要求流水码每天从00001开始.即: ...
- vim内替换文件内容
几个常用的方法如下: :%s/foo/bar/g 把全部foo替换为bar,全局替换 :s/foo/bar/g 当前行替换foo为bar :%s/foo/bar/gc 替换每个foo为bar,但需要确 ...
- centos7添加新网卡实现双IP双网关
问题背景: 业务需要,针对业务需要不同地域的机构访问,所以需要在同一台机器上配置不同IP并配置不同网关,实现不用机构可以访问同一台服务器办理业务. 系统环境: centos linux7 网络环境: ...