当前位置:Gxlcms > 数据库问题 > mysql备份(增量备份)

mysql备份(增量备份)

时间:2021-07-01 10:21:17 帮助过:6人阅读

--databases test > /backup/testdb_`date +%F`.sql # 生成了一个"testdb_2019-11-13.sql"的完全备份文件   技术图片
--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"的备份文件

   技术图片

再一次插入数据到数据库中
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"文件
  技术图片

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

先让mysql离线:
mysql> set sql_log_bin=0; 关闭二进制日志 mysql> flush logs;      滚动下日志 

 

   模拟数据库损坏:

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

 

   开始恢复数据:

# mysql -uroot -p </backup/testdb_2019-11-13.sql    # 导入完全备份文件
# mysql -uroot -p </backup/testdb_2019-11-13_12.sql  # 导入第一次增量备份
# mysql -uroot -p </backup/testdb_2019-11-13_13.sql  # 导入第二次增量备份

查看是数据是否恢复:
mysql> select * from test.people;
  技术图片

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

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

 

mysql备份(增量备份)

标签:日志   code   系统   复数   tables   生成   show   sel   ted   

人气教程排行