MySQL 备份和恢复

目录

一.MySQL数据库的备份的分类

1.1.数据备份的重要性

1.2.数据库备份的分类和备份策略

1.3.常见的备份方法

二.MySQL完全备份

2.1.什么是完全备份

2.2.完全备份的优缺点

2.3.实现物理冷备份与恢复

1)实现流程

2)前置准备

3)实现物理冷备份

4)恢复数据库

2.4.使用mysqldump备份数据库

2.5.使用source命令恢复数据库

2.6.使用mysql命令恢复数据库

三.MySQL增量备份与恢复

3.1 使用完全备份所带来的问题

3.2.增量备份简介

3.3.特点

3.4.增量备份与日志的关系

          3.4.1.二进制日志对备份的意义

3.5 增量恢复方法类别

3.5.1.一般恢复

3.5.2.基于位置恢复

3.5.3.基于时间点恢复

3.6 增量备份

3.6.1.开启二进制日志功能

3.6.2.实现增量备份

3.6.3.一般恢复

3.6.4.端点恢复

3.6.4.1.基于位置恢复

3.6.4.2.基于时间点恢复


一.MySQL数据库的备份的分类

1.1.数据备份的重要性

备份的主要目的是灾难恢复

在生产环境中,数据的安全性至关重要

任何数据的丢失都可能产生严重的后果

造成数据丢失的原因

  • 程序错误
  • 人为操作
  • 运算错误
  • 磁盘故障
  • 灾难(如火灾、地震)和盗窃

1.2.数据库备份的分类和备份策略

①数据库备份:

物理备份:直接对数据库的数据文件或者日志文件进行备份
逻辑备份:对数据库的库或表对象进行备份

从物理与逻辑的角度,备份可分为

①物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份

物理备份的方法:

  • 冷备法(脱机备份):是在关闭数据库的时候进行的
  • 热备法(联机备份):数据库处于运行状态,依赖于数据库的日志文件
  • 温备法:数据库锁定表格(不可写入但可读)的状态下进行备份操作

②逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份,即以sql语句的形式,把库、表结构、表数据保存下来。

从数据库的备份策略角度,备份可分为:

  • 完全备份:每次对数据库进行完整的备份
  • 差异备份:备份自从上次完全备份之后被修改过的文件
  • 增量备份:只有在上次完全备份或增量备份后被修改的文件才会备份

②备份策略:

完全备份:每次备份都备份完整的数据库.

  • 是对整个数据库、数据库结构和文件结构的备份。
  • 保存的是备份完成时刻的数据库。
  • 是差异备份与增量备份的基础。

差异备份:只备份上一次完全备份后的更新数据.
增量备份:每次备份只备份上一次完全备份或增量备份后的最新数据.


完全备份:

增量备份:

差异备份:

1.3.常见的备份方法

物理冷备: (完全备份)

    备份时数据库处于关闭状态,直接打包数据库文件
    备份速度快,恢复时也是最简单的

专用备份工具mydump或mysqlhotcopy (完全备份,逻辑备份)

    mysqldump常用的逻辑备份工具 (导出为sql脚本)
    mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表

启用二进制日志进行增量备份 (增量备份)

    进行增量备份,需要刷新二进制日志

第三方工具备份

    免费的MySQL热备份软件Percona XtraBackup

(阿里云的工具:dts,支持热迁移)

二.MySQL完全备份

2.1.什么是完全备份

    完全备份是对整个数据库、数据库结构和文件结构的备份
    保存的是备份完成时刻的数据库
    是差异备份与增量备份的基础

2.2.完全备份的优缺点

优点:备份与恢复操作简单方便

缺点:

    ①数据存在大量的重复
    ②占用大量的备份空间
    ③备份与恢复时间长

2.3.实现物理冷备份与恢复

 

1)实现流程

关闭MySQL数据库 > 使用tar命令直接打包数据库文件夹 > 直接替换现有MySQL目录

