基于Linux操作系统中的MySQL数据库备份(三十三)

news2024/11/14 1:43:29

目录

一、概述

二、数据备份的重要性

三、造成数据丢失的原因

1、程序错误

2、人为错误

3、运算失败

4、磁盘故障

5、灾难(如火灾、地震)和盗窃

四、备份类型

(一)物理与逻辑角度

1、物理备份

1.1、冷备份

1.2、热备份

2、逻辑备份

(二)数据库备份策略角度

1、完整备份

2、增量备份

五、常见的备份方法

(一)物理备份

(二)使用专用备份工具

(三)通过启用二进制日志增量备份

(四)第三方工具备份

(五)注意事项

六、备份

(一)完整备份

1、打包数据库文件备份

1.1、位置

1.2、备份

1.3、还原

2、备份工具备份

2.1、备份

2.1.1、mysqldump

2.2、还原

2.2.1、source

2.2.2、mysql

(二)增量备份

1、使用完全备份时,备份与恢复的时间过长

2、增量备份就是备份自上一次备份之后增加的或改变的文件内容

3、特点:

3.1、没有重复数据,备份量不大,时间短

3.2、恢复麻烦,需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复

3.3、MySQL没有提供直接的增量备份办法,可以通过MySQL提供的二进制日志(binary logs(binlog))间接实现增量备份

4、MySQL二进制日志对备份的意义

4.1、二进制日志保存了所有更新或者可能更新数据库的操作。

4.2、二进制日志在启动MySQL服务器后开始记录,并在文件达到max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件。

5、开启二进制日志备份功能

5.1、MySQL的配置文件的[mysqld]项中加入 log-bin=文件存放路径/文件前缀,如 log-bin=mysql-bin,然后重启mysqld服务。默认此配置存在。

5.2、使用mysqld --log-bin=文件存放路径/文件前缀 重新启动mysqld服务每周选择服务器负载较轻的时间段,或者用户访问较少的时间段进行备份

6、增量恢复

6.1、应用场景

6.2、方法

6.2.1、一般恢复

6.2.2、基于时间点的恢复

6.2.3、从某个时间点到日志结尾的恢复

6.2.4、从某个时间点到某个时间点的恢复

6.2.5、基于位置的恢复

(三)实验案例


一、概述

       数据库备份是指将数据库中的数据、表格、视图、存储过程、触发器等信息备份到另一个地方,以便在数据库丢失或损坏时进行恢复。数据库备份是数据库管理中必不可少的一项工作,通过备份可以帮助恢复数据,减少数据丢失的风险。

二、数据备份的重要性

    备份的主要目的是灾难恢复,备份还可以测试应用,回滚数据修改,查询历史数据,审计等。

三、造成数据丢失的原因

        数据库可能因为硬件故障、软件故障、恶意攻击、人为错误等导致数据丢失。备份可以帮助恢复数据,减少数据丢失的风险。

1、程序错误

        数据库中的数据可能因为病毒感染、错误操作、磁盘错误等原因而损坏,导致无法正常使用。

2、人为错误

       人为错误是数据库中数据丢失和损坏的常见原因。例如,错误的删除操作、误操作、错误的数据导入等。备份可以提供一个备份版本,可以恢复到之前的数据库状态。

3、运算失败

4、磁盘故障

5、灾难(如火灾、地震)和盗窃

       自然灾害、火灾、洪水等不可预测事件可能导致数据库的物理损坏或无法访问。备份可以在这些情况下帮助恢复数据,确保业务的连续性。

四、备份类型

(一)物理与逻辑角度

1、物理备份

       物理备份是指将整个数据库或者文件系统的完整副本复制到另一个存储介质上,包括文件、目录、数据库表、索引等等。物理备份一般是通过文件级别或者块级别的复制来实现的,可以在恢复时直接将备份数据复制回原始位置。

1.1、冷备份

       冷备份是在数据库或系统关闭的情况下进行的备份。冷备份会暂停数据库的运行,并将数据库文件复制到另一个存储介质上。冷备份速度快,占用的系统资源少,但是会中断正常运行的业务。

