MYSQL---主从同步概述与配置

news2024/11/15 17:17:46

一、MYSQL主从同步概述

1、什么是MySQL主从同步?

实现数据自动同步的服务结构

主服务器(master): 接受客户端访问连接
从服务器(slave):自动同步主服务器数据

2、主从同步原理

Maste:启用binlog 日志
Slave:Slave_IO: 复制master主机binlog 日志文件的SQL命令到本机的relay-log(中继日志) 文件里。
Slave_SQL: 执行本机 relay-log(中继日志) 文件里的SQL语句,实现与 Master 数据一致。

Master(主服务器):

1》开启binlog日志,记录所有除查询以外的SQL命令

Slave(从服务器):

1》从服务器上的I/O thread(读写线程) 负责读取主服务器binlog日志中的SQL命令,并将其写入到 Relay log(中继日志中)
2》从服务器中的SQL thread(SQL 线程)读取中继日志中的SQL命令,并将其写入到Slave的数据库中

3、主从同步结构模式

基本应用
单向复制:一主 <—— 一从
扩展应用
一主多从:从 <—— 主 ——> 从
链式复制:主 <—— 从 <—— 从
互为主从:主 <——> 主

4、MySQL主从同步配置

拓扑结构

5、实施

步骤一:根据host50克隆虚拟机出host51,配置IP地址为192.168.4.51,主机名为host51,删除51,52上面多余的数据库,只保留默认的四个库

[root@host51 ~]# mysql -uroot -p123qqq...A
mysql> drop database bbsdb;
[root@host52 ~]# mysql -uroot -p123qqq...A
mysql> drop database db4;

步骤二:host51配置主服务器

# 修改主配置文件,开启binlog日志
[root@host51 ~]# vim /etc/my.cnf
[mysqld]
#binlog_format="mixed"	# 加上注释
server_id=50				#指定id号,默认与IP地址的主机位相同
log_bin=master51			#指定binlog日志名,日志文件在/var/lib/mysql下

步骤三:重启数据库服务,让配置生效

[root@host51 ~]# systemctl restart mysqld
# 用户授权,给replication slave复制数据的权限,授权用户为: repluser
[root@host51 ~]# mysql -uroot -p123qqq...A
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
mysql> show master status;

步骤四:host52配置从服务器

# 修改主配置文件,指定server_id号
[root@host52 ~]# vim /etc/my.cnf
 [mysqld]
server_id=52          #指定id号,默认与IP地址的主机位相同
[root@host52 ~]# systemctl restart mysqld
# 指定主服务器信息
mysql> change master to master_host="192.168.4.51", master_user="repluser", master_password="123qqq...A", master_log_file="master51.000001", master_log_pos=441;

步骤五:启动从服务器

mysql> start slave;		
mysql> show slave status\G;		#确认IO线程、SQL线程都是 Yes 状态

如果IO线程为NO,错误提示如下

这是因,auto.cnf 存放的是主服务器的uuid号 ,因为是克隆出的虚拟机,uuid号都一样,会进行冲突,可以任意修改其中一个或多个字符,重启数据库服务即可

[root@host52 ~]# vim /var/lib/mysql/auto.cnf
[auto]
server-uuid=d45877cc-f4ab-11ea-b2a1-000c291f7055
[root@host52 ~]# systemctl restart mysqld

步骤六:host51:测试主从同步

[root@host51 ~]# mysql -uroot -p'123qqq...A'
mysql> create database db1;
mysql> create table db1.user (name char(10));
mysql> insert into db1.user values("tom");

步骤七:在host52上查看

[root@host52 ~]# mysql -uroot -p'123qqq...A'
mysql> show databases;
mysql> select * from db1.user;

相关文件

存放在数据库目录下/var/lib/mysql/
删除文件,重启数据库服务,可把主机恢复为独立的数据库服务器;

记录主服务器的信息

[root@host52 ~]# cat /var/lib/mysql/master.info

查看中继日志信息

