备份脚本

news/2024/11/19 11:42:48/文章来源:https://www.cnblogs.com/OpenSourceSite/p/18291306

1.Oracle RMAN备份

1.1 创建目录

 [oracle@OEL7 ~]$ mkdir -p /u01/dbbak/script[oracle@OEL7 ~]$ cd /u01/dbbak[oracle@OEL7 ~]$ chown -R oracle:oinstall script[oracle@OEL7 ~]$ mkdir -p /u01/dbbak/db[oracle@OEL7 ~]$ mkdir -p /u01/dbbak/arch[oracle@OEL7 ~]$ cd /u01/dbbak[oracle@OEL7 ~]$ chown -R oracle:oinstall db[oracle@OEL7 ~]$ chown -R oracle:oinstall arch

1.2 编辑脚本

[oracle@OEL7 ~]$ vi /u01/dbbak/script/rman_full.shexport ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=prod
dt=`date '+%Y%m%d_%H%M%S'`
/u01/app/oracle/product/19.3.0/dbhome_1/bin/rman target / cmdfile=/u01/dbbak/script/backup.sh log=/u01/dbbak/log/log_$dt.log append
[oracle@OEL7 ~]$ vi /u01/dbbak/script/backup.shrun{
allocate channel c1 type disk;   
allocate channel c2 type disk;   
allocate channel c3 type disk;
allocate channel c4 type disk;
backup as compressed backupset database format '/u01/dbbak/db/DB%U.bkp' plus archivelog format '/u01/dbbak/arch/ARCH%U.bkp' delete all input;
release channel c1;  
release channel c2;  
release channel c3;
release channel c4;
report obsolete;
crosscheck copy;
crosscheck archivelog all;
delete noprompt obsolete;
crosscheck backup;
delete noprompt expired backup;
}
quit;
EOF

1.3 脚本授权

[oracle@OEL7 ~]$ chmod 775 /u01/dbbak/script/backup.sh
[oracle@OEL7 ~]$ chmod 775 /u01/dbbak/script/rman_full.sh

1.4 执行脚本

/u01/dbbak/script/rman_full.sh

1.5 定时任务

crontab -e 为编辑窗口[oracle@OEL7 ~]$ crontab -l
0 2 * * * /u01/dbbak/script/rman_full.sh

1.6 备份删除

[oracle@OEL7 ~]$ rman target /RMAN> show all;
--备份策略调整,备份保留7天
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

2.Oracle逻辑备份

2.1 生成目录

[oracle@OEL7 ~]$ mkdir -p /home/oracle/backup/dump
[oracle@OEL7 ~]$ mkdir -p /home/oracle/backup/tars#使用expdp时需要先指定转储文件和日志文件所在的目录,可以通过如下命令实现
SQL> CREATE OR REPLACE DIRECTORY scott_backup as '/home/oracle/backup/dump';
SQL> grant read,write on directory scott_backup to public; 

2.2 备份脚本

[oracle@OEL7 ~]$ vi /home/oracle/backup/exp_backup.sh#!/bin/bash
#Oracle 环境变量
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORACLE_SID=prod
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/11g
PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export ORACLE_SID ORACLE_BASE ORACLE_HOME NLS_LANG PATH#获取时间戳
#dump生成时间
export BAKUPTIME=`date +%Y%m%d%H%M%S`
#压缩文件存放目录
export DATA_DIR=/home/oracle/backup/dump
export TAR_DIR=/home/oracle/backup/tars
cd $DATA_DIR     
echo "Starting bakup..."
echo "Bakup file path $DATA_DIR/scott_expdp_$BAKUPTIME.dmp"
#parallel=4 为并行度,对于备份大数据库有助于减少备份时间,但会增加CPU负载。
expdp scott/tiger directory=scott_backup dumpfile=scott_expdp_$BAKUPTIME.dump logfile=scott_expdp_$BAKUPTIME.log parallel=4
echo "Starting tar..."
echo "Tar file path $TAR_DIR/SCOTT_$BAKUPTIME.tar.gz"
tar -zcvf $TAR_DIR/scott_expdp_$BAKUPTIME.tar.gz scott_expdp*
echo "Bakup job is done!"
#历史dump文件保留7天
find  $DATA_DIR -type f -mtime +7 -exec rm -rf {} \;