1.2、热备份

       热备份是在数据库或系统正常运行的情况下进行的备份。热备份通常使用数据库自带的备份工具或者第三方备份软件,可以实时备份数据库的变更,不影响业务的运行。热备份速度较慢,但是可以保证业务的连续性。

2、逻辑备份

       逻辑备份是以逻辑方式备份数据库中的数据,备份的是逻辑对象(如表、视图、存储过程等)的备份,表示为逻辑数据库结构(create database、 create table等语句)、内容(insert语句或分割文本文件)的信息的定义和数据。逻辑备份一般通过导出数据库的SQL语句或者使用备份工具来实现。逻辑备份的恢复过程相对较慢,但是可以选择性地恢复特定的数据。逻辑备份适用于跨数据库平台或者需要数据筛选的场景。对数据库逻辑组件(如表等数据库对象)

(二)数据库备份策略角度

1、完整备份

        完整备份指的是备份整个数据库的所有信息,包括数据库文件中所有的数据、表、视图、存储过程、触发器等。一般来说,完整备份是备份最全面、可靠的方式,但备份文件体积较大,备份时间也相对较长

2、增量备份

        增量备份指的是在完整备份的基础上,每隔一定时间备份新增的数据或修改的数据。这种备份方式可以节省备份时间和备份文件的空间,但需要配合特定软件或命令进行

五、常见的备份方法

(一)物理备份

    物理冷备份时需要在数据库处于关闭状态下,能够较好的保证数据库的完整性。物理冷备份以用于非核心业务,这类业务都允许中断,物理冷备份的特点就是速度快,恢复时也是最为简单的,通过直接打包数据库文件夹(/usr/local/mysql/data)来实现备份。

(二)使用专用备份工具

    mysqldump

    mysqlhotcopy

(三)通过启用二进制日志增量备份

    MySQL支持增量备份,进行增量备份时必须启用二进制日志。二进制日志文件为用户提供复制。对执行备份点后进行的数据库更改所需的信息进行备份。如果进行增量备份(包含上次完全备份或增量备份以来发生的数据修改),需要刷新二进制日志。

(四)第三方工具备份

    Percona XtraBackup是一个免费的MySQL热备份软件,支持在线备份innodb和XtraDB,也可以支持MySQL表备份。

(五)注意事项

    定期备份,指定备份计划,严格遵守

    除了完全备份之外,开启binlog日志功能很重要

    使用统一的、容易理解的备份名称,推荐使用库名或者表名加上时间的命名规则

六、备份

(一)完整备份

1、打包数据库文件备份

1.1、位置

            源码包安装的MySQL的位置/usr/local/mysql/data/

            rpm包或yum安装的的位置/var/lib/mysql

1.2、备份

            在数据库中创建数据表,并写入数据

create database emm;

use emm;
create table students(
编号 int not null,
姓名 varchar(20) not null,
性别 char(10) not null
)character set utf8mb4 collate utf8mb4_unicode_ci;
INSERT INTO students (编号, 姓名,性别) VALUES ('1','张三', '男'),
('2','李四', '女'),
('3','王五', '男'),
('4','赵六', '男'),
('5','小明', '男'),
('6','小帅', '男'),
('7','小美', '女'),
('8','小红', '女'),
('9','大明', '男'),
('10','大帅', '男'),
('11','大美', '女'),
('12','大红', '女');

select * from students;

 

            停止数据库服务

systemctl stop mysqld

 

            按照特定格式对数据库目录进行备份

