第一种 mysqldump
mysqldump是mysql用于备份和数据转移的一个工具。它主要产生一系列的SQL语句,可以封装到文件,该文件 包含有所有重建你的数据库所需要的 SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等。
可以用来 实现轻量级的快速迁移或恢复数据库。 mysqldump 是将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之 间升级时相对比较合适,这也是最常用的备份方法。
mysqldump一般在数据量很小的时候(几个G)可以用于 备份。当数据量比较大的情况下,就不建议用mysqldump工具进行备份了。
注意使用mysqldump的时候,把二进制日志开启和GTID事务唯一ID号开启
mysqldump 参数:
-A 全库
-B 单库或多个单库
-R 存储过程和函数
-E 事件
–triggers 触发器
–master-data=2
(值为1:change master to 语句可以被slave直接执行;值为2:change master会被注释)
(1) 记录备份时刻的binlog信息
(2) 自动锁表
不加–single-transaction ,温备份
加了–single-transaction,对于InnoDB表不锁表备份(快照备份)
–single-transaction
对于InnoDB的表,进行一致性快照备份,不锁表.
在构建主从时,使用AUTO/ON
–set-gtid-purged=AUTO/ON 主从复制的时候 在从上备份的时候删除事务ID号 从新来
仅是做普通的本机备份恢复时,可以添加
–set-gtid-purged=OFF
–max_allowed_packet=128M控制的是备份时传输单个数据包的大小
接下来就是模拟:
模拟全备和误操作
首先创建库,加入数据,这里就随便加点就行了。
create database backup charset utf8mb4 collate utf8mb4_bin;
use backup
create table t1(id int primary key not null auto_increment);
insert into t1 values(1),(2),(3);
commit;
接下是全备: 注意下面代码是在数据库内全备 在外面的话去掉system
–set-gtid-purged=OFF(关闭事务id号处理)为了防止恢复数据的时候因事务ID号阻断恢复
–single-transaction(快照备份、热备份)
system mysqldump -uroot -p123 -A -R --triggers --set-gtid-purged=OFF --master-data=2 --single-transaction > /tmp/backup.sql
查看是否备份成功:
接下来在插入一组和一个新表t2数据:
use backup
insert into t1 values(11),(22),(33);
commit;
create table t2 (id int);
insert into t2 values(11),(22),(33);
commit;
然后模拟故障,删除表(只是模拟,不代表生产操作)
drop database backup;
删除后查看自己的日志:
show binary logs;
查看日志详情:
show binlog events in 'mysql-bin.000001';
可以看到删除是在最后一条(已用黄色笔标出)根据GTID号来实现恢复