# host52-relay-bin.000001 是中继日志文件:记录从主服务器拷贝过来的sql命令
# host52-relay-bin.index  是中继日志索引文件
[root@host52 ~]# ls /var/lib/mysql/host52*
# 查看中继日志文件内容
[root@host52 ~]# cd /var/lib/mysql
[root@host52 mysql]# cat relay-log.info 
7
./host52-relay-bin.000004		#本机正在使用的中继日志文件
319							#中继日志记录主服务器sql命令的偏移量
master51.000001				#中继日志从哪个文件中拷贝sql命令(主服务器)
441                         #此为主服务器最近的binlog日志的偏移量
# 查看中继日志索引文件,有几个中继日志文件,就记录几条
[root@host52 ~]# cd /var/lib/mysql
[root@host52 mysql]# cat host52-relay-bin.index

6、配置MySQL一主多从:解决从服务器宕机之后,无法备份数据问题

拓扑结构

步骤一:准备数据库host53,可以直接用之前的host53,删除创建数据库,保留默认的四个库

[root@host53 ~]# mysql -uroot -p123qqq...A
mysql> show databases;
mysql> drop database db4;

步骤二:没有配置之前,要确保从与主服务器数据一致

host51:安装innobackupex相关软件包

[root@host52 ~]# scp libev-4.15-1.el6.rf.x86_64.rpm  percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm 192.168.4.51:/root/
[root@host51 ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm 
[root@host51 ~]# yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
[root@host51 ~]# innobackupex --user root --password '123qqq...A' --slave-info  /allbak1  --no-timestamp
[root@host51 ~]# scp -r /allbak1/ 192.168.4.53:/opt/

host53使用innobackupex恢复数据

[root@host53 ~]# systemctl stop mysqld
[root@host53 ~]# rm -rf /var/lib/mysql/*
[root@host53 ~]# innobackupex --apply-log  /root/allbak1/		#准备恢复数据
[root@host53 ~]# innobackupex --copy-back  /root/allbak1/			#恢复数据
[root@host53 ~]# chown -R mysql:mysql /var/lib/mysql
[root@host53 ~]# systemctl start mysqld
[root@host53 ~]# mysql -uroot -p'123qqq...A' -e "show databases"
# xtrabackup_binlog_info 文件记录的是binlog日志文件名和偏移量
# 此偏移量和主服务器的偏移量一致,从服务器同步数据时从这个偏移量开始同步
# 可以查看host51的binlog日志状态,偏移量相同
[root@host53 ~]# cat /opt/alldb/xtrabackup_binlog_info 
master51.000001	1020

步骤三:配置从服务器

# 修改主配置文件,指定server_id号
[root@host53 ~]# vim /etc/my.cnf
[mysqld]
server_id=53			#指定id号,默认与IP地址的主机位相同
[root@host53 ~]# vim /var/lib/mysql/auto.cnf
[auto]
server-uuid=d45877cc-ffab-11ea-b2a1-000c291f7055
[root@host53 ~]# systemctl restart mysqld
[root@host53 ~]# mysql -uroot -p123qqq...A

步骤四:指定主服务器信息

mysql> change master to master_host="192.168.4.51", master_user="repluser", master_password="123qqq...A", master_log_file="master51.000001", master_log_pos=1020;
mysql> start slave;				#启动slave
mysql> show slave status;		#查看从服务器状态信息
host51:插入数据
[root@host51 ~]# mysql -uroot -p'123qqq...A'
mysql> insert into db1.user values("tomA"),("tomB"),("tomC");

步骤五:host53测试主从同步

[root@host53 ~]# mysql -uroot -p'123qqq...A'
mysql> select * from db1.user;

二、MYSQL主从从结构

配置MYSQL主从从结构

1、主从从结构

主从从结构优势:
1》【host55】是【host54】的从服务器,【host54】是【host53】的从服务器;
2》当【host53】宕机以后,用户访问的是从服务器【host54】的数据库;
3》当【host54】宕机以后,用户访问的就是从服务器【host55】的数据库;

2、主从从结构实验环境准备,根据host50克隆虚拟机host54和host55主机,配置IP如下,并还原数据库默认的四个库

主服务器     主机名:host53      IP地址: 192.168.4.53
从服务器     主机名:host54      IP地址: 192.168.4.54
从服务器     主机名:host55      IP地址: 192.168.4.55

3、将host53恢复成独立的数据库服务器

[root@host53 ~]# cd /var/lib/mysql
[root@host53 mysql]# rm -rf master.info 			#删除连接主服务器的信息文件
[root@host53 mysql]# rm -rf host53-relay-bin.0*		#删除所有的中继日志文件,存放从主服务器拷贝过来的sql命令
[root@host53 mysql]# rm -rf host53-relay-bin.index 	#删除中继日志的索引文件,按顺序记录所有的中继日志文件名
[root@host53 mysql]# rm -rf relay-log.info 			#删除中继日志文件,记录中继日志信息
[root@host53 mysql]# systemctl restart mysqld

4、测试

[root@host53 ~]# mysql -uroot -p'123qqq...A'
mysql> show slave status;		#查看从服务器状态信息,为Empty,已经还原
mysql> drop database db1;		#删除db1库
mysql> exit

5、host53配置主服务器

修改主配置文件,开启binlog日志
[root@host53 ~]# vim /etc/my.cnf
[mysqld]
server_id=53
log_bin=master53
[root@host53 ~]# systemctl restart mysqld
[root@host53 ~]# mysql -uroot -p123qqq...A

这一次的授权不需要操作,因为之前53主机在做从库的时候已经同步用户了

mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A"; 
mysql> select user,host from mysql.user;
mysql> show grants for repluser@"%";
mysql> show master status;

6、host54配置从服务器

修改配置文件、用户授权、指定主库信息、启动slave进程
修改主配置文件,指定server_id号
log_slave_updates 必须开启级联复制功能,因为【host54】同步数据是从【host53】的binlog日志中获取的,【host54】并没有直接执行sql命令,所以在【host54】的binlog日志中并没有sql命令,那么【host55】也就无法同步【host54】中的数据;而开启级联复制功能,则允许【host55】同步【host54】从【host53】同步过来的数据

[root@host54 ~]# vim /etc/my.cnf
[mysqld]
#binlog_format="mixed"
server_id=54
log_bin=master54
log_slave_updates		#允许级联复制
[root@host54 ~]# vim /var/lib/mysql/auto.cnf	# auto.cnf 存放的是主服务器的uuid号 因为是克隆出的虚拟机,uuid号都一样,会冲突可以任意修改其中一个或多个字符,重启数据库服务即可
[auto]
server-uuid=d45877cc-f4ab-12ea-b2a1-000c291f7055
[root@host54 ~]# systemctl restart mysqld

7、连接数据库,指定主服务器信息

[root@host54 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.168.4.53", master_user="repluser", master_password="123qqq...A",master_log_file="master53.000001",master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;

8、host54:从服务器【host55】添加授权用户

mysql> grant replication slave on *.* to jim@"%" identified by "123qqq...A";
mysql> show master status;

9、host55配置从服务器

[root@host55 ~]# vim /etc/my.cnf
[mysqld]
#binlog_format="mixed"
server_id=55
[root@host55 ~]# vim /var/lib/mysql/auto.cnf	
[auto]
server-uuid=d45877cc-f4ab-12ea-b2a1-000c291f7055
[root@host55 ~]# systemctl restart mysqld

10、指定主服务器信息

[root@host55 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.168.4.54",master_user="jim", master_password="123qqq...A",master_log_file="master54.000001",master_log_pos=1554;
mysql> start slave;
mysql> show slave status\G;

11、测试主从从同步,在host53上建库,建表,插入记录

[root@host53 ~]# mysql -uroot -p'123qqq...A'
mysql> create database bbsdb;
mysql> create table bbsdb.user(name char(11));
mysql> insert into bbsdb.user values("bob");
mysql> select * from bbsdb.user;

12、在host54上查看验证数据

[root@host54 ~]# mysql -uroot -p'123qqq...A'
mysql> select * from bbsdb.user;

13、在host55上查看验证数据

[root@host55 ~]# mysql -uroot -p'123qqq...A'
mysql> select * from bbsdb.user;

三、复制模式

复制模式介绍

异步复制 (默认的复制模式):Asynchronous replication
主服务器执行完一次事务后,立即将结果返给客户端,不关心从服务器是否已经同步数据。

案例:【host50】(主服务器) <—— 【host51】(从服务器)

用户在【host50】(主服务器)上执行插入,更新,删除等SQL命令时,【host50】(主服务器)直接将结果返回给用户,不关心【host51】(从服务器)是否同步数据成功
优点:响应速度快,用户体验很好;
缺点:主服务器宕机后,有可能会存在从服务器数据丢失的情况;

半同步复制:Semisynchronous replication
主服务器在执行完一次事务后,等待至少一台从服务器同步数据完成,才将结果返回给客户端。

案例:【host50】(主服务器) <—— 【host51】(从服务器)

用户在【host50】(主服务器)上执行插入,更新,删除等SQL命令时,【host50】(主服务器)不会立刻将结果返回给用户,而是等待至少一个从服务器将数据同步写入到本机的数据库后,才将结果返回给用户

优点:主服务器宕机后,至少有一台从服务器拥有和主服务器相同的数据,数据安全度高;
缺点:响应速度下降,用户体验度下降;

配置半同步复制 (主从服务器都要配置)

主服务器     主机名:host53      IP地址: 192.168.4.53
从服务器     主机名:host54      IP地址: 192.168.4.54
从服务器     主机名:host55      IP地址: 192.168.4.55

命令行加载模块

host53主服务器命令行加载半同步复制的master模块
mysql> show databases;
mysql> desc information_schema.PLUGINS;		#查看默认库information_schema 下PLUGINS表(模块表)的表结构
加载 master 模块,rpl_semi_sync_master模块类型,semisync_master.so模块名称
mysql> install plugin rpl_semi_sync_master SONAME "semisync_master.so";
mysql> select PLUGIN_NAME,PLUGIN_STATUS from information_schema.PLUGINS where PLUGIN_NAME  like "%semi%";

host55安装slave模块

mysql>  install plugin rpl_semi_sync_slave SONAME "semisync_slave.so";  
host54因为是即做主又做从,所以要安装 matser和slave模块
mysql> install plugin rpl_semi_sync_master SONAME "semisync_master.so";
mysql> install plugin rpl_semi_sync_slave SONAME "semisync_slave.so";
mysql> select PLUGIN_NAME,PLUGIN_STATUS from information_schema.PLUGINS where PLUGIN_NAME  like "%semi%";

启用模块

host53:模糊查询半同步复制模块是否开启
mysql> show variables like "%semi%";
mysql> set global rpl_semi_sync_master_enabled=1;		#全局设置,开启半同步复制模块
mysql> show variables like "%semi%";					#on开启

host54启动半同步复制的master和slave模块

mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> show variables like "%semi%";

host55:启动半同步复制的slave模块

mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> show variables like "%semi%";

永久配置

主服务器永久安装和启用半同步复制的master模块

[root@host53 ~]# vim /etc/my.cnf
[mysqld]
plugin-load=rpl_semi_sync_master=semisync_master.so    		#加载master模块
rpl_semi_sync_master_enabled=1                        		#启用master模块
[root@host53 ~]# systemctl restart mysqld
[root@host54 ~]# mysql -uroot -p'123qqq...A'
mysql> show variables like "%semi%";

主从服务器永久安装和启用半同步复制的master和slave模块,在host54上操作

[root@host54 ~]# vim /etc/my.cnf
[mysqld]
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"              							#同时加载master和slave模块
rpl_semi_sync_master_enabled=1				#启用master模块
rpl_semi_sync_slave_enabled=1				#启用slave模块
[root@host54 ~]# systemctl restart mysqld
[root@host54 ~]# mysql -uroot -p'123qqq...A'
mysql> show variables like "%semi%";

从服务器永久安装和启用半同步复制的slave模块,在host55上操作

[root@host55 ~]# vim /etc/my.cnf
[mysqld]
plugin-load=rpl_semi_sync_slave=semisync_slave.so    		#加载master模块
rpl_semi_sync_slave_enabled=1                          #启用master模块
[root@host55 ~]# systemctl restart mysqld
[root@host55 ~]# mysql -uroot -p'123qqq...A'
mysql> show variables like '%semi%';

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

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

相关文章

CPU寄存器的分类与Intel 8086 的eax,ebx,ecx,edx

目录 一、CPU中的寄存器分类 1.用户可见寄存器 2.控制和状态寄存器 一、CPU中的寄存器分类 大致分为两类: 一类属于用户可见寄存器&#xff0c;对这类寄存器编程&#xff0c;以及通过优化使CPU因使用这类寄存器&#xff0c;而减少对主存的访问次数&#xff0c; 另一类属于控…

MPRC086444-005对其进行维护和管理,以确保系统的稳定性和可靠性。

​ MPRC086444-005对其进行维护和管理&#xff0c;以确保系统的稳定性和可靠性。 变电站自动化系统优缺点 变电站自动化系统结构 变电站自动化系统优缺点 变电站自动化系统是以计算机技术、自动控制技术及通信技术为核心&#xff0c;对变电站及配电系统各个环节进行自动化控制和…

自动化生成持久化游戏管理器

自动化生成持久化游戏管理器 引言游戏管理器持久化自动化生成游戏管理器Addressables 引言 自动化生成的持久化游戏管理器是一个指通过使用自动化工具和技术来生成游戏的持久化管理器的过程。持久化管理器是负责管理游戏状态的组件&#xff0c;包括存储和检索游戏数据的功能&a…

GPT3 和它的 In-Context Learning

作者 | 太子长琴 整理 | NewBeeNLP 大家好&#xff0c;这里是NewBeeNLP。ChatGPT 的爆火让很多 NLPer 大吃一惊&#xff0c;焦虑感爆棚&#xff0c;它的思路和方法都不复杂&#xff0c;但效果却出奇的好。 我想任何研究成果的爆发都不可能是一蹴而就的&#xff0c;期间必然包含…

【历史上的今天】4 月 18 日:第一款交互式电子游戏;IBM 率先研发兆位芯片;硬件公司 Roland 成立

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 4 月 18 日&#xff0c;在 1955 年的今天&#xff0c;著名物理学家爱因斯坦在美国新泽西州的普林斯顿逝世。爱因斯坦于 1905 年获得物理学博士学位&#xff0c…

vue---双向绑定

目录 1、.sync修饰符-双向绑定 2、v-model修饰符-双向绑定 3、双向绑定原理 vue 中的双向绑定是语法糖。 1、.sync修饰符-双向绑定 . vue是单向数据流的。父组件可以通过prop向子组件传递数据。子组件需要通过自定义事件来将自己的数据变更通知给父组件&#xff0c;我们可以通过…

分布式任务调度系统分析

背景介绍 首先&#xff0c;我们来思考一些几个业务场景&#xff1a; XX 信用卡中心&#xff0c;每月 28 日凌晨 1:00 到 3:00 需要完成全网用户当月的费用清单的生成XX 电商平台&#xff0c;需要每天上午 9:00 开始向会员推送送优惠券使用提醒XX 公司&#xff0c;需要定时执行…

多线程并发编程学习笔记9(小滴课堂)------线程池及Executor框架

它只会使用10个线程。因为我们设置了它的容量。 我们现在把这个队列容量设置为20. 我们可以看到这里它使用了20个线程。但是出了异常&#xff0c;这个后面我们会学习。 我们现在使用一下我们的callable&#xff1a; 一般我们如果是想在线程执行完以后&#xff0c;获得一个返回…

019 - C++ 中的局部静态(local static)

在前几期里&#xff0c;我们了解了static关键字在特定上下文中的含义。 今天我们看一看另一个环境。我们可以在局部作用域中使用 static 来声明一个变量。 这种情况和我们之前看到的两种static有点不同。这次的局部静态 Local static 有更多的含义。 声明一个变量&#xff0…

个人知识库(持续更新中)

打造一个属于自己的知识库 为什么会有这个知识库会记录什么内容基础知识Java核心Java WebMySQL 中间件&工具项目代码资源仿牛客社区Web开发华夏ERP软件 视频资源代码之外持续更新中… 为什么会有这个知识库 作为羊哥的死忠粉&#xff0c;当他谈到个人知识库这个东西的时候…

RS-485 基础知识:何时需要端接,以及如何正确端接

RS-485 网络的许多信号完整性和通信问题都源于端接&#xff0c;这可能是因为缺少端接或端接不正确。在 RS-485 基础知识系列的这一部分&#xff0c;我将讨论何时不需要端接 RS-485 网络&#xff0c;以及在需要端接时如何使用标准&#xff08;并联&#xff09;端接和交流电 (AC)…

【JavaEE】常见的锁策略与CAS的ABA问题

文章目录 1 常见的锁策略1.1 乐观锁与悲观锁1.2 轻量级锁与重量级锁1.3 自旋锁与挂起等待锁1.4 互斥锁与读写锁1.5 可重入锁与不可重入锁1.6 公平锁与非公平锁 2 CAS 操作2.1 CAS 简介2.2 CAS 的应用2.2.1 实现原子类2.2.2 实现自旋锁 3 CAS 的 ABA 问题写在最后 1 常见的锁策略…

Nacos 客户端的服务发现与服务订阅机制的纠缠 - 篇七

Nacos 客户端的服务发现与服务订阅机制的纠缠 - 篇七 历史篇章 &#x1f550;Nacos 客户端服务注册源码分析-篇一 &#x1f551;Nacos 客户端服务注册源码分析-篇二 &#x1f552;Nacos 客户端服务注册源码分析-篇三 &#x1f553;Nacos 服务端服务注册源码分析-篇四 &am…

最新入河排污口设置论证、水质影响预测与模拟、污水处理工艺分析及建设项目入河排污口方案报告书

随着水资源开发利用量不断增大&#xff0c;全国废污水排放量与日俱增&#xff0c;部分河段已远远超出水域纳污能力。近年来,部分沿岸入河排污口设置不合理&#xff0c;超标排污、未经同意私设排污口等问题逐步显现&#xff0c;已威胁到供水安全、水环境安全和水生态安全&#x…

ChatGPT探索系列之五:讨论人工智能伦理问题及ChatGPT的责任

文章目录 前言一、安全二、隐私和道德三、我们应该做什么总结 前言 ChatGPT发展到目前&#xff0c;其实网上已经有大量资料了&#xff0c;博主做个收口&#xff0c;会出一个ChatGPT探索系列的文章&#xff0c;帮助大家深入了解ChatGPT的。整个系列文章会按照一下目标来完成&am…

STM32(十六)正交编码器

一、简介 增量式编码器 增量式编码器也称为正交编码器&#xff0c;是通过两个信号线的脉冲输出来进行数据处理&#xff0c;一个输出脉冲信号就对应于一个增量位移&#xff0c;编码器每转动固定的位移&#xff0c;就会产生一个脉冲信号 通过读取单位时间脉冲信号的数量&#xff…

自动修改文章的软件-自动修改文案原创软件

有没有自动修改文章的软件 修改文章可能是很多人日常工作中必须完成的任务&#xff0c;但一般情况下&#xff0c;这需要人工完成。幸运的是&#xff0c;现在有很多文章修改软件可以帮助我们节省时间和精力。本文将向您介绍一款优秀的修改文章软件&#xff0c;名为147SEO&#…

SLAM论文速递【SLAM—— TwistSLAM:动态环境下的约束SLAM】—4.17(2)

论文信息 题目&#xff1a; Optimization RGB-D 3-D Reconstruction Algorithm Based on Dynamic SLAM 基于动态SLAM的RGB-D三维重建算法优化论文地址&#xff1a; https://ieeexplore.ieee.org/abstract/document/10050782发表期刊&#xff1a; IEEE Transactions on Instru…

Apache POI 实现用Java操作Excel完成读写操作

简介 Apache POI是一个用于操作Microsoft Office格式文件&#xff08;包括xls、docx、xlsx、pptx等&#xff09;的Java API库。POI全称为Poor Obfuscation Implementation&#xff0c;是Apache Software Foundation的一个开源项目。它提供了一组Java API&#xff0c;使得Java程…

LLM_StableDiffusion_studio发布

背景&#xff1a; 从chatgpt发布到现在已经超过半年时间&#xff0c;AGI的势头越来越猛。大家都在做各种的尝试和组合&#xff0c;把chatgpt通用的强大的知识表达和理解能力尝试应用在自己的业务场景。前期也是出现非常多的业务应用&#xff0c;但是主要还是围绕chatgpt本身已…