
Mysql的备份
1.备份类型
- 热备
在数据库正常业务是,备份数据,并且能够一致性恢复(只能是innodb)- 温备
锁表备份,只能查询不能修改(myisam)- 冷备
关闭数据库业务,数据库没有任何变更的情况下,进行备份数据.
2.备份方式及工具介绍
2.1逻辑备份工具:基于SQL语句进行备份
mysqldump ***** mysqlbinlog *****2.2物理备份工具:基于磁盘数据文件备份
xtrabackup(XBK) :percona 第三方 ***** MySQL Enterprise Backup(MEB)
3.逻辑备份和物理备份的比较
3.1 mysqldump -----自带的逻辑备份工具
优点:1.不需要下载安装 2.备份出来的是SQL,文本格式,可读性高,便于备份处理 3.压缩比较高,节省备份的磁盘空间缺点:
1..依赖于数据库引擎,需要从磁盘把数据读出, 然后转换成SQL进行转储,比较耗费资源,数据量大的话效率较低建议:
100G以内的数据量级,可以使用mysqldump 超过TB以上,我们也可能选择的是mysqldump,配合分布式的系统3.2 xtrabackup(XBK)--第三方物理备份工具
优点:1.类似于直接cp数据文件,不需要管逻辑结构,相对来说性能较高缺点:
1..可读性差 2.压缩比低,需要更多磁盘空间 建议:
4.备份策略
4.1全备:全库备份,备份所有数据
4.2增量:备份变化的数据逻辑备份=mysqldump+mysqlbinlog 物理备份=xtrabackup4.3备份周期:根据数据量设计备份周期
比如:周日全备,周1-周6增量
5.备份工具使用
5.1 mysqldump (逻辑备份的客户端工具)
5.1.1 客户端通用参数-u -p -S -h -P mysqldump -uroot -p5.1.2 备份专用基本参数
[1]
-A全备参数例子1--全备: mkdir /backup mysqldump -uroot -p -A >/backup/full.sql Enter password:[2]
-B db1 db2 db3备份多个单库例子2--单库或多库备份,比较适合于做跨版本的迁移,只备份生产库
mysqldump -uroot -p -B oldboy world >/backup/bak.sql[3] 备份单个或多个表
例子3--world数据库下的city,country表 mysqldump -uroot -p world city country >/backup/bak1.sql以上备份恢复时:必须库事先存在,并且ues才能source恢复
注意:
1.mysqldump -uroot -p -B world >/backup/oldboy.sql 2. mysqldump -uroot -p world >/backup/oldboy1.sql以上两个语句都是可以备份world数据库下所有表
-B添加了会生成建库语句create database 和 use结论:和库有关的备份增加参数
-B[4] 特殊参数使用(必须要加)
-R 备份存储过程及函数 --triggers 备份触发器例子4
mysqldump -uroot -p -A -R --triggers >/backup/full.sql[5] 特殊参数
-F使用每天晚上12点全备
上午10点钟,数据库被误删除了
二进制日志截取将成为我们比较棘手的问题
起点:怎么办
终点:好找-F 在备份开始时,刷新一个新binlog日志例子5:
mysqldump -uroot -p -A -R --triggers -F >/bak/full.sql[6]
--master-data=2以注释的形式,保存备份开始时间点的binlog的状态信息
mysqldump -uroot -p -A -R --triggers --master-data=2 >/bak/full.sql
- 0 默认值
- 1 以change master to命令形式,可以用作主从复制
- 2 以注释的形式记录,备份时刻的文件名+postion号
master-data可以自动加锁1.在不加
--single-transaction,启动所有表的温备份,所有表都锁定
2.加上--single-transaction,对innodb可以不锁表热备,对非innodb表可以实现自动锁表功能
6.备份必加参数
mysqldump -uroot -p -A -R --triggers --master-data=2 --single-transaction >/backup/full.sql功能:
- (1) 以注释的形式,保存备份开始时间点的binlog的状态信息
- (2) 对innodb可以不锁表热备
- (3) 对非innodb表可以实现自动锁表功能
注意:什么时候使用
--set-gtid-purged=OFF参数[root@db01 home]#mysqldump -uroot -p123 -A > /backup/full.sql mysqldump: [Warning] Using a password on the command line interface can be insecure. 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.1.常规备份是要加
--set-gtid-purged=OFF参数
2.构建主从时,做的备份,不需要加这个参数--set-gtid-purged=OFF
7.创建新表的方式备份表
create table $name as select * from 表名