2.3 定时任务

crontab -e 为编辑窗口[oracle@OEL7 ~]$ crontab -l
0 3 * * * /home/oracle/backup/exp_backup.sh

3.MySQL逻辑全|增备份
mysqldump备份和恢复无需关闭数据库
需要恢复上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复。

3.1 开启binlog日志

binlog日志默认不开启,修改参数后重启MySQL数据库
mysql> show variables like '%log_bin%';# vim /etc/my.cnf
log_bin=ON
log_bin_basename=/home/mysql/mysql-bin
log_bin_index=/home/mysql/mysql-bin.index
## 参数说明
log_bin:开启binlog日志文件,默认值为OFF。
log_bin_basename:binlog日志的基本文件名。MySQL会在该文件名后追加标识来表示每一个binlog文件。
log_bin_index:binlog文件的索引文件,管理所有的binlog文件。

3.2 全备脚本

# mkdir -p /home/mysql/daily
# mkdir -p /home/mysql/backup
# vi /home/mysql/Mysql-FullyBak.sh#mysqldump to Fully backup mysql data per week!
source /etc/profile
BakDir=/home/mysql/backup
LogFile=/home/mysql/backup/bak.log
Date=`date +%Y%m%d`
Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
cd $BakDir
DumpFile=$Date.sql
GZDumpFile=$Date.sql.tgz
/usr/bin/mysqldump -uroot -proot --quick --events --databases wmp --flush-logs --delete-master-logs --single-transaction >$DumpFile
/bin/tar -zvcf $GZDumpFile $DumpFile
/bin/rm $DumpFile
oldDate=`date -d '7 days ago' +%Y%m%d`
oldBakFile=${oldDate}".sql.tgz"
/bin/rm $oldBakFile
Last=`date +"%Y年%m月%d日 %H:%M:%S"`
echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile
cd $BakDir/daily
/bin/rm -f *

3.3 增备脚本

# vi /home/mysql/Mysql-DailyBak.sh
#use cp to bakup mysql data everyday!
source /etc/profile
BakDir=/home/mysql/backup/daily
BinDir=/home/mysql/mysql-bin
LogFile=/home/mysql/backup/bak.log
BinFile=/home/mysql/mysql-bin/mysql-bin.index
/usr/bin/mysqladmin -uroot -proot flush-logs
Counter=`wc -l $BinFile |awk '{print $1}'`  
#产生新的mysql-bin.00000*文件
NextNum=0
#比对$Counter和¥NextNum这两个值来确定文件是不是最新的
for file in `cat $BinFile`
dobase=`basename $file`#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./NextNum=`expr $NextNum + 1`if [[ $NextNum -eq $Counter ]]thenecho $base skip! >> $LogFileelsedest=$BakDir/$baseif(test -e $dest)#test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去thenecho $base exist! >> $LogFileelsecp $BinDir/$base $BakDirecho $base copying >> $LogFilefi
fi
done

3.4 定时任务

在命令行输入:
#crontab -e
添加相应的任务,wq存盘退出
#每个星期日凌晨3:00执行完全备份脚本
0 3 * * 0 /bin/bash -x /home/mysql/Mysql-FullyBak.sh >/dev/null 2>&1
#周一到周六凌晨3:00做增量备份
0 3 * * 1-6 /bin/bash -x /home/mysql/Mysql-DailyBak.sh >/dev/null 2>&1

3.5 恢复步骤

3.6 mysql其它备份脚本