2)前置准备
mysql1 :192.168.47.105
mysql2 :192.168.47.106mysql -uroot -p369369
#登录数据库

create database zr;
#新建数据库use zr;
#进入数据库create table zr1 (id int, name varchar(10), age int, sex char(2), hobby varchar(50));
#新建表show tables;
#查看数据库

#添加数据
insert into zr1 values (1, '张三', 22, '男', 'java');
insert into zr1 values (2, '李四', 23, '男', '测试');
insert into zr1 values (3, '王五', 24, '男', '云计算');
insert into zr1 values (4, '赵四', 25, '男', '云原生');
insert into zr1 values (5, '凹凸曼', 26, '男', '网络安全');
insert into zr1 values (6, '大飞', 27, '男', '前端开发');select * from zr1;  #查看数据是否添加成功

create table zr2 like zr1;
insert into zr2 (select * from zr1);
#克隆一个名为zr2的表show tables from zr;
#查看是否创建成功

3)实现物理冷备份
quit
#退出数据库systemctl stop mysqld
#关闭数据库
cd /usr/local/mysql/data
#前往mysql默认日志目录下

mkdir /opt/backup
#创建备份日志文件目录,将数据库备份文件保存到/opt/backup目录下cd /usr/local/mysqltar zcf /opt/backup/mysql_data-$(date +%F).tar.gz data/
#打包压缩今天的data目录到/opt/backup目录下,并标上日期#拓展
date +%Y/%m/%d
#只显示当前日期date +%Y-%m01
#显示当月第一天date -d "+1 day" +%Y/%m/%d
#显示明天date -d "-1 day" +%Y/%m/%d
#显示昨天
或
date -d "1 day ago" +%Y/%m/%ddate -d "$(date +%Y%m01) -1 day" +%Y/%m/%d
#显示上月最后一天date -d "(date -d "1 mouth" +%Y%m01) -1 day" +%Y/%m/%d
#显示当月最后一天

4)恢复数据库

上面备份的数据库文件数据mysql_data-2023-11-20.tar.gz,作为远端异地已经备份好的数据库文件(IP:192.168.47.106),然后加载到另一台需要恢复的数据库主机(IP:192.168.47.105)。

#远端已备份数据文件主机(IP:192.168.47.106)
cd /opt/backupscp mysql_data-2023-11-20.tar.gz 192.168.47.105:/opt
#将打包的data目录远程拷贝到另一台mysql主机的opt目录下#需要恢复数据库文件主机(IP:192.168.47.107)
systemctl stop mysqld    #关闭mysql服务
cd /opt
tar xf mysql_data-2023-11-20.tar.gz 
mv /usr/local/mysql/data /usr/local/mysql/data.bak    #将原有的数据库文件移走
mv /opt/data/ /usr/local/mysql/
systemctl restart mysqld   #重新启动数据库服务
mysql -uroot -p369369      #此数据库密码是你备份数据库密码show databases;
#查看现有数据库show tables from zr;
#查看库中现有数据库select * from zr.zr1;
#查看表内容

2.4.使用mysqldump备份数据库

#基本格式
mysqldump -u [用户名] -p[密码] --databases 库名1 [库名2] … > /备份路径/备份文件名.sql	
#导出的就是数据库脚本文件#完全备份一个或多个完整的库(包括其中所有的表)
mysqldump -uXXX -p[XXX] 库名 > XXX.sql
#备份指定库中的所有表数据(不包含创建库的操作)mysqldump -uroot -p369369 zr > /opt/backup/zr.sql
#只备份表和表中的内容,并没有备份库cd /opt/backup
ls

cat zr.sql |egrep -v "^--|^/\*|^$"           #过滤出需要的信息

mysqldump -uroot -p369369 --databases zr > /opt/backup/zr_data.sql
#备份一个完整的库到/opt/backup目录下

cat zr_data.sql |egrep -v "^--|^/\*|^$"            #过滤出需要的信息