tar czf mysql_all-$(date +%F).tar.gz /var/lib/mysql/*

1.3、还原

            创建还原目录

mkdir restore

            模拟元数据丢失

             创建备份目录

mkdir bak

  将/var/lib/mysql/* 移动到bak目录下

mv /var/lib/mysql/* ~/bak/

            将解压之后的数据还原至原目录

tar xf mysql_all-2023-07-27.tar.gz -C restore/

cd /var/lib/mysql/
mv ~/restore/var/lib/mysql/* /var/lib/mysql/

            启动服务

systemctl start mysqld

             登录查看 

2、备份工具备份

2.1、备份

            工具

2.1.1、mysqldump

            对单个库进行完全备份

mysqldump -u用户名 -p[密码] [选项] --databases [数据库名] > /备份路径/备份文件名

mysqldump -uroot -p123123 --databases emm > /root/mysql-bak-$(date +%F).sql

 警告的意思是: 在命令行界面上使用明文密码可能存在安全隐患。

            对多个库进行完全备份

mysqldump -u用户名 -p[密码] [选项] --databases 库名1 [库名2]…… > /备份路径/备份文件名

mysqldump -uroot -p --databases emm aaa wjy > /root/mysql-bak-$(date +%Y-%m-%d_%H:%M).sql

             对所有库进行完全备份

mysqldump -u用户名 -p[密码] [选项] --opt --all-databases > /备份路径/备份文件名

mysqldump -uroot -p --opt --all-databases > /root/mysql-bak-$(date +%Y-%m-%d_%H:%M).sql

             对表进行完全备份

mysqldump -u用户名 -p[密码] [选项] 数据库名 表名 > /备份路径/备份文件名

              对表的结构进行备份

mysqldump -u用户名 -p[密码] -d 数据库名 表名 > /备份路径/备份文件名

mysqldump -uroot -p -d emm students > /root/mysql-bak-$(date +%Y-%m-%d_%H:%M).sql

2.2、还原

            工具

2.2.1、source

                    登录mysql 数据库执行source  备份sql脚本路径

登录mysql查看数据库列表

​mysql -uroot -p123123
show databases;
​

 备份wjy数据库

mysqldump -uroot -p123123 --databases wjy > /root/wjy.sql

 登录MySQL数据库,删除wjy库,查看

mysql]# mysql -uroot -p123123

drop database wjy;

show databases;

source /root/wjy.sql

 

show databases;

2.2.2、mysql

                    mysql -u用户名 -p[密码] < 库备份脚本的路径

登录mysql查看数据库列表

mysql -uroot -p123123
show databases;

 备份emm数据库

mysqldump -uroot -p123123 --databases emm > /root/mysql-bak-$(date +%F).sql

删除数据库并查看数据库 

drop database emm;
show databases;

 使用命令恢复备份

mysql -uroot -p < /root/mysql-bak-2023-07-27.sql 

 登录数据库查看验证

                     mysql -u用户名 -p[密码] 库名 < 表备份脚本的路径

mysql -uroot -p emm < mysql-bak-2023-07-27_19:45.sql

(二)增量备份

1、使用完全备份时,备份与恢复的时间过长

2、增量备份就是备份自上一次备份之后增加的或改变的文件内容

3、特点:

3.1、没有重复数据,备份量不大,时间短

3.2、恢复麻烦,需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复

3.3、MySQL没有提供直接的增量备份办法,可以通过MySQL提供的二进制日志(binary logs(binlog))间接实现增量备份

4、MySQL二进制日志对备份的意义

4.1、二进制日志保存了所有更新或者可能更新数据库的操作。

4.2、二进制日志在启动MySQL服务器后开始记录,并在文件达到max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件。

vim /etc/my.cnf

 

5、开启二进制日志备份功能

5.1、MySQL的配置文件的[mysqld]项中加入 log-bin=文件存放路径/文件前缀,如 log-bin=mysql-bin,然后重启mysqld服务。默认此配置存在。

vim /etc/my.cnf

 

5.2、使用mysqld --log-bin=文件存放路径/文件前缀 重新启动mysqld服务每周选择服务器负载较轻的时间段,或者用户访问较少的时间段进行备份

6、增量恢复

6.1、应用场景

            人为的SQL语句破坏了MySQL数据库

            在进行下一次全备之前发生系统故障导致数据库丢失

            在主从架构中,主库数据发生了故障,保证从库数据一致性

6.2、方法

6.2.1、一般恢复

                备份的二进制日志内容全部恢复

                格式: mysqldbinlog [--no-defaults] 增量备份文件 | mysql -u用户名 -p密码

6.2.2、基于时间点的恢复

                便于跳过某个发生错误的时间点实现数据恢复

                格式:从日志开头截止到某个时间点的恢复:

                mysqlbinlog [--no-defaults] --stop-datetime=’年-月-日 小时:分钟:秒‘ 二进制日志 | mysql -u用户名 -p密码

6.2.3、从某个时间点到日志结尾的恢复

                mysqlbinlog [--no-defaults] --start-datetime=’年-月-日 小时:分钟:秒‘ 二进制日志 | mysql -u用户名 -p密码

6.2.4、从某个时间点到某个时间点的恢复

                mysqlbinlog [--no-defaults] --start-datetime=’年-月-日 小时:分钟:秒‘ --stop-datetime=’年-月-日 小时:分钟:秒‘ 二进制日志 | mysql -u用户名 -p密码

6.2.5、基于位置的恢复

                可能在同一时间点既有错误的操作也有正确的操作,基于位置进行恢复更加准确

                mysqlbinlog --stop-position=‘操作 id‘ 二进制日志 | mysql -u用户名 -p密码

                mysqlbinlog --start-position=‘操作 id‘ 二进制日志 | mysql -u用户名 -p密码

(三)实验案例

1、要求:

北京****有限公司的用户信息数据库为client,用户资费数据表为user_info

请为该公司每周进行完全备份

每天为该公司进行增量备份

新增加的用户信息如表所示

 创建数据库

create database client;

创建数据表

use client;
create table user_info(
身份证 char(20) not null,
姓名 char(20) not null,
性别 char(4),
用户ID号 char(10) not null,
资费 int(10)
) DEFAULT CHARSET=utf8;

 

  添加数据

insert into user_info values
('000000006','张三','男','016','10'),
('000000007','李四','女','017','91'),
('000000008','王五','女','018','23');

查看数据表

select * from user_info;

2、进行一次完全备份

mkdir /mysql_bak

 进行备份

mysqldump -uroot -p123123 client user_info > /mysql_bak/client_userinfo-$(date +%F).sql

 查看验证

 编辑配置文件添加内容

vim /etc/my.cnf

 需添加的内容

server-id=1
log-bin=mysql-bin

 重启服务

systemctl restart mysqld

3、进行一次日志回滚(生成新的二进制日志)

4、将当前日志刷新到磁盘中,并创建新的日志文件

mysqladmin -uroot -p flush-logs

5、添加新的数据

use client;

insert into user_info values
('000000009','赵六','男','019','37'),
('000000010','孙七','男','020','36');

查看表格信息

select * from user_info;

6、进行增量备份

mysqladmin -uroot -p123123 flush-logs

 查看验证 

7、查看新操作的日志记录

mv /var/lib/mysql/mysql-bin.000002 /mysql_bak/
mysqlbinlog -v /mysql_bak/mysql-bin.000002

8、模拟误操作删除数据表

drop table client.user_info;

 

9、恢复完全备份

mysql -uroot -p123123 client < /mysql_bak/client_userinfo-2023-07-27.sql 

查看数据表

select * from client.user_info;

 

恢复增量备份

mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000002 | mysql -uroot -p123123

进入数据库查看

mysql -uroot -p123123

select * from client.user_info;

 

 基于时间点的增量恢复

先删除数据表再进行查看

drop table client.user_info;
select * from client.user_info;

 恢复初始完整备份

mysql -uroot -p123123 client < /mysql_bak/client_userinfo-2023-07-27.sql 

解析和显示二进制日志文件中

mysqlbinlog -v /mysql_bak/mysql-bin.000002

 在这里可以看出日志生成事件编号起始为293,结束事件事件为454

恢复事件为454的日志

mysqlbinlog --no-defaults --start-datetime="2023-07-27 22:14:33" /mysql_bak/mysql-bin.000002 | mysql -uroot -p123123

mysqlbinlog是一个用于解析MySQL二进制日志文件的工具,它可以读取MySQL二进制日志文件的内容,并以可读的方式输出。

--no-defaults选项表示不使用默认的配置文件。

--start-datetime选项指定了要开始解析的时间点,这里是2023年7月27日22点14分33秒。

/mysql_bak/mysql-bin.000002是要解析的二进制日志文件的路径和文件名。

|是一个管道符号,将mysqlbinlog的输出作为输入传递给后面的mysql命令。

mysql命令用于执行解析后的MySQL语句,-uroot -p123123表示使用用户名root和密码123123登录MySQL数据库。 

 基于位置的恢复

mysql -uroot -p123123

drop table client.user_info;

 恢复一下最初的完整备份

mysql -uroot -p123123 client < /mysql_bak/client_userinfo-2023-07-27.sql 

 查看

mysqlbinlog -v /mysql_bak/mysql-bin.000002

mysqlbinlog --no-defaults --start-position='293' /mysql_bak/mysql-bin.000002 | mysql -uroot -p123123

mysqlbinlog --no-defaults --stop-position='485' /mysql_bak/mysql-bin.000002 | mysql -uroot -p123123

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能-Dlib+Python实现人脸识别(人脸识别篇)

人脸识别流程 人脸检测,人脸数据提取:首先是检测到人脸保存人脸数据:可以保存到mysql数据库中mysql数据库连接mysql数据库安装mysql数据库操作设置人脸数据标签:(人脸名字),保存到数据库打开摄像头,检测到人脸,提取人脸数据:人脸数据与数据库中的数据对比,1、人脸检…

子组件未抛出事件 父组件如何通过$refs监听子组件中数据的变化

我们平时开发项目会使用一些比较成熟的组件库, 但是在极小的情况下,可能会出现我们需要监听某个属性的变化,使我们的页面根据这个属性发生一些改变,但是偏偏组件库没有把这个属性抛出来,当我们使用watch通过refs监听时,由于生命周期的原因还不能拿到,这时候我们可以这样做,以下…

03-高阶导数_导数判断单调性_导数与极值

高阶导数 前面学的是一阶导数&#xff0c;对导数再次求导就是高阶导数&#xff0c;二阶和二阶以上的导数统称为高阶导数。 导数与函数单调性的关系 极值定理 导数为我们寻找极值提供依据&#xff0c;对于可导函数而言&#xff0c;因为在极值位置必然有函数的导数等于 0。 …

深入篇【C++】手搓模拟实现list类(详细剖析底层实现原理)模拟实现正反向迭代器【容器适配器模式】

深入篇【C】手搓模拟实现list类(详细剖析底层实现原理&#xff09;&& 模拟实现正反向迭代器【容器适配器模式】 Ⅰ.迭代器实现1.一个模板参数2.两个模板参数3.三个模板参数 Ⅱ.反向迭代器实现1.容器适配器模式 Ⅲ.list模拟实现1.定义结点2.封装结点3.构造/拷贝4.迭代器…

【Python】Web学习笔记_flask(1)——模拟登录

安装flask pip3 install flask 第一部分内容&#xff1a; 1、主页面输出hello world 2、根据不同用户名参数输出用户信息 3、模拟登录 from flask import Flask,url_for,redirectappFlask(__name__)app.route(/) def index():return hello worldapp.route(/user/<uname…

linux_进程状态

目录 一. 概念铺设 状态是什么&#xff1f; 传统操作系统的状态转换图 二. 传统操作系统状态 1. 运行 2. 阻塞 3. 挂起 三. linux 中的进程状态 1. 总体介绍 2. R 3. S 4. D kill -9 D vs S 5. T kill T vs S 6. Z 什么是僵尸状态&#xff1f; 僵尸进程的危害 …

hadoop部署配置

端口名称 Hadoop2.x Hadoop3.x NameNode内部通信端口 8020 / 9000 8020 / 9000/9820 NameNode HTTP UI 50070 9870 MapReduce查看执行任务端口 8088 8088 历史服务器通信端口 19888 19888 端口名称Hadoop2.xHadoop3.xNameNode内部通信端口8020 / 90008020 / 9000/9820NameNode…

延长周末,获得高质量休息:工作与学习党的生活策略

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【Linux】多线程的补充

1 线程安全的单例模式 1.1 什么是单例模式 单例模式是一种 "经典的, 常用的, 常考的" 设计模式. 1.2 什么是设计模式 IT行业这么火, 涌入的人很多. 俗话说林子大了啥鸟都有. 大佬和菜鸡们两极分化的越来越严重. 为了让菜鸡们不太拖大佬的后腿, 于是大佬们针对一些…

从源码角度配合网络编程函数API 分析下 三握手四挥手都做了什么

首先我们先说下网络编程API&#xff1a; 数据在网络上通信&#xff0c;通信的双方一个是 客户端&#xff0c; 一个是 服务器 更具体来说&#xff0c;不是 客户端和服务器这两个机器在 经由互联网 进行通信&#xff0c; 而是 客户端上的某一进程 与 服务器端的某一进程 进…

Vue2 第七节 Vue监测数据更新原理

&#xff08;1&#xff09;Vue会监视data中所有层次的数据 &#xff08;2&#xff09;如何监测对象中的数据 通过setter实现监视&#xff0c;且要在new Vue时传入要监测的数据对象中后追加的属性&#xff0c;Vue默认不做响应式处理如果要给后添加的属性做响应式&#xff0c;使…

【笔记】PyTorch DDP 与 Ring-AllReduce

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 文内若有错误&#xff0c;欢迎指出&#xff01; 今天我想跟大家分享的是一篇虽然有点老&#xff0c;但是很经典的文章&#xff0c;这是一个在分布式训练中会用到的一项技术&#xff0c; 实际上叫ringallreduce。 …

Hyper-v 设置静态IP 搭建集群

背景 最近想在本机WIN11上创建几个Centos用于做几个试验&#xff0c;之前一直用VMWare&#xff0c;需要安装额外的软件&#xff0c;正好win自带虚拟机功能&#xff0c;只需要在功能中安装Hyper-v就可以使用。 新建虚拟机 虚拟机交换器 Hyper-V 虚拟交换机是基于软件的第 2 层…

P5691 [NOI2001] 方程的解数

题目 思路 暴搜显然会TLE&#xff0c;所以这时候就应该请出DFS的伙伴——折半搜索&#xff08;meet in the middle&#xff09;了 折半搜索的思路就是先搜完后一半后&#xff0c;借助这一半的数据来搜索前一半&#xff0c;效率是原来的2倍 这个题怎么才能折半搜索呢&#xff1…

链表OJ题目1 (移除链表元素)

力扣&#xff08;链接放这里喽&#xff09; 先贴代码再做讲解&#xff1a; struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* cur head;struct ListNode* tail NULL;while(cur){if(cur->val val){if(cur head){head head->next…

【点云处理教程】01如何创建和可视化点云

一、说明 本文是系列教程&#xff0c;专门介绍点云处理的全流程&#xff0c;是一个入门工具。“点云处理”教程对初学者友好&#xff0c;我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。 第1条&#xff1a;点云处理简介文章2&#xff1a;在Python中从深度图…

Python入门【可变参数、lambda表达式和匿名函数、eval()函数、递归函数、嵌套函数(内部函数)、 nonlocal关键字】(十二)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

怎么对XMind思维导图加密?

在现代社会中&#xff0c;信息安全变得越来越重要。对于那些使用XMind思维导图来组织和管理重要信息的人来说&#xff0c;保护思维导图中的内容免受未经授权的访问变得至关重要。本文将介绍如何加密XMind思维导图&#xff0c;以确保您的信息安全。 什么是XMind思维导图&#x…

Qt中postevent造成内存泄漏问题的通用解决方案

在Qt中由QCoreApplication统一管理Qt事件的收发和销毁,其中sendEvent为阻塞式发送,用于单线程的事件发送;postevent为非阻塞式发送,构造事件的线程和接受事件的线程可以为两个线程。 最近在做一个个人项目ShaderLab 需要绘制OpenGL实时渲染的图像,由于OpenGL渲染基本都放…

Flowable-服务-消息任务

文章目录 定义图形标记XML内容集成Rabbitmq引入pom包配置rabbitmq 操作界面 定义 Mq 任务不是 BPMN 2.0 规范定义的官方任务&#xff0c;在 Flowable 中&#xff0c;Mq 任务是作为一种特殊的服务 任务来实现的&#xff0c;主要做Mq消息发送。 图形标记 由于 Mq 任务不是 BPM…