docker部署mysql主主备份 haproxy代理(swarm)

news2024/10/1 17:34:57

docker部署mysql主主备份 haproxy代理(swarm)

docker部署mysql主主备份

docker部署mysql主主备份(keepalived)跨主机自动切换

docker部署mysql主主备份 haproxy代理(swarm)

1. 环境准备

主机IP
node1192.168.56.100
node2192.168.56.101
  • 互开防火墙
  • 默认安装了docker docker-compose
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.100" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.101" accept"
firewall-cmd --reload
firewall-cmd --list-all

在这里插入图片描述

1.1. 在3台主机上配置swarm

  • 创建 目录
mkdir -p /home/liuhmpackage/liuhm-4.0.0-x16_64 && cd /home/liuhmpackage/liuhm-4.0.0-x16_64
  • 在node1上执行:
docker swarm init --advertise-addr 192.168.56.100

返回类似以下内容:

docker swarm join --token SWMTKN-1-614xi9dvksycykobgifxb4pgopc1wwgczwqct5wqkq8zao6tmx-0ds4jj3ozclrr2wukcaoakxso 192.168.56.100:2377
  • 在node2上执行上面的返回结果:
docker swarm join --token SWMTKN-1-2c2xopn2rld8oltcof24sue370681ijhbo3bwcqarjlhq9lkea-2g53o5qn2anre4j9puv4hecrn 192.168.0.101:2377

1.2. 创建swarm网络

在node1上执行以下命令:

docker network create -d overlay --subnet 10.0.1.0/24 --attachable liuhm-net

# 检查网络,如果存在表示创建成功
docker network ls | grep liuhm-net

1.3 创建文件

复制下面的sh命令即可获取第二步所需的安装文件

mkdir -p /home/liuhmpackage/liuhm-4.0.0-x16_64/haproxy
cd /home/liuhmpackage/liuhm-4.0.0-x16_64/haproxy

cat > haproxy.cfg << EOF
global
    maxconn     4000

defaults
        log     global
        log 127.0.0.1 local3
        mode    http
        option  tcplog
        option  dontlognull
        retries 10
        option redispatch
        maxconn         2000
        timeout connect         10s
        #timeout client          1m
        #timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
######## 监控界面配置 #################	
listen  admin_stats
	#监控界面的访问的IP和端口
	bind  0.0.0.0:8888
	#访问协议
    mode        http
	#URI相对地址
    stats uri   /dbs
	#统计报告格式
    stats realm     Global\ statistics
	#登陆帐户信息
    stats auth  admin:admin
    # 隐藏HAProxy的版本号
    stats hide-version
    # 管理界面,如果认证成功了,可通过webui管理节点
    stats admin if TRUE
    # 统计页面自动刷新时间
    stats  refresh  30s
listen  mysql
        bind 0.0.0.0:3306
        mode tcp
        #负载均衡算法(轮询算法)
	    #轮询算法:roundrobin
	    #权重算法:static-rr
	    #最少连接算法:leastconn
	    #请求源IP算法:source 
        balance  roundrobin
        # 监控检查需要一个无密码的账号
        # mysql健康检查  haproxy为mysql登录用户名(需要在实体数据有这个账户,且无密码)
	    # option mysql-check  user haproxy 
        server s1 mysql-master1:3306 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2
        server s2 mysql-master2:3306 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2 backup

	    # 使用keepalive检测死链
        option tcpka
EOF

cat > dokcer-stark-haproxy.yml << EOF
version: '3'

networks:
  liuhm-net:
    external: true 

services:
  haproxy:
    image: haproxy:alpine
    hostname: haproxy
    volumes:
      - "${PWD}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg"
      - "/etc/localtime:/etc/localtime:ro"
    restart: always
    privileged: true
    ports:
      - 8888:8888
      - 3306:3306
    networks:
      - liuhm-net
    deploy:
      mode: global
EOF