mysqldump -u [用户名] -p[密码] --all-databases > /备份路径/备份文件名.sqlmysqldump -u root -p369369 --all-databases > /opt/backup/all_data.sql
#完全备份 MySQL 服务器中所有的库

cat all_data.sql |grep "^CREATE DATABASE"

mysqldump -u root -p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql
#备份指定库中的一个或多个表数据(不包含创建库的操作)mysqldump -u root -p369369 zr zr2 > /opt/backup/zr_zr2.sql
#备份zr库中zr2表cat zr_zr2.sql |egrep -v "^--|^/\*|^$"
#查看备份内容信息

2.5.使用source命令恢复数据库

#记得提前备份#模拟环境#先登录mysql
mysql -uroot -p369369drop database zr;
#删除zr库

source /opt/backup/zr_data.sql
#恢复完整的scj库#注:一定要用绝对路径

#也可以只用表数据进行恢复
create database zr;
#创建新scj库use zr;
#进入zr库source /opt/backup/zr.sql
#恢复库中表数据#因为zr.sql中不包含有创建库的操作,所以可以在任意一个库中导入表数据

2.6.使用mysql命令恢复数据库

#基本格式
mysql -uXXX -pXXX [库名] < XXX.sql          #如果sql文件只包含表的备份,要指定库名
或
cat XXX.sql | mysql -uXXX -pXXX [库名]
mysql -uroot -p369369 zr < zr.sql
#需要提前创建库mysql -uroot -p369369  < zr_data.sql
#直接恢复完整的数据库
mysql -uroot -p369369 -e "drop database zr;"
#-e 执行命令后退出数据库mysql -uroot -p369369 -e "show databases;"
#查看是否删除完成

mysql -uroot -p369369  < zr_data.sqlmysql -uroot -p369369 -e "show databases;"
#查看是否恢复完成

三.MySQL增量备份与恢复

3.1 使用完全备份所带来的问题

  • 备份数据中有重复数据
  • 备份时间与恢复时间过长

3.2.增量备份简介

  • 是自上一次备份后增加和变化的文件或内容

3.3.特点

  • 没有重复数据,备份量不大,时间短
  • 恢复需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复

3.4.增量备份与日志的关系

  • MySQL没有提供直接的增量备份方法
  • 可通过MySQL提供的二进制日志间接实现增量备份
3.4.1.二进制日志对备份的意义
  • 二进制日志保存了所有更新或者可能更新数据库的操作
  • 二进制日志在启动MySQL服务器后开始记录,并在文件达到max binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件
  • 只需定时执行flushlogs方法重新创建新的日志,生成二进制文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份

3.5 增量恢复方法类别

3.5.1.一般恢复
  • 将所有备份的二进制日志内容全部恢复
3.5.2.基于位置恢复
  • 数据库在某一时间点可能既有错误的操作也有正确的操作
  • 可以基于精准的位置跳过错误的操作
3.5.3.基于时间点恢复
  • 跳过某个发生错误的时间点实现数据恢复

3.6 增量备份

3.6.1.开启二进制日志功能
vim /etc/my.cnf
#编辑配置文件#添加
log-bin=mysql-bin
binlog_format = MIXED				#可选,指定二进制日志(binlog)的记录格式为 MIXED
server-id = 1#二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT

systemctl restart mysqld
#重新启动服务ls /usr/local/mysql/data

#因为二进制文件内容默认是二进制字符,人是看不懂的#所以使用mysqlbinlog命令mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000001
#以base64方式进行解码,按行进行读取编码,显示详细内容,指定mysql-bin.000001文件

#除了可以用重启来刷新mysql二进制文件,还可以使用mysqladmin命令来刷新二进制文件mysqladmin -uroot -p369369 flush-logs
#再次生成新的二进制日志文件

cat mysql-bin.index
#该文件保存着所有的二进制文件的序列号

3.6.2.实现增量备份
#模拟环境
select * from zr.zr1;
#事先准备表

