mysql增量备份_mysql备份(增量备份)

数据库的备份方式:

完全备份  full backup,备份全部字符集。

增量备份 incremental backup 上次完全备份或增量备份以来改变了的数据,不能单独使用,要借助完全备份,备份的频率取决于数据的更新频率。

差异备份 differential backup 上次完全备份以来改变了的数据。

建议的恢复策略:

完全+增量+二进制日志

完全+差异+二进制日志

我们常用的备份方式:

备份整个数据库

$> mysqldump -u root -h host -p dbname > backdb.sql

备份数据库中的某个表

$> mysqldump -u root -h host -p dbname tbname1, tbname2 > backdb.sql

备份多个数据库

$> mysqldump -u root -h host -p --databases dbname1, dbname2 > backdb.sql

备份系统中所有数据库

$> mysqldump -u root -h host -p --all-databases > backdb.sql

1. 完全+增量+二进制日志

在备份前需要献给表加锁

--lock-all-tables 是对要备份的数据库的所有表施加读锁

--lock-table 仅对单张表施加读锁,即使是备份整个数据库,它也是在我们备份某张表的时候才对该表施加读锁,因此适用于备份单张表

首先需要做完全备份:

# sudo mysqldump -uroot --single-transaction --master-data=2 --databases test > /backup/testdb_`date +%F`.sql # 生成了一个"testdb_2019-11-13.sql"的完全备份文件

d35503afda4ed47187783d322fbfa50a.png

--single-transaction: 基于此选项能实现热备InnoDB表;因此,不需要同时使用--lock-all-tables;

--master-data=2 记录备份那一时刻的二进制日志的位置,并且注释掉,1是不注释的

--databases hellodb 指定备份的数据库

然后修改数据库表,找到修改后的日志位置:

mysql> insert into people (user_name,age) values('mm',18);

# cat /backup/testdb_2019-11-13.sql | less

找到备份起始位置:

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=960; # 960 是完全备份日志中的结束位置

查看当前日志位置:

mysql>  show master status;

+------------------+----------+--------------+------------------+-------------------+

| File         | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000002 | 1228 |          |            |            |  # 1228 是插入一条数据后二进制日志当前位置

+------------------+----------+--------------+------------------+-------------------+

开始生成增量备份:

# sudo mysqlbinlog --start-position 960 --stop-position 1228 /var/log/mysql/mysql-bin.000002 > /backup/testdb_`date +%F_%H`.sql

# ll /backup # 可以看到有一个"testdb_2019-11-13_12.sql"的备份文件

259ea5142acd7b5f366d144e0b53c3a5.png

再一次插入数据到数据库中

mysql> insert into people (user_name,age) values('gg',18); 关闭二进制日志

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File         | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000002 | 1496   |          |            |            |  # 1496是插入第二条数据后的二进制日志位置

+------------------+----------+--------------+------------------+-------------------+

# mysqlbinlog --start-position 1228 --stop-position 1496 /var/log/mysql/mysql-bin.000002 > /backup/testdb_`date +%F_%H`.sql

# ll /backup # 又多了一个"testdb_2019-11-13_13.sql"文件

88686823f1a04959be76537adf39b764.png

可以看到有三个文件,第一个是我们的完全备份文件,第2、3个就是增量备份文件

先让mysql离线:

mysql> set sql_log_bin=0; 关闭二进制日志

mysql> flush logs;      滚动下日志

模拟数据库损坏:

mysql> drop database test;  # 删除test数据库

开始恢复数据:

# mysql -uroot -p

# mysql-uroot -p

查看是数据是否恢复:

mysql> select * from test.people;

0c75c23d28dac7d3f8c5689bdb514820.png

此时的数据库已经完全恢复了,我们新插入的数据也在数据库里。

mysql> set sql_log_bin=1; # 确认没问题后开启bin日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值