mkdir -p /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master1/conf
cd /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master1/conf
cat > my.cnf << EOF
!includedir /etc/mysql/conf.d/ 
!includedir /etc/mysql/mysql.conf.d/
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone=+08:00
max_connections=1000

# 开启binlog
log-bin=mysql-bin
log-bin-index=mysql-bin.index
# 服务器唯一id,默认值1
server-id=1
max_binlog_size=1G
max_binlog_cache_size=1G
# 设置日志格式,默认值ROW
binlog_format=mixed
expire_logs_days=7
# 开启慢查询
slow_query_log=1
long_query_time=2
slow_query_log_file=/data/mysql/slow.log
# 错误日志
log_error=/var/log/mysql/error.log
# 设置需要复制的数据库,默认复制全部数据库
#binlog-do-db=mcp_manager
# 设置不需要复制的数据库
binlog-ignore-db=mysql
binlog-ignore-db=infomation_schema
EOF

cd /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master1


cat > docker-compose.yml << EOF
version: '3'

networks:
  liuhm-net:
    external: true
services:
  mysql-master1:
    image: mysql:5.7.23
    hostname: mysql-master1
    container_name: mysql-master1
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=hancloud1234!
      - TZ=Asia/Shanghai
    volumes:
      - $PWD/slowSql:/data/mysql
      - $PWD/data:/var/lib/mysql
      - $PWD/logs:/var/log/mysql
      - $PWD/conf/my.cnf:/etc/mysql/my.cnf
    privileged: true
    networks:
      liuhm-net:
        ipv4_address: 10.0.1.50
    command: ['mysqld','--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci','--default-time-zone=+08:00']
    entrypoint: bash -c "chown -R mysql:mysql /var/log/mysql && exec /entrypoint.sh mysqld"
EOF


cat > install.sh << EOF
#!/bin/sh

CURRENT_DIR=$(
   cd "$(dirname "$0")"
   pwd
)
nowDate=$(date "+%Y%m%d%H%M%S")
logFileName="install_"$nowDate.log
touch $CURRENT_DIR/${logFileName}
# 日志函数
log(){
	#echo "["$(date "+%Y-%m-%d %H:%M:%S.")$((`date +%N`/1000000))"] " $1 | tee -a $CURRENT_DIR/$logFileName
	
	echo "["$(date "+%Y-%m-%d %H:%M:%S")"]"$1 | tee -a $CURRENT_DIR/$logFileName
}

master1Ip="10.0.1.50"
master2Ip="10.0.1.51"

#///
log "【安装】开始安装"

log "【安装】开始安装 ${master1Ip}" 


checkMysql()
{

	status=true
	while($status)
	do 
		echo "Check MySQL status......"
		if docker exec -it $1 bash -c 'mysqladmin ping -h localhost -uroot -phancloud1234! '; then
			echo "Check that MySQL has been started!"
			status=false
		else
			echo "Waiting for MySQL to start..."
			sleep 5
		fi
	done
}

installMaster1(){
	# my.cnf 权限不能是777,会被忽略
	chmod 644 ./conf/my.cnf
	log "【启动程序】开始启动" 
	docker-compose up -d
	sleep 20
	checkMysql mysql-master1

	# 创建slave用户
	# 设置密码
	# 授予复制权限
	# 刷新权限
	log "【初始化用户】创建用户" 
	docker exec -it mysql-master1 bash -c "mysql -uroot -phancloud1234! -e \"CREATE USER 'slave'@'%';ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'hancloud@1234';GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';FLUSH PRIVILEGES;\"" 
	log "【初始化用户】创建slave用户成功"
	
	# mysql-bin.000003

	sleep 10
	
}


installMaster1
log "【主1结束】主1执行完1"
log "【主1结束】下面的语句在主2安装完成后执行"