#当天二进制文件是没有操作数据的
cat /usr/local/mysql/data/mysql-bin.000003  
#查看最新二进制日志文件

#首先实现完全备份
mkdir /opt/backupcd /opt/backup
mkdir data bin
#data目录做完全备份,bin做增量备份

vim /opt/mysqlquan.sh     
#编写完全备份脚本  
#!/bin/bash  
mysqldump -u root -p369369 --all-databases > /bak/all_$(date +%F).sql  chmod 700 /opt/mysqlquan.sh 
#添加属主的权限

vim /opt/binlog.sh 
#编写增量备份脚本
#!/bin/bash  
filename=$(sed -n '$p' /usr/local/mysql/data/mysql-bin.index | awk -F '/' '{print $2}') 
#使用sed命令打印二进制日志文件最后一行内容作为filename变量的值 
mv /usr/local/mysql/data/$filename /bak/binlog_$(date +%F)
#将二进制日志移动到备份目录下,并将移动后的文件名称加上日期  
mysqladmin -uroot -pabc123 flush-logs  
#生成新的二进制日志文件  chmod 700 /opt/binlog.sh 
#添加属主的权限

crontab -e      #做计划任务

mysqldump -uroot -p369369 zr zr1 > /opt/backup/data/zr_zr1-$(date +%Y.%m.%d).sql
#将zr库下zr1表备份到/opt/backup/data下ls /data/backup/   #查看是否备份完成

mysqladmin -uroot -p369369 flush-logs
#重新生成一个二进制文件

#进入数据库
#插入两条数据
insert into zr.zr1 values (7, '斗鸿劫', 25, '男', '老炮儿');
insert into zr.zr1 values (8, '粥芸饭', 18, '女', '厨师');select * from zr.zr1;
#查看内容

mysqladmin -uroot -p369369 flush-logs
#保存上一个文件并生成新一个文件

mv -f mysql-bin.000006 /opt/backup/bin/mysql-bin.000006-$(date -d '1 day' +_%Y.%m.%d)

#进入数据库
#插入两条数据
insert into zr.zr1 values (9, '笑零乘', 28, '男', '宝马');
insert into zr.zr1 values (10, '记小䪊', 18, '女', '保时捷');select * from zr.zr1;
#查看内容

mv -f mysql-bin.000007 /opt/backup/bin/mysql-bin.000007-$(date -d '1 day' +_%Y.%m.%d)

#进入数据库
#模拟被删库跑路了
drop database zr;

3.6.3.一般恢复
#现在进行恢复
create database zr;
#新建库mysql -uroot -p369369 zr < /opt/backup/data/zr_zr1-2023.11.20.sql
#首先恢复基础表数据

#进入数据库
select * from zr.zr1;
#查看表内容

#恢复第二次输入的内容
mysqlbinlog --no-defaults /opt/backup/bin/mysql-bin.000006-_20231120 | mysql -uroot -p369369

#进入数据库
select * from zr.zr1;
#查看表内容

3.6.4.端点恢复
#将二进制文件转译
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000006-_2023.11.20 > mysql-bin-2023.11.20mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000007-_2023.11.21 > mysql-bin-2023.11.21

3.6.4.1.基于位置恢复
#基本格式
mysqlbinlog --no-defaults --start-position='位置点' --stop-position='位置点' 二进制日志文件 | mysql -uXXX -pXXX
#示例
#只恢复斗鸿劫那一段#进入数据库清空表数据
truncate table zr.zr1;

cat mysql-bin-2023.11.20
#查看具体位置点

mysqlbinlog --no-defaults --start-position='292' --stop-position='522' /opt/backup/bin/mysql-bin.000006-_2023.11.20 | mysql -uroot -p369369
#将具体的位置点传往数据库服务器
#注:要使用二进制文件,不要用编码后的二进制文件

#前往数据库
select * from zr.zr1;
#查看内容

