MySQL数据库的mysqldump完全备份、binlog的增量备份与还原
一、备份的目的:
做灾难性恢复:对损坏的书籍进行恢复和还原
需求改变:因需求改变而需要把数据还原到改变以前
山东掌趣网络科技二、备份需要考虑的问题:
可以容忍丢失多长时间的数据;(数据不能百分百全部恢复)
恢复数据要在多长时间内完成;
恢复的时候是否需要持续提供服务;
恢复的对象:是整个库、多个表,还是单个库、单个表。
备份的数据库大小不超过50G
三、按照备份时对数据库的影响范围分类:
hotbackup:指在数据库运行中直接备份,对正在运行的数据库没有任何影响;称为在线备份(Online
Backup)(备份的同时,业务不受影响)
coldbackup:指在数据库停止的情况下进行备份;称为离线备份(Offline
Backup)(需要关mysql服务,读写请求均不允许状态下进行)
warmbackup:同样在数据库运行时进行备份,但仅支持读请求,不允许写请求;例如:加一个读锁以保证备份数据的一致性(服务在线,但仅支持读请求,不允许写请求)
四、按照备份后文件内容分类:
逻辑备份:指备份后的文件内容是可读的,通常为文本文件,内容一般是SQL语句,或者是表内的实际数据;适用于数据库的升级和迁移,回复时间较长
山东掌趣网络科技物理文件备份:对数据库物理文件(如数据文件、日志文件等)的备份;恢复时间较短
支持热备份与冷备份
五、按照备份数据库的内容分类:
完全备份:每次对数据进行完整的备份(备份的是数据库中的全部数据),包含用户表、系统表、索引、视图和存储过程等,但需要花费更多的时间和存储空间。
差异备份:在上一次完全备份原有的基础上,对更新的数据进行备份(对上一次完整备份后更新的数据)
增量备份:在上次备份的基础上,对更新的数据进行备份
日志备份:二进制日志备份
注:建议的备份策略
完全备份+增量备份+二进制日志
完全备份+差异备份+二进制日志
六、逻辑备份工具mysqldump:
mysqldump属于单线程(备份时间较长),通过tcp协议连接到mysql数据库,将数据转换成标准的SQL语句
优点:
备份“粒”度灵活;既可以针对整个MySQL服务,也可以只备份某个或者某几个DB,或者还可以指定只备份某个或者某几个表对象,甚至可以实现只备份表中某些符合条件的记录(-w,--where:只导出符合条件的记录)。
山东掌趣网络科技缺点:
a)当数据是浮点数时,会出现精度丢失。
b)Mysqldump的备份过程属于逻辑备份,备份速度、恢复速度与物理备份工具相比较慢,而且mysqldump备份的过程是串行化的,不会并行的进行备份,当数据量较大时,一般不会使用mysqldump进行备份,因为效率较低。只适合备份50G以下的数据
mysqldump对innodb存储引擎支持热备
mysqldump对myisam存储引擎只支持温备
七、导出数据的语法及选项:
语法:mysqldump[options][db_name[tbl_name…]]导出的文件名.sql
语法:mysqldump选项库名.表名(一个或多个)导出的文件名.sql
常用的参数:
-?,--help:显示帮助信息,英文的;
-u,--user:指定连接的用户名;
-p,--password:指定用户的密码,可以交互输入密码;
-S,--socket:指定socket文件连接,本地登录才会使用。
-h,--host:指定连接的服务器名称或者IP。
-P,--port=:连接数据库监听的端口。
–default-character-set:
设置字符集,默认是UTF8。
-A,–all-databases:
导出所有数据库。不过默认情况下是不会导出information_schema系统数据库。
-B,--databases:
导出指定的某个/或者某几个数据库,参数后面所有名字都被看作数据库名,用空格隔开,包含CREATEDATABASE创建库的语句。
山东掌趣网络科技–tables:导出指定表对象,参数格式为“库名
表名”,默认该参数将覆盖-B参数。
-w,--where:只导出符合条件的记录。
-l,--lock-tables:
默认参数,锁定读取的表对象,想导出一致性备份的话最好使用该参数,但会导致无法对表执行写入操作。
–single-transaction:
该选项在导出数据之前提交一个BEGINSQL语句,BEGIN不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于innoDB存储引擎。
在InnoDB导出时会建立一致性快照,在保证导出数据的一致性前提下,又不会堵塞其他会话的读写操作。指定这个参数后,其他连接不能执行ALTERTABLE、DROPTABLE、RENAMETABLE、TRUNCATETABLE这类语句,事务的隔离级别无法控制DDL语句。本选项和–lock-tables选项是互斥的,使用参数–single-transaction会自动关闭该选项。
-d,--no-data:只导出表结构,不导出表数据。
-t,--no-create-info:只导出数据,而不添加CREATETABLE
语句。
-f,--force:即使遇到SQL错误,也继续执行。
-F,--flush-logs:在执行导出前先刷新二进制日志文件,一般来说,如果是全库导出,建议先刷新日志文件,否则就不用了。
-x,--lock-all-tables:在导出任务执行期间锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局锁定,并且自动关闭–single-transaction和–lock-tables选项。这个参数副作用比较大,这是全库锁定,备份执行过程中,该库无法进行读写操作,不是所有业务场景都能接受的。请慎用。(读写操作无法执行)
山东掌趣网络科技-n,--no-create-db:不生成建库的语句CREATEDATABASE…IFEXISTS,即使指定—all-databases或–databases这类参数。
–triggers:导出表的触发器脚本,默认就是启用状态。使用–skip-triggers禁用它。
-R,--outines:导出存储过程以及自定义函数
导出数据:
A:导出所有数据库
mysql-u用户名
-p密码-A导出的文件名.sql
#mysqldump-uroot-p-Aall.sql
或
#mysqldump-uroot-p--all-databasesall2.sql
参数-A代表所有,等同于—all-databases
B:导出某个数据库
mysqldump
-u用户名-p数据库名导出的文件名.sql
#mysqldump-uroot-pbookbook.sql
#vimbook.sql
C:导出单张表
#mysqldump-uroot-pbookbooksbooks.sql#导出book库books表
D:导出库的表结构
#mysqldump-uroot-p-dbookbooktable.sql#只导出book库的表结构
E:只导出数据
#mysqldump-uroot-p-tbookbookdata.sql#只导出book库中的数据
F:导出数据库,并自动生成库的创建语句
#mysqldump-uroot-p-Bbook2book2.sql
#mysql-uroot-pbook2.sql导入不用指定数据名
导入数据:
A:导入所有数据库
#mysql-uroot-pall.sql
B:导入数据库
#mysql-uroot-pbookbook.sql#如果导入时,没有对应的数据库,需要你手动创建一下:mysqlcreatedatabasebook;
使用source导入
mysqlcreatedatabasebook;
mysqlusebook;
mysqlsource/root/book.sql
c:导入表
mysqldroptablebooks;
mysqlsource/root/books.sql;
##导入表时,不需要重新,创建表。要先进到相应的数据库中
mysqlselect*frombooks;
D:导入表结构和数据
mysqlcreatedatabasebook;
#mysql-uroot-pbookbooktable.sql
#mysql-uroot-pbookbookdata.sql
八、二进制日志:BinaryLogBinaryLogIndex
mysql的二进制日志记录着数据库的所有增、删、改等操作日志(前提是要在自己的服务器上开启binlog),还包括了这些操作的执行时间。
2.binlog的用途:
1):主从同步
2):恢复数据库
执行mysqlshow
variableslike‘log_bin%’;查看binlog是否开启
Off表示mysql当前binlog功能没有开启。
mysql
flushlogs;刷新日志
filename.index存放binlog的日志清单文件
开启binary
log功能:
修改/etc/my.cnf配置文件使二进制文件生效,添加如下内容:
log-bin=/data/mysql/log/mysql_bin
(二进制日志文件存放路径)
server-id=1
重启Mysql服务,使配置文件修改生效
[root
localhostlog]#systemctlrestartmysqld
九、binlog的附加选项参数:
1、“max-binlog-size”设置binlog的最大存储上限,一般设置为M或1G,一般不能超过1G。
2、“binlog-do-db=db_name”参数明确告诉MySQL,需要对某个(db_name)数据库记录binlog,如果有了“binlog-do-db=db_name”参数的显式指定,MySQL会忽略针对其他数据库执行的sqlquery,而仅仅记录针对指定数据库执行的sqlquery。
3、“binlog-ignore-db=db_name”与“binlog-do-db=db_name”完全相反,它显式指定忽略某个(db_name)数据库的binlog记录,当指定了这个参数之后,MySQL会记录指定数据库以外所有的数据库的binlog。
4、binlog-cache-size:一个事务,在没有提交(un