fileName=$(docker exec -it mysql-master1 bash -c "mysql -uroot -phancloud1234! -e \"SHOW MASTER STATUS;\"" |grep "mysql-bin"|awk -F '|' '{print $2}' | awk '{gsub(/^\s+|\s+$/, "");print}') 
	# 939
pos=$(docker exec -it mysql-master1 bash -c "mysql -uroot -phancloud1234! -e \"SHOW MASTER STATUS;\"" |grep "mysql-bin"|awk -F '|' '{print $3}' | awk '{gsub(/^\s+|\s+$/, "");print}') 

echo "docker exec -it mysql-master2 bash -c \"mysql -uroot -phancloud1234! \""
echo "CHANGE MASTER TO MASTER_HOST='${master1Ip}',MASTER_USER='slave',MASTER_PASSWORD='hancloud@1234', MASTER_PORT=3306,MASTER_LOG_FILE='${fileName}',MASTER_LOG_POS=${pos};"

echo "START SLAVE;"
echo "SHOW SLAVE STATUS\G"
echo "exit"

EOF





mkdir -p /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master2/conf
cd /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master2/conf
cat > my.cnf << EOF
!includedir /etc/mysql/conf.d/ 
!includedir /etc/mysql/mysql.conf.d/
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone=+08:00
max_connections=1000

# 开启binlog
log-bin=mysql-bin
log-bin-index=mysql-bin.index
# 服务器唯一id,默认值1
server-id=2
max_binlog_size=1G
max_binlog_cache_size=1G
# 设置日志格式,默认值ROW
binlog_format=mixed
expire_logs_days=7
# 开启慢查询
slow_query_log=1
long_query_time=2
slow_query_log_file=/data/mysql/slow.log
# 错误日志
log_error=/var/log/mysql/error.log
# 设置需要复制的数据库,默认复制全部数据库
#binlog-do-db=mcp_manager
# 设置不需要复制的数据库
binlog-ignore-db=mysql
binlog-ignore-db=infomation_schema
EOF

cd /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master2


cat > docker-compose.yml << EOF
version: '3'
networks:
  liuhm-net:
    external: true
    
services:
  mysql-master2:
    image: mysql:5.7.23
    hostname: mysql-master2
    container_name: mysql-master2
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=hancloud1234!
      - TZ=Asia/Shanghai
    volumes:
      - $PWD/slowSql:/data/mysql
      - $PWD/data:/var/lib/mysql
      - $PWD/logs:/var/log/mysql
      - $PWD/conf/my.cnf:/etc/mysql/my.cnf
    privileged: true
    networks:
      liuhm-net:
        ipv4_address: 10.0.1.51
    command: ['mysqld','--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci','--default-time-zone=+08:00']
    entrypoint: bash -c "chown -R mysql:mysql /var/log/mysql && exec /entrypoint.sh mysqld"
EOF


cat > install.sh << EOF
#!/bin/sh

CURRENT_DIR=$(
   cd "$(dirname "$0")"
   pwd
)
nowDate=$(date "+%Y%m%d%H%M%S")
logFileName="install_"$nowDate.log
touch $CURRENT_DIR/${logFileName}
# 日志函数
log(){
	#echo "["$(date "+%Y-%m-%d %H:%M:%S.")$((`date +%N`/1000000))"] " $1 | tee -a $CURRENT_DIR/$logFileName
	
	echo "["$(date "+%Y-%m-%d %H:%M:%S")"]"$1 | tee -a $CURRENT_DIR/$logFileName
}

master1Ip="10.0.1.50"
master2Ip="10.0.1.51"

#///
log "【安装】开始安装"

log "【安装】开始安装 ${master2Ip}" 


checkMysql()
{

	status=true
	while($status)
	do 
		echo "Check MySQL status......"
		if docker exec -it $1 bash -c 'mysqladmin ping -h localhost -uroot -phancloud1234! '; then
			echo "Check that MySQL has been started!"
			status=false
		else
			echo "Waiting for MySQL to start..."
			sleep 5
		fi
	done
}