#!/bin/bash# 定义变量
DB_USER="root"
DB_PASS="password"
DB_NAME="database_name"
BACKUP_DIR="/db_backup/mysql"
REMOTE_SERVER="remote_server_address"
REMOTE_DIR="/db_backup/mysql"# 创建备份目录
if [ ! -d $BACKUP_DIR ]; thenmkdir -p $BACKUP_DIR
fi# 备份数据库
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DB_NAME-$(date +%Y%m%d).sql# 压缩备份文件
tar -czvf $BACKUP_DIR/$DB_NAME-$(date +%Y%m%d).tar.gz $BACKUP_DIR/$DB_NAME-$(date +%Y%m%d).sql# 上传备份文件到远程服务器
scp $BACKUP_DIR/$DB_NAME-$(date +%Y%m%d).tar.gz $REMOTE_SERVER:$REMOTE_DIR# 删除过期备份文件
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +15 -delete
vim mysql_backup.sh#!/bin/bash
#完成数据库的定时备份
#备份的路径
BACKUP=/db_backup/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo ${DATETIME}
echo "==========开始备份==========="
echo "备份的路径是 $BACKUP/$DATETIME.tar.gz"#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=mysql
#创建备份的路径
#如果备份的路径文件夹存在就使用,否则创建
[ ! -d "$BACKUP/$DATETIME"  ]  && mkdir -p "$BACKUP/$DATETIME" 
#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST  $DATABASE | gzip  > $BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf  $DATETIME.tar.gz  $DATETIME
#删除临时目录
rm -rf  $BACKUP/$DATETIME#删除15天前的备份文件(-exec rm -rf {} \是固定写法,删除查询出来的数据)
find $BACKUP -mtime +15 -name  "*.tar.gz" -exec rm -rf {} \;
echo "==========备份完成==========="
vim mysql_backup.sh#!/bin/bash
#全备方式,一般在从机上执行,适用于小中型mysql数据库
#删除15天以前备份source /etc/profile        #加载系统环境变量
source ~/.bash_profile    #加载用户环境变量
set -o nounset             #引用未初始化变量时退出
#set -o errexit            #执行shell命令遇到错误时退出user="root"
password="root"
host="localhost"
port="13306"
#需备份的数据库,数组
db=("test")
#备份时加锁方式,
#MyISAM为锁表--lock-all-tables,
#InnoDB为锁行--single-transaction
lock="--single-transaction"
mysql_path="/usr/local/mysql"
backup_path="${mysql_path}/backup"
date=$(date +%Y-%m-%d_%H-%M-%S)
day=15
backup_log="${mysql_path}/backup.log"#建立备份目录
if [ ! -e $backup_path ];thenmkdir -p $backup_path
fi#删除以前备份
find $backup_path -type f -mtime +$day -exec rm -rf {} \; > /dev/null 2>&1echo "开始备份数据库:${db[*]}"#备份并压缩
backup_sql(){dbname=$1backup_name="${dbname}_${date}.sql"#-R备份存储过程,函数,触发器mysqldump -h $host -P $port -u $user -p$password $lock --default-character-set=utf8 --flush-logs -R $dbname > $backup_path/$backup_name    if [[ $? == 0 ]];thencd $backup_pathtar zcpvf $backup_name.tar.gz $backup_namesize=$(du $backup_name.tar.gz -sh | awk '{print $1}')rm -rf $backup_nameecho "$date 备份 $dbname($size) 成功 "elsecd $backup_pathrm -rf $backup_nameecho "$date 备份 $dbname 失败 "fi
}#循环备份
length=${#db[@]}
for (( i = 0; i < $length; i++ )); dobackup_sql ${db[$i]} >> $backup_log 2>&1
doneecho "备份结束,结果查看 $backup_log"
du $backup_path/*$date* -sh | awk '{print "文件:" $2 ",大小:" $1}'

4.MySQL PXB全/增备份

Xtrabackup是一个开源的MySQL数据库备份工具,由Percona公司开发和维护

4.1 备份脚本

vi /home/mysql/scripts/backup.sh#!/bin/bashecho ""
START_TIME=`date`
echo "############## backup start at $START_TIME ##############"
echo ""
###you need install xtrabackup!###
# Set env
source /home/mysql/.bash_profile
which xtrabackup
# Database Info
DB_USER="root"
DB_PASS="jeames@123"
CONF="/data/mysqldb/conf/mysql.conf"
SOCKET="/data/mysqldb/socket/mysql.sock"
BAK_BASE="/db_bak/mysql_bak/mysql"
DATE=`date +%F`
YESTERDAY=`date +%F -d "-1 days"`
WEEK_DAY=`date +%w`
BAK_DIR=$BAK_BASE/$DATE-$WEEK_DAY
# Create Directory and backup
if [ "$WEEK_DAY" == "6"  ]; thenxtrabackup --defaults-file=$CONF --socket=$SOCKET --backup --user=$DB_USER --password=$DB_PASS --target-dir=$BAK_DIR --compress
elif [ "$WEEK_DAY" == "0"  ]; thenINCRE_BASE=$BAK_BASE/$YESTERDAY-6xtrabackup --defaults-file=$CONF --socket=$SOCKET --backup --user=$DB_USER --password=$DB_PASS --target-dir=$BAK_DIR --incremental-basedir=$INCRE_BASE --compress
elseINCRE_BASE=$BAK_BASE/$YESTERDAY-$[WEEK_DAY-1]xtrabackup --defaults-file=$CONF --socket=$SOCKET --backup --user=$DB_USER --password=$DB_PASS --target-dir=$BAK_DIR --incremental-basedir=$INCRE_BASE --compress
fi
echo ""
END_TIME=`date`
echo "############## backup end at $END_TIME ##############"
echo ""

4.2 备份删除

vi  /home/mysql/scripts/cleanup.sh
#!/bin/bashecho ""
START_TIME=`date`
echo "############## clean up start at $START_TIME ##############"
echo ""find /db_bak/mysql_bak/mysql -maxdepth 1 -type d -mtime +30
find /db_bak/mysql_bak/mysql -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;echo ""
END_TIME=`date`
echo "############## clean up end at $END_TIME ##############"
echo ""

4.3 定时任务

运行脚本
每天凌晨 4:10 分清理 30 天之前的备份,
每天 4:30 分使用 xtrabackup 进行备份,
注意只有周六是全备,其他时间均是增备。
#crontab -e
10 4 * * * /home/mysql/scripts/cleanup.sh >> /home/mysql/scripts/cleanup.log 2>&1
30 4 * * * /home/mysql/scripts/backup.sh >> /home/mysql/scripts/backup.log 2>&1

5.PostgreSQL逻辑备份

以下是一个用于定时备份 PostgreSQL 数据库的示例脚本。这个脚本将使用 pg_dump 工具来创建数据库备份,然后将备份文件保存到指定的目录中,并可选择保留最近一段时间内的备份文件

5.1 备份脚本

vi /data/script_name.sh #!/bin/bash# PostgreSQL数据库相关信息
db_host="localhost"
db_port="5432"
db_name="database_name"
db_user="database_user"
db_password="database_password"# 备份存储目录
backup_dir="/data/backup/folder"# 保留备份的天数
retention_days=7# 创建备份目录
mkdir -p $backup_dir# 备份文件名
backup_file="$backup_dir/backup_$(date +'%Y%m%d%H%M%S').sql"# 执行备份
PGPASSWORD=$db_password 
pg_dump -h $db_host -p $db_port -U $db_user -F c -b -v -f "$backup_file" $db_nameif [ $? -eq 0 ]; thenecho "数据库备份成功: $backup_file"# 删除旧的备份文件find $backup_dir -name "backup_*.sql" -type f -mtime +$retention_days -exec rm -f {} \;
elseecho "数据库备份失败."
fi

5.2 定时任务

在命令行输入:
#crontab -e
#每天定时凌晨2点定时任务
0 2 * * * /data/script_name.sh

5.3 备份恢复

--恢复
drop database jmedb;
create database jmedb;;
psql --file=jmedb.sql   --先查看可否有创建数据库的语句 
psql --dbname=db2 --file=jmedb.sql   --先查看可否有创建数据库的语句

6.PostgreSQL物理备份

pg_rman是一个开源的PostgreSQL备份软件,pg_rman跑的不是流复制协议,而是文件拷贝,所以pg_rman必须和数据库Server安装在一起.

6.1 备份脚本

#!/bin/bashsource /home/postgres/.bash_profileDATE=`date +%Y%m%d`;
PG_HOME=/home/postgres
BACK_LOG=/home/postgres/log/pg_rman_${DATE}.log#START BACKUP
echo "START BACKUP" > $BACK_LOG
#执行备份命令
pg_rman backup --backup-mode=full -B /rmanbk >> $BACK_LOG
#备份集校验
pg_rman validate >> $BACK_LOG
#检查备份是否成功
error_num=`pg_rman show | awk 'BEGIN{n=0}{if(NR > 3 && $8 != "OK")n++}END{print n}'`
if [ $error_num > 0 ];thenmessage="Postgres 数据库服务器${hostname}在${DATE}备份失败" echo $message
fi
#清理无效备份集
pg_rman purge >> $BACK_LOG
echo "BACKUP  END" >> $BACK_LOG

6.2 备份恢复

--原地恢复,使用新的$PGDATA恢复
pg_ctl stop 
rm -rf /postgresql/pgdata/    
pg_rman restore -B /rmanbk-- 检查配置文件是否有问题,若无问题则可以启动PG
pg_ctl start--检验数据是否正确
启动PG后,会删除recovery.signal文件

7.openGauss备份
7.1 备份脚本

vi /home/omm/backup.sh# database dump shell
# you should change the GAUSSHOME GAUSSPORT GAUSSDATA DUMP_USER DUMP_PASSWORD
#!/bin/bash
source /etc/profile
source /home/omm/.bash_profile
export GAUSSHOME=/opt/gaussdb/app
export GAUSSPORT=26000
export GAUSSDATA=/gaussdb/data/dn1
export PATH=$PGHOME/bin:$PATH
DUMP_USER=ysla
DUMP_PASSWORD='jeames007@HW'
CUR_DATE=`date "+%Y-%m-%d-%H%M"`
dbnamelist=`cat db.txt`#Loading DBLIST
gsql -p ${GAUSSPORT} postgres -c "select datname from pg_database where datname not in ('template1','template0','postgres')" -t | grep -v '^$' >db.txt#save directory
SAVE_BASE_DIR="/gaussdb/dump_dir"
DAT_FILE_DIR="${SAVE_BASE_DIR}/${CUR_DATE}"
if [ -d ${DAT_FILE_DIR} ]then :elsemkdir -p ${DAT_FILE_DIR}
fi
# The real backup step!
echo "`date "+%Y-%m-%d-%H%M"` begin backup db "
for dbname in ${dbnamelist}
do
gs_dump -E UTF8 ${dbname} -U ${DUMP_USER} -W ${DUMP_PASSWORD} -p ${GAUSSPORT} -F p -f ${DAT_FILE_DIR}/${dbname}_${CUR_DATE}.sql
gs_dumpall -l ${dbname} -U ${DUMP_USER} -W ${DUMP_PASSWORD} -p ${GAUSSPORT} -g -f ${DAT_FILE_DIR}/global_data_${dbname}_${CUR_DATE}.sql
done
tar -cjvf ${DAT_FILE_DIR}.tar.gz /${DAT_FILE_DIR} --remove-files
echo "`date "+%Y-%m-%d-%H%M"` end backup db "

7.2 定时任务

在命令行输入:
#crontab -e
30 02 * * * sh /home/omm/backup.sh

7.3 备份清理

每天都进行备份,如果备份天数过多不清理,
可能使目录打满,因此需要添加备份清理策略
在命令行输入:
#crontab -e
30 03 * * * find /gaussdb/dump_dir  -not -path '*/\.*' -mtime +30  -type f -name *.tar.gz -exec rm -rf {} \;"

转载至
墨天轮
备份脚本

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

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

相关文章

聊聊springboot项目如何利用jmh来进行基准测试

前言1、什么是JMHJMH(Java Microbenchmark Harness)是由OpenJDK团队开发的一个用于Java微基准测试工具套件,主要是基于方法层面的基准测试,精度可以达到纳秒级。它提供了一种标准、可靠且可重复的方式来衡量Java代码的性能,包括方法调用、对象创建以及其他类型的 JVM 级别…

echart - x轴文字太长换行、文字倾斜、文字竖直展示

echart - x轴文字太长换行、文字倾斜、文字竖直展示 设置超过几个字换行显示xAxis: {axisLabel: {formatter: function (params) {var str = ""; // 最终拼接成的字符串var paramsLen = params.length;// 获取每项文字的个数var len = 4; …

Vscode+CodeRunner 更加优雅的运行MPICC

Vscode+CodeRunner 更加优雅的运行MPICC 1.安装 在VsCode拓展中安装CodeRunner2.配置点击设置点击 在setting.json中编辑3.setting.json设置 这里我们以cpp为例 偷懒可以直接把下面的json文件做替换 {"workbench.colorTheme": "Quiet Light","remote.…

几行代码,优雅的避免接口重复请求!同事都说好!

背景简介 我们日常开发中,经常会遇到点击一个「按钮」或者进行「搜索」时,请求接口的需求。 如果我们不做优化,连续点击「按钮」或者进行「搜索」,接口会重复请求。❝ 首先,这会导致性能浪费!最重要的,如果接口响应比较慢,此时,我们在做其他操作会有一系列bug! ❞ 那…

Windows远程桌面的奇技淫巧

远程桌面协议(RDP)是一个多通道(multi-channel)的协议,让使用者连上提供微软终端机服务的计算机(称为服务端或远程计算机)。在获取权限后,针对3389进行展开,先查询3389端口是否开启,发现没有开启(也有可能更改了端口),则可以通过注册表进行手动启动。前言Windows远程桌面…

路径规划(2)——A*算法

1、A*算法原理搜索区域(The Search Area):图中的搜索区域被划分为了简单的二维数组,数组每个元素对应一个小方格,当然我们也可以将区域等分成是五角星,矩形等,通常将一个单位的中心点称之为搜索区域节点(Node)。   开放列表(Open List):我们将路径规划过程中待检测…

编译安装Kubernetes 1.29 高可用集群(8)--Dashboard和Traefik安装部署

1.部署Dashboard 1.1 在任意k8s-master节点上安装dashboard # helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/ # helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kube…

我跟你说@RefreshScope跟Spring事件监听一起用有坑!

本文记录一下我在 Spring 自带的事件监听类添加 @RefreshScope 注解时遇到的坑,原本这两个东西单独使用是各自安好,但当大家将它们组合在一起时,会发现我们的事件监听代码被重复执行。希望大家引以为鉴,避免重复踩坑。耐心看完,你一定会有所收获! 前置描述 最近有一个用户…

Vue开发环境搭建教程

在搭建Vue开发环境时,通常需要遵循一系列步骤来确保环境配置正确且高效。以下是一个详细的步骤指南,用于在Windows系统上搭建Vue开发环境: 一、安装Node.js下载Node.js:访问Node.js官网(https://nodejs.org/zh-cn/)下载适合您操作系统的Node.js安装包。安装Node.js:双击…

数据血缘系列(2)——什么是数据血缘?

大家好,我是独孤风。在当今数据驱动的商业环境中,数据治理成为企业成功的关键因素之一。对于数据血缘的定义,一直都有争论,本文我们详细探讨下什么是数据血缘,并说明数据血缘能分析什么。 本文为《数据血缘分析原理与实践 》一书读书笔记,部分观点参考自书中原文,如需更…

windows 运行 java程序时 无故停止不动 问题

windows 运行 java程序时 无故停止不动 问题。是 cmd 程序 的 快速编辑模式 引起的。去掉即可。 右键点属性-》将 快速编辑模式 的多选框 去掉

盒子模型和浮动、溢出属性、圆形头像、定位、模态框z-index、透明度修改

【一】盒子模型和浮动 【1】盒子模型盒子模型(Box Model)是指在网页设计中,用于描述和布局元素的一种模型。 它将每个元素看作是一个具有四个边界的矩形盒子,包括内容区域(content)、内边距(padding)、边框(border)和外边距(margin)。【2】组成部分内容区域(Conte…