3.6.4.2.基于时间点恢复
#基本格式
mysqlbinlog --no-defaults --start-datetime='YYYY-mm-dd HH:MM:SS' --stop-datetime='YYYY-mm-dd HH:MM:SS' 二进制日志文件 | mysql -uXXX -pXXX
#示例
#只恢复粥芸饭那一段#进入数据库清空表数据
truncate table zr.zr1;

cat mysql-bin-2023.11.21
#查看具体时间点

mysqlbinlog --no-defaults --start-datetime='2023-11-20 19:19:26' --stop-datetime='2023-11-20 19:19:36' /opt/backup/bin/mysql-bin.000007-_2023.11.21 | mysql -uroot -p369369
#将具体时间点范围内的数据传往数据库服务器内

#前往数据库
select * from zr.zr1;
#查看内容

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go语言学习-go环境安装

1、安装Go 1.1 下载安装 go官网 找对应电脑的版本进行安装即可。 点击安装包&#xff0c;直接下一步下一步即可&#xff0c;安装目录可以自行设置一下。 1.2 验证 windows通过cmd验证。 linux或者mac可以通过自带终端执行测试。 2、配置环境变量 2.1 windows 找到系统…

vue3 setup展示数据

效果图 1.创建数据 content.js import { reactive } from vueconst data reactive({color:red,title: 二十四节气,subTitle: 节气&#xff0c;是干支历中表示自然节律变化以及确立“十二月建”&#xff08;月令&#xff09;的特定节令。,list: [{name: "立春",con…

用向量数据库Milvus Cloud搭建GPT大模型+私有知识库的定制AI助手——PPT大纲助手

随着人工智能技术的不断发展,AI助手在各行各业中扮演着越来越重要的角色。在商业领域,PPT演示是一种常见的沟通方式,而定制化的PPT大纲助手能够极大地提高PPT制作效率和质量。本文将介绍如何利用向量数据库Milvus Cloud搭建GPT大模型和私有知识库,构建一款高效的PPT大纲助手…

Thales安全解决方案:国家网络安全的关键

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显。在这个背景下&#xff0c;Thales安全解决方案正成为提高国家网络安全的关键。本文将探讨Thales安全解决方案如何为国家网络安全保驾护航。 一、Thales安全解决方案概述 Thales安全解决方案是一种全方位的网络安全防护…

简单回顾矩阵的相乘(点乘)230101

[[1 0 1][1 1 0]] [[3 0 0 3][2 2 1 3][1 3 1 1]] [[4. 3. 1. 4.][5. 2. 1. 6.]]乘以 c11 a11*b11 a12*b21 a13*b31 1*3 0*2 1*1 4 c12 a11*b12 a12*b22 a13*b32 1*0 0*2 1*3 3 c13a11*b13 a12*b23a13*b33 c14a11*b14 a12*b24a13*b34 c21a21*b11 a22*b21 a23*b…

键盘控制ROS车运动

键盘控制ROS车运动 上位机 使用pyseria库与stm32单片机进行通信控制 #!/usr/bin/env python # -*- coding: utf-8 -*import sys, select, termios, tty import serialmsg """ ---------------------------w a x ds w : x a : y s : -x …

如何快速将txt类型的日志文件转换为excel表格并进行数据分析报表统计图(如:饼图、折线图、柱状图)?

打开excel创建空白文档 选择一个txt文件 一动下面箭头↑竖线&#xff0c;可以拖拽左右调整要判断转换为一列的数据宽度 根据情况设置不同列的数据格式&#xff08;每一列可以点击&#xff09;&#xff0c;设置好后点击【完成】 设置单元格数据格式 手动插入第一行为每列数据的…

如何使用贝锐花生壳内网穿透远程访问JupyterNotebook?

在数据科学领域&#xff0c;Jupyter Notebook 已成为处理数据的必备工具。 其用途包括数据清理和探索、可视化、机器学习和大数据分析。Jupyter Notebook的安装非常简单&#xff0c;如果你是小白&#xff0c;那么建议你通过安装Anaconda来解决Jupyter Notebook的安装问题&#…

俄罗斯方块游戏制作

创建包和文件夹 1.创建小方块类 package eluosifangkuai; import java.awt.image.BufferedImage; import java.util.Objects;/*** author xiaoZhao* date 2022/5/7* describe* 小方块类* 方法&#xff1a; 左移、右移、下落*/ public class Cell {// 行private int row;//…

Midjourney绘画提示词Prompt参考学习教程

一、工具 SparkAi&#xff1a; SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软…

AIGC ChatGPT4对Gbase数据库进行总结

ChatGPT4 用一个Prompt完成Gbase数据库的总结。 AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作 PowerBI 商业智能 68集 数据库Mysql 8.0 54集 数据库Oracle 21C 142集 Office 2021实战应用 Python 数据分析实战&#xff0c; ETL Informatica 数据仓库案例实战 Excel 2021实操 …

硬件开发笔记(十二):RK3568底板电路电源模块和RTC模块原理图分析

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134429973 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

广州华锐互动VRAR | VR课件内容编辑器解决院校实践教学难题

VR课件内容编辑器由VR制作公司广州华锐互动开发&#xff0c;是一款专为虚拟现实教育领域设计的应用&#xff0c;它能够将传统的教学内容转化为沉浸式的三维体验。通过这款软件&#xff0c;教师可以轻松创建和编辑各种虚拟场景、模型和动画&#xff0c;以更生动、直观的方式展示…

ClickHouse的 MaterializeMySQL引擎

1 概述 MySQL 的用户群体很大&#xff0c;为了能够增强数据的实时性&#xff0c;很多解决方案会利用 binlog 将数据写入到 ClickHouse。为了能够监听 binlog 事件&#xff0c;我们需要用到类似 canal 这样的第三方中间件&#xff0c;这无疑增加了系统的复杂度。 ClickHouse 20.…

Unity——URP相机详解

2021版本URP项目下的相机&#xff0c;一般新建一个相机有如下组件 1:Render Type(渲染类型) 有Base和Overlay两种选项&#xff0c;默认是Base选项 Base:主相机使用该种渲染方式&#xff0c;负责渲染场景中的主要图形元素 Overlay&#xff08;叠加&#xff09;:使用了Oveylay的…

多维时序 | MATLAB实现PSO-BiGRU-Attention粒子群优化双向门控循环单元融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-BiGRU-Attention粒子群优化双向门控循环单元融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-BiGRU-Attention粒子群优化双向门控循环单元融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 …

Ajax基础(应用场景|jquery实现Ajax|注意事项)

文章目录 一、Ajax简介二、基于jquery实现Ajax三、使用Ajax注意的问题1.Ajax不要与form表单同时提交2.后端响应格式问题3、使用了Ajax作为请求后的注意事项 一、Ajax简介 AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻译成中文就是“异步Javascript和XML”。…

面试题c/c++ --STL 算法与数据结构

1.6 STL 模板 模板底层实现&#xff1a;编译器会对函数模板进行两次编译&#xff0c; 在声明的地方对模板代码本身进行编译&#xff0c; 在调用的地方对参数替换后的代码进行编译。 模板传参分析 模板重载 vector 是动态空间&#xff0c; 随着元素的加入&#xff0c; 它的内…

C练习题_14

一、单项选择题&#xff08;本大题共 20小题&#xff0c;每小题 2分&#xff0c;共 40分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案&#xff0c;并将所选项前的字母填写在答题纸的相应位置上。) 以下叙述不正确的是&#xff08;&#xff09; A.一个C源程序可…

Java源码分析:Guava之不可变集合ImmutableMap的源码分析

原创/朱季谦 一、案例场景 遇到过这样的场景&#xff0c;在定义一个static修饰的Map时&#xff0c;使用了大量的put()方法赋值&#xff0c;就类似这样—— public static final Map<String,String> dayMap new HashMap<>(); static {dayMap.put("Monday&q…