installMaster1(){
	# my.cnf 权限不能是777,会被忽略
	chmod 644 ./conf/my.cnf
	log "【启动程序】开始启动" 
	docker-compose up -d
	sleep 20
	checkMysql mysql-master2

	# 创建slave用户
	# 设置密码
	# 授予复制权限
	# 刷新权限
	log "【初始化用户】创建用户" 
	docker exec -it mysql-master2 bash -c "mysql -uroot -phancloud1234! -e \"CREATE USER 'slave'@'%';ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'hancloud@1234';GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';FLUSH PRIVILEGES;\"" 
	log "【初始化用户】创建slave用户成功"
	
	# mysql-bin.000003

	sleep 10
	
}


installMaster1
log "【主2结束】主2执行完2"
log "【主2结束】下面的语句在主2安装完成后执行"

fileName=$(docker exec -it mysql-master2 bash -c "mysql -uroot -phancloud1234! -e \"SHOW MASTER STATUS;\"" |grep "mysql-bin"|awk -F '|' '{print $2}' | awk '{gsub(/^\s+|\s+$/, "");print}') 
	# 939
pos=$(docker exec -it mysql-master2 bash -c "mysql -uroot -phancloud1234! -e \"SHOW MASTER STATUS;\"" |grep "mysql-bin"|awk -F '|' '{print $3}' | awk '{gsub(/^\s+|\s+$/, "");print}') 


echo "docker exec -it mysql-master1 bash -c \"mysql -uroot -phancloud1234! \""
echo "CHANGE MASTER TO MASTER_HOST='${master2Ip}',MASTER_USER='slave',MASTER_PASSWORD='hancloud@1234', MASTER_PORT=3306,MASTER_LOG_FILE='${fileName}',MASTER_LOG_POS=${pos};"

echo "START SLAVE;"
echo "SHOW SLAVE STATUS\G"
echo "exit"


EOF




1.4 拷贝文件

scp -r /home/liuhmpackage root@192.168.56.101:/home

2. mysql 集群安装

2.1. 启动 mysql-master1

进入 liuhm1服务器

mkdir -p /home/liuhmmysql/mysql-master1 && cd /home/liuhmmysql/mysql-master1

\cp -r /home/liuhmpackage/liuhm-4.0.0-x16_64/haproxy /home/liuhmmysql

