MySQL 8.0.28 数据库完整备份及恢复以及binlog日志增量恢复
模拟环境说明:
服务器 | 说明 |
---|---|
192.168.37.185 | 主库 |
192.168.37.185 | 备用库 |
数据库开启binlog日志 /etc/my.cnf(此配置文件可直接使用)
[mysqld]
server-id=1
port = 3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data/mysql
socket=/tmp/mysql.sock
## 开启binlog 指定日志存放路径 日志文件为 mysql-bin.00000x
log-bin = /usr/local/mysql/data/mysql-bin
log-bin-index =/usr/local/mysql/data/mysql-bin.indexrelay-log = mysql-relay-bin
skip-name-resolve
back_log=1000
## 忽略大小写
lower-case-table-names=1
max_connections=1000
备份命令以及参数说明
[root@bogon /]# mysqldump -uroot -proot --single-transaction --flush-logs --master-data=2 --databases testdb --events --routines --triggers > /testdb.sql
参数 | 说明 |
---|---|
–single-transaction | 使用一致的读取并保证mysqldump开始后看到的数据不会更改 |
–flush-logs | 创建一个新的binlog日志文件 |
–master-data=2 | 将二进制日志信息写入备份文件 |
–databases | 指定备份数据库 如果没有声明这个参数 备份文件将不包含 CREATE DATABASE 或 USE 语句 |
testdb | 备份的数据库名称 |
–events | 导出时间触发器 mysqldump 默认不携带此参数 |
–routines | 导出存储过程和函数 mysqldump 默认不携带此参数 |
–triggers | 导出存储过程和函数 mysqldump 默认携带此参数 |
–no-data | 只备份表定义 (此文章内备份未使用) |
–no-create-info | 只备份数据 (此文章内备份未使用) |
> /testdb.sql | 将备份文件输出到根目录 |
binlog日志相关的操作命令
查看binlog日志文件
[root@bogon /]# mysqlbinlog /usr/local/mysql/data/mysql-bin.000002 | more指定时间范围 指定binlog日志文件 是否包含某项操作
[root@bogon /]# mysqlbinlog --start-datetime="2022-02-26 20:50:00" --stop-datetime="2022-02-26 23:55:00" --verbose /usr/local/mysql/data/mysql-bin.000002 | grep -C 15 "DROP TABLE"指定指定binlog日志事件开始和结束位置 指定binlog日志文件 恢复binlog日志
[root@bogon /]# mysqlbinlog --start-position=157 --stop-position=543 /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -proot批量执行binlog日志
[root@bogon /]# mysqlbinlog mysql-bin.000003 mysql-bin.000004 |mysql -uroot -proot
机器:192.168.37.185(主库)
- 创建测试数据库
mysql> create database testdb;
mysql> use testdb;
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
mysql> INSERT INTO pet VALUES ('Fluffy','Harold','cat','f','1993-02-04',NULL);
mysql> INSERT INTO pet VALUES ('Claws','Gwen','cat','m','1994-03-17',NULL);
mysql> INSERT INTO pet VALUES ('Buffy','Harold','dog','f','1989-05-13', NULL);
mysql> INSERT INTO pet VALUES ('Fang','Benny','dog','m','1990-08-27',NULL);
mysql> INSERT INTO pet VALUES ('Bowser','Diane','dog','m','1979-08-31','1995-07-29');
mysql> INSERT INTO pet VALUES ('Chirpy','Gwen','bird','f','1998-09-11',NULL);
mysql> INSERT INTO pet VALUES ('Whistler','Gwen','bird','','1997-12-09',NULL);
mysql> INSERT INTO pet VALUES ('Slim','Benny','snake','m','1996-04-29',NULL);
-- 存储过程
mysql> delimiter $
CREATE PROCEDURE getpetcountbyowner (IN petowner varchar(20), OUT petcounts INT)BEGINSELECT COUNT(*) INTO petcounts FROM testdb.petWHERE owner = petowner;END
$
-- 函数
mysql> delimiter $
CREATE FUNCTION hello (s CHAR(20))
RETURNS CHAR(50) DETERMINISTICRETURN CONCAT('Hello, ',s,'!');
$
-- 视图
mysql> delimiter $
CREATE VIEW testdb.petview AS SELECT * FROM testdb.pet;
$-- 事件
mysql> delimiter $
CREATE EVENT myeventON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOURDOUPDATE testdb.pet SET birth = birth + INTERVAL 1 DAY;$
-- 触发器
mysql> delimiter $
CREATE TRIGGER birthadd BEFORE INSERT ON petFOR EACH ROW SET NEW.birth = INTERVAL 1 DAY + NEW.birth;$
- 数据库备份
如果没有配置mysql的环境变量, 备份方式为 /mysql安装路径/bin/mysqldump ...
[root@bogon /]# mysqldump -uroot -proot --single-transaction --flush-logs --master-data=2 --databases testdb --events --routines --triggers > /testdb.sql
mysql> show master status; --此信息会写入备份文件内
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 157 | | | |
+------------------+----------+--------------+------------------+-------------------+
将备份文件传到备用库服务器上
[root@bogon /]# scp /testdb.sql root@192.168.37.186:/
切换机器:192.168.37.186(备用库)
mysql> source testdb.sql
mysql> use testdb;
mysql> select * from pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
+----------+--------+---------+------+------------+------------+
8 rows in set (0.00 sec)
上述步骤完成之后,testdb的完整备份已在 192.168.37.186 恢复完成。接下来根据binlog日志进行增量恢复
(例如 :我们在2022-12-01 23:59:59 进行了完整备份 。在2022-12-02 12:59:59数据库出现了故障,我们通过2022-12-01 23:59:59 的完整备份恢复了数据。而 2022-12-01 23:59:59 到 2022-12-02 12:59:59 的数据库操作我们需要通过binlog日志进行恢复
切换机器:192.168.37.185(主库) 模拟数据删除
mysql> use testdb;
mysql> select * from pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
+----------+--------+---------+------+------------+------------+
8 rows in set (0.00 sec)mysql> delete from pet where name ='Slim';mysql> select * from pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | | 1997-12-09 | NULL |
+----------+--------+---------+------+------------+------------+
mysql> exit
由于我们在备份时使用了 --flush-logs --master-data=2 所以通过查看备份文件是可以知道备份时新开启的binlog日志文件是什么
[root@bogon /]# more /testdb.sql
进入binlog日志目录,将备份文件内 master_log_file 指定的binlog日志以及之后生成的日志发送到 备用库
[root@bogon /]# cd /usr/local/mysql/data
[root@bogon /]# ls
mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 mysql-bin.000004
[root@bogon /]# scp mysql-bin.000003 mysql-bin.000004 root@192.168.37.186:/
切换机器:192.168.37.186 进行binlog日志恢复
[root@bogon /]# mysqlbinlog mysql-bin.000003 mysql-bin.000004 |mysql -uroot -proot
mysql> use testdb;
mysql> select * from pet; -- 可以看到我们模拟删除的数据已经不见了
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | | 1997-12-09 | NULL |
+----------+--------+---------+------+------------+------------+至此 整个数据库已从 192.168.37.185 迁移至 192.168.37.186
参考 MySQL官网文档 - 备份以及恢复 章节
MySQL 8.0.28 数据库完整备份及恢复以及binlog日志增量恢复相关推荐
- ubuntu 安装docker mysql 8.0.28
ubuntu 安装docker mysql 8.0.28 1. ubuntu 版本信息更新系统 webrx@us:~$ sudo apt update [sudo] webrx 的密码: 命中:1 h ...
- mysql 8.0.28版本安装配置方法图文教程
mysql 8.0.28版本安装配置方法图文教程 从 Mysql 官网下载 mysql 下载完成后直接双击进行安装,打开后的页面如下所示: 选择自定义custom,接着下一步 将MySQL Serve ...
- 国产麒麟系统KylinOS Server V10 SP2安装MySQL 8.0.28—RPM包安装
最近工作重点转向信创领域后就开始研究国产化操作系统对各种数据库的适配方案,期间发现一些很有价值的内容,特意整理成文章分享出来. 此文档讲述如何在国产麒麟操作系统KylinOS Server V10 S ...
- mysql binlog恢复错误_mysql通过binlog日志来恢复数据
简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通 ...
- mysql通过binlog日志来恢复数据
简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通 ...
- mysql通过日志恢复数据_mysql通过binlog日志来恢复数据
简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通 ...
- mysql binlog elk_利用MySQL的binlog日志文件恢复数据库
一.新建一个数据库test 在库里新建一个数据表test ,并插入几条数据 mysql>create database test CHARSET utf8; Query OK, 1 row af ...
- mysql 8.0.28安装教程(超简单)
背景:目前在网络上的mysql安装教程,针对的mysql版本较老,或者安装教程使用的mysql软件多是解压版本,解压过程简单,但是后续配置相对比较麻烦,并且可能因为缺少某些C++依赖包而导致程序无法正 ...
- mysql 命令备份恢复,binlog日志, percona工具备份恢复
物理备份:备份库和表对应系统文件 cp -r /var/lib/mysql /dbdir.bak cp -r /var/lib/mysql/mysql /dbdir.bak cp -r /var/li ...
- mysql binlog 过滤表_mysql日志恢复指定表【从binlog日志过滤恢复指定数据表】
很多时候,MYSQL数据库由于一些误操作,需要恢复指定表,或某个表指定时间点的数据,这个时候需要根据MYSQL的binlog日志做时间点的恢复,下面将介绍这个方案的具体步骤: 一.登录数据库刷新bin ...
最新文章
- 链路聚合_链路聚合可靠性技术详解(三)
- linux同名文件夹覆盖_第一天:Linux——复习
- js中常用的正则表达式
- python从入门到实践15章的几个自己的小程序
- 蓝桥杯-题目:猜算式
- 数据库运维平台~慢日志模块设计
- 灵魂拷问:到底要不要写单元测试,如何正确进行单元测试?
- es 测试数据进行 增删查改
- linux内核分析和应用 -- 进程与线程(上)
- MATLAB--卡尔曼滤波
- notepad linux版本,Notepad++ Linux版
- Verilog语法入门
- 如何查看电脑系统版本
- rest接口案例_REST和平:微服务与现实案例中的整体
- Cin、cout、 cerr和 clog用法和区别
- 古文觀止卷九_永州韋使君新堂記_柳宗元
- 王者服务器维护什么时间结束8月25,8月25日体验服停机更新公告
- 一个身份证号能申请多少个微信公众账号?
- 批处理-删除子目录中的文件及文件夹
- MMTool制作Ozmosis引导BIOS完美引导OS X系统
热门文章
- python机器人编程——差速AGV机器人VREP仿真python联动控制实现
- app毕业设计 基于uni-app框架 驾校考试、刷题在线考试app毕设题目课题选题作品(1)app界面和功能
- Android蓝牙开发浅谈 __ 耳机录音
- 找出一个二维数组中的鞍点(C)
- [NLP] LLM---<训练中文LLama2(五)>对SFT后的LLama2进行DPO训练
- winpcap安装失败、无法安装等问题解决
- 90后电商新势力崛起——专访1折网CEO杨华
- 惨!被恶意侵权投诉,Listing遭下架怎么办?
- java 项目导入到svn_Eclipse导入SVN项目的三种方式
- 英飞凌TLE987X,TLE9879无感量产电机FOC控制方案