数据库备份需要备份那些数据:
业务数据库
binlog
配置文件
1.1 设置备份策略
全备份、增量、时间、自动、备份是否成功
1.2 备份文件是否可用、备份空间是否可用、磁盘是否存在安全隐患
1.3 定期恢复演练
季度、半年
1.4 故障恢复
通过现有备份、能够将数据库恢复到故障之前的时间点。
1.5 迁移
1、停机时间
2、回退方案
2 备份类型
2.1 热备份
在数据库业务正常时,备份数据并且能够一致性恢复(只能时innodb)
对业务影响非常小
2.2 温备份
锁表备份只能查询不能修改(myisam)
2.3 冷备份
3、备份方式及工具介绍
3.1 逻辑备份工具
mysqldump
mysqlbinlog
mydumper
3.2 物理备份工具
xtrabackup(xbk) percona 第三方
4、逻辑备份和物理备份的比较
4.1 mysqldump
优点:
1、不需要下载安装
2、备份出来的是SQL,文本格式、可读性高便于备份处理
3、压缩比较高,节省备份的磁盘空间
缺点:
依赖于数据库引擎,需要从磁盘数据读出然后转换成SQL进行存储,比较耗费资源,数据量大的话效率低。
建议:
100G 以内的数据量可以使用mysqldump 超过TB及以上,我们可以选择的是mysqldump,配合分布式的系统
1EB= 1024 T=1000000GB
备份方式:
全备份:全库备份、备份所有数据
增量: 备份变化的数据
逻辑备份=mysqldump+mysqlbinlog
物理备份=xtrabackup
mysqldump 命令说明:
mysqldump
--single-transaction (生产中必用) 用于保证InndDB备份数据时的一致性,配合RR隔离级别一起使用: 当发起事务时,读取一个数据的快照,直到备份结束时,都不会读到本事务开始之后提交的任何数据(这个参数相当重要)
-A --all-databases
--master-data = 2 (生产比用)该参数有1和2两个值。 如果等于1 就会在备份出来的文件中添加一个change master 的语句;
如果该参数设置2,就会在备份出来的文件中添加一个change master 的语句,并在语句前面添加注释。
--dump-slave 该参数用于在从库上备份数据,在线搭建新的从库时使用。该参数也有1和2两个值。
值为1时,也是在备份出来的文件中添加一个change master 的语句; 值为2时,则会在change master 命令前增加注释。
--no-create-info (-t)备份过程中,只备份表数据,并不备份表结构
--no-data (-d) 备份过程只备份表结构 不备份表数据
--complete-insert (-c) 使用完整的insert 语句会包含表中的列信息,这么做可以提高插入效率。
--databases (-B) 备份指定的库
--default-character-set 字符集, mysql 目前默认的字符集为utf8 要与备份出的表的字符集保持一致
--quick (-q) 加上sql_no_query ,意味着并不会读取缓存中的数据
--where=按条件备份出想要的数据
--set-gtid-purged=off 如果数据库中已经开启gtid 选项,但备份过程中不想带gtid信息。可以加上该参数。
--flush-log (-F) 备份之前刷新日志。 )
--triggers Dump triggers for each dumped table. (生产中必加)
--routines (-R) Dump stored routines (functions and procedures) (生产中必加).
--events -E Dump events. (生产中必加)
备份时提示信息
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
--set-gtid-purged=(auto、on、off)
off
使用场景:
1 、--set-gtid-purged = off 可以使用在日常备份参数中
mysqldump --single-transaction --max-allow-packet=256M --master-data=1 --triggers -R -E -A
2、auto,on 在构建主从复制环境时需要的参数配置
mysqldump --single-transaction --max-allow-packet=256M --master-data=1 --triggers -R -E -A
注意:提示警告不影响备份的结果!! 可以忽略!!!!
--max-allow-packet=N
查看客户端配置的大小
@192.168.1.141:[db1] >select @@max_allowed_packet;
+----------------------+
| @@max_allowed_packet |
+----------------------+
| 4194304 |
+----------------------+
1 row in set (0.00 sec)
@192.168.1.141:[db1] >
如果备份时报错,应该修改mysql客户端的值,直接在备份命令mysqldump 上添加--max-allow-packet=256M
全库备份:
mysqldump --single-transaction --flush-log --master-data=1 --triggers --routines - -events --single-transaction -uroot -h 192.168.1.141 -p -A > all_20170902.sql
生产环境备份命令:
mysqldump --single-transaction --max-allow-packet=256M --master-data=1 --triggers -R -E -A > all.sql
恢复:
mysql -uroot -h 192.168.1.141 -p < all_20170902.sql
备份单表(行业中推荐使用这种方式)
mysqldump -uroot -h -p world City >world_City.sql
恢复单库单表
mysql -u root -h -p world < world_City.sql
备份指定的库
mysql -uroot -h mysql_server -p -B web blog > web_blog.sql
备份时间统计:
虚拟机:
四核4G ASA:15000
23s 1.2G
2300s ==> 40m 120G
八核8G ASA: 15000
生产每个表的备份命令:
>select concat("mysqldump -uroot -h192.168.1.141 -p",table_schema," ",table_name, "> /data/backup/",table_schema,"_",table_name,".sql") from information_schema.tables where table_schema not in ('sys','information_schema','performance_schema') ;
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
mysqldump -uroot -p -h -A -R --triggers -E --master-data=2 --single-transaction --set-gtid-purged=off >all.sql