\cp -r /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master1/* ./

bash install.sh

出现下面的日志代表启动成功
在这里插入图片描述

2.2. 启动 mysql-master2

进入 liuhm2服务器

mkdir -p /home/liuhmmysql/mysql-master2 && cd /home/liuhmmysql/mysql-master2

\cp -r /home/liuhmpackage/liuhm-4.0.0-x16_64/haproxy /home/liuhmmysql

\cp -r /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master2/* ./

bash install.sh

出现下面的日志代表启动成功
在这里插入图片描述

2.3. mysql-master1执行mysql-master2 完成后的语句

进入 liuhm1服务器

docker exec -it mysql-master1 bash -c "mysql -uroot -phancloud1234! "

CHANGE MASTER TO MASTER_HOST='10.0.1.51',MASTER_USER='slave',MASTER_PASSWORD='hancloud@1234', MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=939;

START SLAVE;

SHOW SLAVE STATUS\G

exit

在这里插入图片描述

2.4. mysql-master2执行mysql-master1 完成后的语句

进入 liuhm2服务器

docker exec -it mysql-master2 bash -c "mysql -uroot -phancloud1234! "

CHANGE MASTER TO MASTER_HOST='10.0.1.50',MASTER_USER='slave',MASTER_PASSWORD='hancloud@1234', MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=939;

START SLAVE;

SHOW SLAVE STATUS\G

exit

在这里插入图片描述

2.5. 启动代理

进入 liuhm1服务器

cd /home/liuhmmysql/haproxy
docker stack deploy -c dokcer-stark-haproxy.yml haproxy

mysql 连接方式 haproxy:3306 admin/hancloud1234!

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

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

相关文章

【贪心】最小生成树Prim算法Python实现

文章目录 [toc]问题描述最小生成树的性质证明 Prim算法Prim算法的正确性时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;贪心算法 问题描述 设 G ( V , E ) G (V , E) G(V,E)是无向连通带权图&#xff0c; E E E中每条边 ( v , w ) (v , w) (v,w)的…

多线程的基本使用与多线程中条件变量的使用——消费者生产者问题实例

多线程的基本使用与多线程中条件变量的使用——消费者生产者问题实例 本文主要涉及多线程的使用方法&#xff0c;通过两个实例来对多线程的使用进行理解&#xff0c; 案例包括&#xff1a; 1.一个线程负责计数&#xff0c;另一个线程负责打印计数值 2.消费者生产者问题 文章目录…

【MySQL索引特性】

目录&#xff1a; 前言引入认识磁盘MySQL与存储 索引的理解理解单个Page理解多个Page引入B树结构聚簇索引 VS 非聚簇索引 索引操作创建主键索引唯一索引的创建普通索引的创建查看索引删除索引 总结 前言 剑指offer&#xff1a;一年又10天 引入 索引&#xff0c;是用来提高查询…

【python】python课设 天气预测数据分析及可视化(完整源码)

目录 1. 前言2. 项目结构3. 详细介绍3.1 main.py3.2 GetModel.py3.3 GetData.py3.4 ProcessData.py3.5天气网.html 4. 成果展示 1. 前言 本文介绍了天气预测数据分析及可视化的实现过程使用joblib导入模型和自定义模块GetModel获取模型&#xff0c;输出模型的MAE。使用pyechart…

ansible的控制语句

本章内容主要介绍 playbook 中的控制语句 使用when判断语句block-rescue判断循环语句 一个play中可以包含多个task&#xff0c;如果不想所有的task全部执行&#xff0c;可以设置只有满足某个条件才执行这个task&#xff0c;不满足条件则不执行此task。本章主要讲解when 和 blo…

Linux安装及管理程序

一、Linux应用程序管理 1、应用程序与系统命令的关系 1.对比系统命令和应用程序的不同 位置&#xff1a; Linux中一切皆为文件 演示内部命令和外部命令 位置 应用程序位置 用途&#xff1a; 命令主要处理系统的基本操作&#xff08;复制&#xff0c;配置&#xff09; 应用程…

大模型工具_Langchain-Chatchat

https://github.com/chatchat-space/Langchain-Chatchat 原Langchain-ChatGLM 1 功能 整体功能&#xff0c;想解决什么问题 基于 Langchain 与 ChatGLM 等LLM模型&#xff0c;搭建一套针对中文场景与开源模型&#xff0c;界面友好、可离线运行的知识库问答解决方案。 当前解决…

米勒电容与米勒效应

米勒电容与米勒效应 米勒效应米勒效应的形成原理及分析米勒效应的危害和改进 米勒效应 Ciss CGE CGC 输入电容 Coss CGC CEC 输出电容 Crss CGC 米勒电容 下面我们以MOS中的米勒效应来展开说明&#xff1a; 米勒效应在MOS驱动中臭名昭著&#xff0c;它是由MOS管的米勒电容引发…

运行时和编译时使用的so库不同是否影响可执行文件执行

引子 近日遇到如下问题: 1.如果可执行文件依赖的so库在编译和执行阶段使用的名字一样&#xff0c;但是内容不一样&#xff0c;比如运行时相比于编译时在so库里增加了几个api定义&#xff0c;so库还可以正常使用吗&#xff1f; 2.如果可执行文件依赖的so库在编译和执行阶段使用的…

buuctf-Misc 题目解答分解94-96

94.[SUCTF 2019]Game 在源码包里面 有一个静态页面和一些样式表 在index,html 中看到了flag base32 解码 得到flag suctf{hAHaha_Fak3_F1ag} 但是显示不对 还有一张图片 进行数据提取发现base64 U2FsdGVkX1zHjSBeYPtWQVSwXzcVFZLu6Qm0To/KeuHg8vKAxFrVQ 解密后发现是Sal…

编译原理--词法分析C++

一、实验项目要求 1.实验目的 通过设计编制调试一个具体的词法分析程序&#xff0c;加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 编制一个读单词过程&#xff0c;从输入的源程序中&#xff0c;识别出各个具有…

XUbuntu22.04之跨平台容器格式工具:MKVToolNix(二百零三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

29.Java程序设计-基于Springboot的幼儿园管理系统的设计与实现

1. 引言 背景介绍&#xff1a;幼儿园管理系统的必要性和重要性。研究目的&#xff1a;设计一个基于Spring Boot的系统以优化幼儿园管理流程。论文结构概览。 2. 需求分析 用户需求&#xff1a;不同用户&#xff08;管理员、老师、家长&#xff09;的需求分析。功能需求&…

多次触发FastJson漏洞的AutoType机制,你了解吗?

一个反序列化问题 在一次日志巡检过程中&#xff0c;发现线上业务出现报错。线上业务场景是&#xff1a;调用三方restful接口&#xff0c;根据接口返回json字符串内容&#xff0c;进行反序列化处理&#xff0c;业务中使用的json处理工具是FastJson(v1.2.71)。 报错是使用fast…

【Linux系统编程二十三】:(信号2)--信号的保存

【Linux系统编程二十三】&#xff1a;信号的保存 一.信号的保存1.阻塞信号2.sigset_t类型(位图)3.block表4.handler表5.pending表 二.实验验证三.信号的其他概念 一.信号的保存 信号发送本质上是操作系统发送信号&#xff0c;而进程PCB内部有一个位图用来表示是否接收到信号。…

T-Dongle-S3开发笔记——创建工程

创建Hello world工程 打开命令面板 方法1&#xff1a;查看->命令面板 方法2&#xff1a;按F1 选择ESP-IDF:展示示例项目 创建helloworld 选择串口 选择芯片 至此可以编译下载运行了 运行后打印的信息显示flash只有2M。但是板子上电flash是W25Q32 4MB的吗 16M-bit

高级RGA(二):父文档检索器

在我之前写的<<使用langchain与你自己的数据对话>>系列博客中&#xff0c;我们介绍了利用大型语言模型LLM来检索文档时的过程和步骤&#xff0c;如下图所示&#xff1a; 我们在检索文档之前&#xff0c;通常需要对文档进行切割&#xff0c;然后将其存入向量数据库如…

用友时空KSOA UploadImage任意文件上传漏洞

漏洞描述 用友时空 KSOA 是根据流通企业前沿的IT需求推出的统的IT基础架构&#xff0c;它可以让流通企业各个时期建立的 IT 系统之间彼此轻松对话。由于用友时空设备开放了文件上传功能&#xff0c;但未鉴权且上传的文件类型、大小、格式、路径等方面进行严格的限制和过滤&…

企业知识库在跨地域团队协作中的价值

随着全球化进程的不断加速&#xff0c;越来越多的企业开始面临跨地域协作的挑战。在这种背景下&#xff0c;企业知识库作为一种重要的知识管理工具&#xff0c;对于提高团队协作效率、促进知识共享与创新具有不可替代的价值。接下来就说一下知识库在跨地域团队协作中的重要性及…

JVM简单学习

jvm与字节码 jvm只需关注字节码文件 jvm由哪些部分构成 1.类加载子系统&#xff0c;将磁盘中的字节码文件加载到方法区的内存空间中 类加载器分两种&#xff1a;引导类加载器是jvm底层中用C和C语言写的 各个默认的类加载器的不同区别在于 各自默认负责要加载的类的目录不一…