小达博客源码
This commit is contained in:
commit
3617bcfaf0
7
.github/dependabot.yml
vendored
Normal file
7
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 20
|
||||||
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
db.json
|
||||||
|
*.log
|
||||||
|
node_modules/
|
||||||
|
public/
|
||||||
|
.deploy*/
|
||||||
|
_multiconfig.yml
|
||||||
|
package-lock.json
|
||||||
|
yarn.lock
|
||||||
47
_config.butterfly.yml
Normal file
47
_config.butterfly.yml
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
canvas_fluttering_ribbon:
|
||||||
|
enable: true
|
||||||
|
mobile: true # false 手機端不顯示 true 手機端顯示
|
||||||
|
# # 點擊出現愛心
|
||||||
|
# click_heart:
|
||||||
|
# enable: true
|
||||||
|
# mobile: false
|
||||||
|
fireworks:
|
||||||
|
enable: true
|
||||||
|
zIndex: -1 # -1 or 9999
|
||||||
|
mobile: false
|
||||||
|
# 美化頁面顯示
|
||||||
|
beautify:
|
||||||
|
enable: true
|
||||||
|
field: site # site/post
|
||||||
|
title-prefix-icon: '\f0c1'
|
||||||
|
title-prefix-icon-color: "#F47466"
|
||||||
|
# 加載動畫 Loading Animation
|
||||||
|
preloader: true
|
||||||
|
# enable: false
|
||||||
|
# source
|
||||||
|
# 1. fullpage-loading
|
||||||
|
# 2. pace (progress bar)
|
||||||
|
# source: 1
|
||||||
|
# pace theme (see https://codebyzach.github.io/pace/)
|
||||||
|
# pace_css_url:
|
||||||
|
|
||||||
|
# 图片格式 background: url(http://xxxxxx.com/xxx.jpg)
|
||||||
|
# 顔色 background: '#49B202'
|
||||||
|
# 留空 显示白色
|
||||||
|
background: '#efefef'
|
||||||
|
# background: url(https://i.loli.net/2019/09/09/5oDRkWVKctx2b6A.png)
|
||||||
|
|
||||||
|
highlight_theme: mac light
|
||||||
|
highlight_copy: true
|
||||||
|
highlight_lang: true # show the code language 是否显示代码块语言
|
||||||
|
highlight_shrink: false #true代码框不展开,需点击 '>' 打开 false展开 none不显示'>'按钮,代码块展开
|
||||||
|
code_word_wrap: true
|
||||||
|
index_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/BBC19066-E176-47C2-9D22-48C81EE5DF6B.jpeg
|
||||||
|
archive_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg
|
||||||
|
|
||||||
|
|
||||||
|
# Footer设置
|
||||||
|
since: 2022
|
||||||
|
footer_custom_text: Hi, welcome to my Xiaoda blog!
|
||||||
|
# footer是否显示图片背景(与top_img一致)
|
||||||
|
footer_bg: true
|
||||||
0
_config.landscape.yml
Normal file
0
_config.landscape.yml
Normal file
111
_config.yml
Normal file
111
_config.yml
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
# Hexo Configuration
|
||||||
|
## Docs: https://hexo.io/docs/configuration.html
|
||||||
|
## Source: https://github.com/hexojs/hexo/
|
||||||
|
|
||||||
|
# Site
|
||||||
|
title: Xiaoda的博客
|
||||||
|
#subtitle: 'XiaodaBlog'
|
||||||
|
description: '欢迎访问小达的博客!'
|
||||||
|
keywords: 编程
|
||||||
|
author: Wen Yongda
|
||||||
|
language: zh-CN
|
||||||
|
timezone: 'Asia/Shanghai'
|
||||||
|
|
||||||
|
# URL
|
||||||
|
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
|
||||||
|
url: http://example.com
|
||||||
|
permalink: :year/:month/:day/:title/
|
||||||
|
permalink_defaults:
|
||||||
|
pretty_urls:
|
||||||
|
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
|
||||||
|
trailing_html: true # Set to false to remove trailing '.html' from permalinks
|
||||||
|
|
||||||
|
# Directory
|
||||||
|
source_dir: source
|
||||||
|
public_dir: public
|
||||||
|
tag_dir: tags
|
||||||
|
archive_dir: archives
|
||||||
|
category_dir: categories
|
||||||
|
code_dir: downloads/code
|
||||||
|
i18n_dir: :lang
|
||||||
|
skip_render:
|
||||||
|
|
||||||
|
# Writing
|
||||||
|
new_post_name: :title.md # File name of new posts
|
||||||
|
default_layout: post
|
||||||
|
titlecase: false # Transform title into titlecase
|
||||||
|
external_link:
|
||||||
|
enable: true # Open external links in new tab
|
||||||
|
field: site # Apply to the whole site
|
||||||
|
exclude: ''
|
||||||
|
filename_case: 0
|
||||||
|
render_drafts: false
|
||||||
|
post_asset_folder: true
|
||||||
|
marked:
|
||||||
|
prependRoot: true
|
||||||
|
postAsset: true
|
||||||
|
relative_link: false
|
||||||
|
future: true
|
||||||
|
highlight:
|
||||||
|
enable: true
|
||||||
|
line_number: false
|
||||||
|
auto_detect: false
|
||||||
|
tab_replace:
|
||||||
|
# wrap: true
|
||||||
|
hljs: true
|
||||||
|
prismjs:
|
||||||
|
enable: false
|
||||||
|
preprocess: true
|
||||||
|
line_number: false
|
||||||
|
tab_replace: ''
|
||||||
|
|
||||||
|
# Home page setting
|
||||||
|
# path: Root path for your blogs index page. (default = '')
|
||||||
|
# per_page: Posts displayed per page. (0 = disable pagination)
|
||||||
|
# order_by: Posts order. (Order by date descending by default)
|
||||||
|
index_generator:
|
||||||
|
path: ''
|
||||||
|
per_page: 10
|
||||||
|
order_by: -date
|
||||||
|
|
||||||
|
# Category & Tag
|
||||||
|
default_category: uncategorized
|
||||||
|
category_map:
|
||||||
|
tag_map:
|
||||||
|
|
||||||
|
# Metadata elements
|
||||||
|
## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta
|
||||||
|
meta_generator: true
|
||||||
|
|
||||||
|
# Date / Time format
|
||||||
|
## Hexo uses Moment.js to parse and display date
|
||||||
|
## You can customize the date format as defined in
|
||||||
|
## http://momentjs.com/docs/#/displaying/format/
|
||||||
|
date_format: YYYY-MM-DD
|
||||||
|
time_format: HH:mm:ss
|
||||||
|
## updated_option supports 'mtime', 'date', 'empty'
|
||||||
|
updated_option: 'mtime'
|
||||||
|
|
||||||
|
# Pagination
|
||||||
|
## Set per_page to 0 to disable pagination
|
||||||
|
per_page: 10
|
||||||
|
pagination_dir: page
|
||||||
|
|
||||||
|
# Include / Exclude file(s)
|
||||||
|
## include:/exclude: options only apply to the 'source/' folder
|
||||||
|
include:
|
||||||
|
exclude:
|
||||||
|
ignore:
|
||||||
|
|
||||||
|
# Extensions
|
||||||
|
## Plugins: https://hexo.io/plugins/
|
||||||
|
## Themes: https://hexo.io/themes/
|
||||||
|
# theme: landscape
|
||||||
|
theme: butterfly
|
||||||
|
|
||||||
|
# Deployment
|
||||||
|
## Docs: https://hexo.io/docs/one-command-deployment
|
||||||
|
deploy:
|
||||||
|
type: 'git'
|
||||||
|
repo: https://gitee.com/wenyongda/xiaoda-blog.git
|
||||||
|
branch: master
|
||||||
33
package.json
Normal file
33
package.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "hexo-site",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"build": "hexo generate",
|
||||||
|
"clean": "hexo clean",
|
||||||
|
"deploy": "hexo deploy",
|
||||||
|
"server": "hexo server"
|
||||||
|
},
|
||||||
|
"hexo": {
|
||||||
|
"version": "6.3.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"cheerio": "^0.22.0",
|
||||||
|
"hexo": "^6.3.0",
|
||||||
|
"hexo-asset-image": "^1.0.0",
|
||||||
|
"hexo-deployer-git": "^3.0.0",
|
||||||
|
"hexo-generator-archive": "^2.0.0",
|
||||||
|
"hexo-generator-category": "^2.0.0",
|
||||||
|
"hexo-generator-index": "^3.0.0",
|
||||||
|
"hexo-generator-json-content": "^4.2.3",
|
||||||
|
"hexo-generator-tag": "^2.0.0",
|
||||||
|
"hexo-renderer-ejs": "^2.0.0",
|
||||||
|
"hexo-renderer-marked": "^6.0.0",
|
||||||
|
"hexo-renderer-pug": "^3.0.0",
|
||||||
|
"hexo-renderer-stylus": "^2.1.0",
|
||||||
|
"hexo-server": "^3.0.0",
|
||||||
|
"hexo-theme-landscape": "^0.0.3",
|
||||||
|
"hexo-theme-volantis": "^5.7.6",
|
||||||
|
"save": "^2.9.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
4
scaffolds/draft.md
Normal file
4
scaffolds/draft.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: {{ title }}
|
||||||
|
tags:
|
||||||
|
---
|
||||||
4
scaffolds/page.md
Normal file
4
scaffolds/page.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: {{ title }}
|
||||||
|
date: {{ date }}
|
||||||
|
---
|
||||||
5
scaffolds/post.md
Normal file
5
scaffolds/post.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: {{ title }}
|
||||||
|
date: {{ date }}
|
||||||
|
tags:
|
||||||
|
---
|
||||||
273
source/_posts/Docker.md
Normal file
273
source/_posts/Docker.md
Normal file
@ -0,0 +1,273 @@
|
|||||||
|
---
|
||||||
|
title: Docker
|
||||||
|
date: 2021-03-23 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg
|
||||||
|
---
|
||||||
|
# Docker
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Docker:海豚,身上背着一堆集装箱
|
||||||
|
|
||||||
|
场景:
|
||||||
|
|
||||||
|
传统的服务器 Docker
|
||||||
|
1G左右 几十兆几百兆
|
||||||
|
CentOS占CPU Docker CPU引擎占用低
|
||||||
|
1-2分钟 几秒
|
||||||
|
安装软件 安装方便
|
||||||
|
部署应用 部署应用,挂载,数据卷
|
||||||
|
多个应用放到一起 每个应用服务都是一个容器,相互隔离
|
||||||
|
一个独立的操作系统 必须依赖于操作系统,推荐使用Linux
|
||||||
|
|
||||||
|
## docker安装:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
|
||||||
|
# 另一种方式
|
||||||
|
curl -sSL https://get.daocloud.io/docker | sh
|
||||||
|
# 如上述两种方式都不行
|
||||||
|
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
|
||||||
|
# 查看所有可安装版本
|
||||||
|
yum list docker-ce --showduplicates | sort -r
|
||||||
|
# 安装
|
||||||
|
yum install docker-ce-18.03.1.ce
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
1、镜像:image。一个镜像代表一个软件。如:redis镜像,mysql镜像,tomcat镜像。。
|
||||||
|
特点:只读
|
||||||
|
2、容器:container。一个镜像只要一启动,称之为启动了一个容器。
|
||||||
|
3、仓库:repository。存储docker中的镜像具体位置
|
||||||
|
远程仓库:在全球范围内有一个远程仓库
|
||||||
|
本地仓库:当前自己机器中下载的镜像存储位置
|
||||||
|
|
||||||
|
Docker配置阿里云镜像加速
|
||||||
|
https://www.cnblogs.com/LUA123/p/11401962.html
|
||||||
|
|
||||||
|
## 查看docker 信息
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker info
|
||||||
|
```
|
||||||
|
|
||||||
|
## 查看docker 镜像 image
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker images
|
||||||
|
```
|
||||||
|
|
||||||
|
## docker 安装镜像 image
|
||||||
|
|
||||||
|
MySQL 5.7
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker pull mysql:5.7
|
||||||
|
```
|
||||||
|
|
||||||
|
## docker 移除镜像 image
|
||||||
|
|
||||||
|
若已有镜像用于容器,请先将容器删除
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker rm -f <CONTAINER ID>
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker image rm hello-world
|
||||||
|
docker rmi hello-world
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 第一个8080是外部海豚上的 第二个8080是内部集装箱上的
|
||||||
|
docker run -p 8080:8080
|
||||||
|
```
|
||||||
|
|
||||||
|
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
|
||||||
|
-d: 后台运行容器,并返回容器 ID;
|
||||||
|
-i: 以交互模式运行容器,通常与 -t 同时使用;
|
||||||
|
-P: 随机端口映射,容器内部端口随机映射到主机的端口
|
||||||
|
-p: 指定端口映射,格式为:主机 (宿主) 端口:容器端口
|
||||||
|
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
|
||||||
|
--name="nginx-lb": 为容器指定一个名称;
|
||||||
|
--dns 8.8.8.8: 指定容器使用的 DNS 服务器,默认和宿主一致;
|
||||||
|
--dns-search example.com: 指定容器 DNS 搜索域名,默认和宿主一致;
|
||||||
|
-h "mars": 指定容器的 hostname;
|
||||||
|
-e username="ritchie": 设置环境变量;
|
||||||
|
--env-file=[]: 从指定文件读入环境变量;
|
||||||
|
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定 CPU 运行;
|
||||||
|
-m : 设置容器使用内存最大值;
|
||||||
|
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
|
||||||
|
--link=[]: 添加链接到另一个容器;
|
||||||
|
--expose=[]: 开放一个端口或一组端口;
|
||||||
|
--volume , -v 绑定一个卷
|
||||||
|
|
||||||
|
docker启动容器
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker start <container id>
|
||||||
|
```
|
||||||
|
|
||||||
|
docker停止容器
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker stop <container id>
|
||||||
|
```
|
||||||
|
|
||||||
|
docker重启容器
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker restart <container id>
|
||||||
|
```
|
||||||
|
|
||||||
|
## docker启动MariaDB
|
||||||
|
|
||||||
|
拉去mariadb镜像
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker pull mariadb:10.2
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker images
|
||||||
|
docker run --name mariadb10.2 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mariadb:10.2
|
||||||
|
```
|
||||||
|
|
||||||
|
## dockerRedis主从复制集群搭建
|
||||||
|
|
||||||
|
拉取redis4.0.11镜像
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker pull redis:4.0.11
|
||||||
|
```
|
||||||
|
|
||||||
|
编辑redis.conf
|
||||||
|
|
||||||
|
redis-master.conf
|
||||||
|
|
||||||
|
```shell
|
||||||
|
vim /root/mysoftware/docker-file/redis/redis-master.conf
|
||||||
|
bind 0.0.0.0 #让redis可以被任意ip访问
|
||||||
|
daemonize yes #让redis服务后台运行
|
||||||
|
# 如需设定密码
|
||||||
|
requirepass masterpassword # 设定密码
|
||||||
|
```
|
||||||
|
|
||||||
|
redis-slave1.conf
|
||||||
|
|
||||||
|
```shell
|
||||||
|
vim /root/mysoftware/docker-file/redis/redis-slave1
|
||||||
|
bind 0.0.0.0 #让redis可以被任意ip访问
|
||||||
|
daemonize yes #让redis服务后台运行
|
||||||
|
# 如需设定密码
|
||||||
|
requirepass masterpassword # 设定密码
|
||||||
|
# 设置主机地址端口 redis5.0以上为 replicaof <master-IP> <master-port>
|
||||||
|
slaveof <master-IP> <master-port>
|
||||||
|
# 查看master ip
|
||||||
|
docker inspect <container id>
|
||||||
|
# 主库有密码必需要配置,<master-password>代表主库的访问密码
|
||||||
|
masterauth <master-password>
|
||||||
|
```
|
||||||
|
|
||||||
|
运行redis容器
|
||||||
|
|
||||||
|
redis-master
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 运行服务
|
||||||
|
docker run -it --name redis-master -v /usr/docker/redis/redis-master.conf:/usr/etc/redis/redis.conf -v /usr/docker/redis/data/:/data -d -p 35379:6379 redis:4.0.11 /bin/bash
|
||||||
|
# 进入容器
|
||||||
|
docker exec -it redis-master bash
|
||||||
|
# 加载配置
|
||||||
|
redis-server /usr/local/etc/redis/redis.conf
|
||||||
|
# 如报错
|
||||||
|
mkdir -p /usr/redis/bin
|
||||||
|
# 测试连接
|
||||||
|
redis-cli -a <master-password>
|
||||||
|
```
|
||||||
|
|
||||||
|
redis-slave1
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 运行服务
|
||||||
|
docker run -it --name redis-slave1 -v /usr/docker/redis/redis-slave1.conf:/usr/etc/redis/redis.conf -v /usr/docker/redis/data/:/data -d -p 35380:6379 redis:4.0.11 /bin/bash
|
||||||
|
# 进入容器
|
||||||
|
docker exec -it redis-slave1 bash
|
||||||
|
# 加载配置
|
||||||
|
redis-server /usr/local/etc/redis/redis.conf
|
||||||
|
# 如报错 Can't chdir to '/usr/redis/bin': No such file or directory
|
||||||
|
mkdir -p /usr/redis/bin
|
||||||
|
# 测试连接
|
||||||
|
redis-cli
|
||||||
|
# 查看主从信息
|
||||||
|
info Replication
|
||||||
|
# 密码认证
|
||||||
|
auth <slave-password>
|
||||||
|
```
|
||||||
|
|
||||||
|
## dockerRedis哨兵高可用集群搭建
|
||||||
|
|
||||||
|
## docker的镜像迁移到另一台服务器
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 找到想要移动的docker容器ID
|
||||||
|
dockerCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
|
58ac9237b040 redis:4.0.11 "docker-entrypoint.s…" 5 hours ago Up 2 hours 0.0.0.0:6380->6379/tcp redis-slave1
|
||||||
|
454bb484f90a redis:4.0.11 "docker-entrypoint.s…" 5 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp redis-master
|
||||||
|
ps -a
|
||||||
|
|
||||||
|
# 提交变更,并且把容器保存成镜像,命名为redis-master
|
||||||
|
docker commit 454bb484f90a redis-master
|
||||||
|
# 把redis-master镜像保存成tar文件
|
||||||
|
docker save redis-master > /root/mysoftware/docker-file/redis/redis-master.tar
|
||||||
|
# 拷贝到新的机器,执行load命令
|
||||||
|
docker load < ./redis-master.tar
|
||||||
|
```
|
||||||
|
|
||||||
|
## 修改运行中的docker容器的端口映射和挂载目录
|
||||||
|
|
||||||
|
方法一:删除原有容器,重建新容器
|
||||||
|
|
||||||
|
参考以上移除容器,启动容器
|
||||||
|
|
||||||
|
方法二:修改配置文件,重启docker服务
|
||||||
|
|
||||||
|
容器配置文件路径:
|
||||||
|
|
||||||
|
/var/lib/docker/containers/[[hash_of_the_container]/hostconfig.json]
|
||||||
|
|
||||||
|
其中的hashofthecontainer是docker镜像的hash值,可以通过docker ps或者docker inspect containername查看。(CONTAINER ID就可以看出来)
|
||||||
|
|
||||||
|
可以到/var/lib/docker/containers目录下,ls -l
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"Binds":["/usr/docker/redis/redis-slave2.conf:/usr/local/etc/redis/redis.conf"],"ContainerIDFile":"","LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default","PortBindings":{"6379/tcp":[{"HostIp":"","HostPort":"6381"}]},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"shareable","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":[],"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DeviceCgroupRules":null,"DiskQuota":0,"KernelMemory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":null,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0}
|
||||||
|
```
|
||||||
|
|
||||||
|
重启docker服务,再启动容器服务就可以了。
|
||||||
|
|
||||||
|
```shell
|
||||||
|
systemctl restart docker
|
||||||
|
docker ps -a
|
||||||
|
docker start <container id>
|
||||||
|
```
|
||||||
|
|
||||||
|
## docker安装code-server
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 拉取镜像
|
||||||
|
docker pull codercom/code-server
|
||||||
|
# 创建宿主机目录
|
||||||
|
mkdir /usr/docker/codeserver
|
||||||
|
# 创建配置文件
|
||||||
|
vim /usr/docker/codeserver/config.yaml
|
||||||
|
|
||||||
|
bind-addr: 127.0.0.1:8080
|
||||||
|
auth: password
|
||||||
|
password: 123456
|
||||||
|
cert: false
|
||||||
|
|
||||||
|
# 创建并启动容器 # -u 表示以 root用户运行
|
||||||
|
docker run -d -u root -p 8088:8080 --name code-server -v /usr/docker/codeserver/config.yaml:/root/.config/code-server/config.yaml -v /usr/docker/codeserver:/home/code codercom/code-server
|
||||||
|
```
|
||||||
28
source/_posts/Hexo.md
Normal file
28
source/_posts/Hexo.md
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
title: Hexo
|
||||||
|
date: 2022-11-18 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
---
|
||||||
|
|
||||||
|
# Hexo
|
||||||
|
|
||||||
|
启动本地开发服务器
|
||||||
|
|
||||||
|
```shell
|
||||||
|
hexo server
|
||||||
|
# or
|
||||||
|
hexo s
|
||||||
|
```
|
||||||
|
|
||||||
|
清空本地缓存
|
||||||
|
|
||||||
|
```shell
|
||||||
|
hexo clean
|
||||||
|
```
|
||||||
|
|
||||||
|
发布到Git上
|
||||||
|
|
||||||
|
```shell
|
||||||
|
hexo g -d
|
||||||
|
```
|
||||||
|
|
||||||
27
source/_posts/Jenkins.md
Normal file
27
source/_posts/Jenkins.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
title: Jenkins
|
||||||
|
date: 2022-11-09 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg
|
||||||
|
---
|
||||||
|
# Jenkins
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# 删除文件夹
|
||||||
|
rmdir /q /s C:\Program" "Files\nginx-1.23.2\html\dist
|
||||||
|
# 复制文件夹到指定目录
|
||||||
|
xcopy /y /e /i C:\Users\Administrator\Documents\source\XiaoDaERP-Vben\dist C:\Program" "Files\nginx-1.23.2\html\dist
|
||||||
|
# 发送文件(文件夹)到Linux远程服务器上
|
||||||
|
pscp -r -l root -pw Wyd210213 C:\Users\Administrator\Documents\source\XiaoDaERP-Vben\dist 8.140.174.251:/usr/local/nginx/html
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker run -d -p 80:80 -p 443:443 --name nginxweb --privileged=true
|
||||||
|
-v /usr/local/nginx/html/:/usr/share/nginx/html
|
||||||
|
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
|
||||||
|
-v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d
|
||||||
|
-v /usr/local/nginx/logs:/var/log/nginx nginx
|
||||||
|
|
||||||
|
|
||||||
|
ps aux | grep "nginx: worker process" | awk '{print $1}'
|
||||||
|
```
|
||||||
535
source/_posts/Linux.md
Normal file
535
source/_posts/Linux.md
Normal file
@ -0,0 +1,535 @@
|
|||||||
|
---
|
||||||
|
title: Linux
|
||||||
|
author: 文永达
|
||||||
|
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg
|
||||||
|
|
||||||
|
---
|
||||||
|
# Linux
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
|
||||||
|
在linux系统中,没有盘符的概念。
|
||||||
|
一个盘。/根目录
|
||||||
|
没有图形化界面
|
||||||
|
通过指令操作
|
||||||
|
|
||||||
|
linux指令是可以传参数的。
|
||||||
|
|
||||||
|
在Linux系统下,万事万物皆文件。
|
||||||
|
|
||||||
|
## Linux的文件结构(19个)
|
||||||
|
|
||||||
|
bin:存放的是二进制的可以执行文件。(重点)
|
||||||
|
sbin:存放的是二进制的可以执行文件。super,只有root用户才能访问
|
||||||
|
etc:存放系统配置文件(重点)
|
||||||
|
usr:用来存放共享的系统资源
|
||||||
|
home:家目录(重点)
|
||||||
|
root:就是root用户的家目录
|
||||||
|
dev:存放设备文件
|
||||||
|
|
||||||
|
## Linux指令
|
||||||
|
|
||||||
|
ip addr(ip a):查看主机的ip地址
|
||||||
|
clear:清屏
|
||||||
|
cd:进入指定的目录
|
||||||
|
ls:列出当前目录下的所有文件及目录
|
||||||
|
ls -l:给ls指令传了一个参数l。等同于ll。列出当前目录下的所有文件及目录的详情。
|
||||||
|
ls bin:ls后可以接目录名,要么接绝对路径。
|
||||||
|
tab键:提示作用。自动补全。
|
||||||
|
cd (cd ~):代表回到家目录
|
||||||
|
pwd:查看当前所在的目录
|
||||||
|
方向键↑和↓:浏览历史指令
|
||||||
|
|
||||||
|
mkdir:创建目录
|
||||||
|
mkdir -p:创建多级目录
|
||||||
|
cp aa.txt init:复制粘贴。把aa.txt复制到init目录下
|
||||||
|
cp -r init spring:复制粘贴。把init目录以及包含的文件复制到spring目录下
|
||||||
|
mv aa.txt xiaoqiang.txt:重命名。把aa.txt重命名为xiaoqiang.txt。
|
||||||
|
mv bb.txt spring:移动。把bb.txt移动到spring目录。
|
||||||
|
mv -f spring aaaaa:在覆盖前不提示
|
||||||
|
mv -r aaaaa bbbbb:强行覆盖。前提是被覆盖的目录和覆盖的目录要结构相同。(慎用)
|
||||||
|
rm xiaoqiang.txt:删除xiaoqiang.txt
|
||||||
|
rm -f spring.xml:强行删除spring.xml,没有确认提示
|
||||||
|
rm -r init:递归删除init目录
|
||||||
|
rm -rf bbbbb:递归删除bbbbb并且没有确认提示(慎用)
|
||||||
|
rmdir aa:删除空目录aa(用的很少)
|
||||||
|
rm -rf *:删除所有的目录及文件(慎用)
|
||||||
|
|
||||||
|
cat:显示文本文件的内容(一部分)。.java,.py,.c++,.xml,.html,.js,.css
|
||||||
|
more:分页显示文本文件的内容。只能向下查看,不能向上翻页。
|
||||||
|
less:分页显示文本文件的内容。上下翻页。通过PgUp和PgDn进行上下翻页,↑和↓一行一行的查看。输入q退出查看。
|
||||||
|
top -n 10 xxxx:查看文本文件的前10行
|
||||||
|
tail -n 10 xxxx:查看文本文件的后10行
|
||||||
|
tail -f xxxx:实时监控文本文件的变化
|
||||||
|
Ctrl + c:几乎可以退出所有的操作
|
||||||
|
echo:打印输出一句话。也可以用作向文本文件内写入信息。会自动追加并换行。
|
||||||
|
|
||||||
|
### 压缩:
|
||||||
|
|
||||||
|
1、打包,把多个文件打成一个包。
|
||||||
|
2、压缩,把文件占用的大小进行压缩。
|
||||||
|
|
||||||
|
tar命令:用来进行压缩和解压缩的。
|
||||||
|
-c 建立一个压缩文件(打包)
|
||||||
|
-x 解开一个压缩文件(解包)
|
||||||
|
-z 是否需要使用gzip压缩
|
||||||
|
-v 压缩过程中是否显示文件日志
|
||||||
|
-f 使用的文件名
|
||||||
|
tar -cf:只打包,不压缩,不显示日志
|
||||||
|
tar -xf:解压文件,不显示日志
|
||||||
|
tar -cvf:只打包,不压缩,显示日志
|
||||||
|
tar -xvf:解压文件,显示日志。
|
||||||
|
tar -zcvf:打包压缩,显示日志
|
||||||
|
tar -zxvf:解压(最常用)
|
||||||
|
|
||||||
|
### 系统服务:
|
||||||
|
|
||||||
|
systemstl:操作系统服务。
|
||||||
|
status:查看某个服务的状态
|
||||||
|
stop:终止某个服务
|
||||||
|
start:启动某个服务
|
||||||
|
restart:重启某个服务
|
||||||
|
|
||||||
|
```shell
|
||||||
|
systemctl status mysqld
|
||||||
|
```
|
||||||
|
|
||||||
|
网络服务:network
|
||||||
|
防火墙服务:firewalld
|
||||||
|
Mysql:mysqld
|
||||||
|
systemctl status network
|
||||||
|
|
||||||
|
## 文件详情:(以home目录为例)
|
||||||
|
|
||||||
|
d:说明当前文件是一个目录(- 代表的是文件)
|
||||||
|
rwx:r,可读;w,可写;x,可执行。(代表当前文件的创建者的权限)
|
||||||
|
r-x:代表的是和文件创建者的同组的用户的权限
|
||||||
|
r-x:代表的是其他用户
|
||||||
|
2:链接数
|
||||||
|
root:创建者
|
||||||
|
root:创建者所在的组
|
||||||
|
6:文件占用空间的大小(字节)
|
||||||
|
Apr 11 2018:最后一次修改时间
|
||||||
|
home:文件名或目录名
|
||||||
|
|
||||||
|
## 进程管理
|
||||||
|
|
||||||
|
ps 查看前台进程
|
||||||
|
ps -aux 查看所有进程详细信息 UID 用户 PID 进程ID
|
||||||
|
ps -ef 查看所有进程详细信息 UID 用户 PID 进程ID PPID 父进程ID
|
||||||
|
父进程id为1 为系统进程
|
||||||
|
top 动态显示进程
|
||||||
|
ps -aux|grep network 查看所有进程详细信息,并搜索network进程
|
||||||
|
kill 根据PID,终止进程
|
||||||
|
kill -9 强制终止
|
||||||
|
|
||||||
|
## vi命令 编辑器
|
||||||
|
|
||||||
|
i 切换到编辑模式
|
||||||
|
ESC 切换到命令模式
|
||||||
|
:wq 保存并退出
|
||||||
|
:q 不保存退出
|
||||||
|
:w 保存
|
||||||
|
:q! 强制不保存退出
|
||||||
|
:wq! 强制保存退出
|
||||||
|
a 在光标后插入
|
||||||
|
A 在光标当前行的行尾插入
|
||||||
|
i 在光标前插入
|
||||||
|
I 在光标当前行的行头插入
|
||||||
|
:set nu 显示行号
|
||||||
|
:set nonu 取消显示行号
|
||||||
|
gg 到文本的第一行
|
||||||
|
G 到文本的最后一行
|
||||||
|
u 后退一步 相当于 Ctrl + z
|
||||||
|
Ctrl + r 前进一步
|
||||||
|
Shift + zz 保存退出 跟:wq一样
|
||||||
|
起始行号,结束行号 del 删除对应范围内的行
|
||||||
|
|
||||||
|
安装vim编辑器
|
||||||
|
|
||||||
|
```shell
|
||||||
|
yum install -y vim
|
||||||
|
```
|
||||||
|
|
||||||
|
## 配置网络
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd /etc/sysconfig/network-scripts
|
||||||
|
vi ifcfg-ens33
|
||||||
|
|
||||||
|
TYPE=Ethernet
|
||||||
|
PROXY_METHOD=none
|
||||||
|
BROWSER_ONLY=no
|
||||||
|
BOOTPROTO=dhcp
|
||||||
|
DEFROUTE=yes
|
||||||
|
IPV4_FAILURE_FATAL=no
|
||||||
|
IPV6INIT=yes
|
||||||
|
IPV6_AUTOCONF=yes
|
||||||
|
IPV6_DEFROUTE=yes
|
||||||
|
IPV6_FAILURE_FATAL=no
|
||||||
|
IPV6_ADDR_GEN_MODE=stable-privacy
|
||||||
|
NAME=ens33
|
||||||
|
UUID=08913b58-0bc2-42c5-8b59-6782e0029d7b
|
||||||
|
DEVICE=ens33
|
||||||
|
ONBOOT=yes
|
||||||
|
|
||||||
|
# 修改ONBOOT=yes
|
||||||
|
systemctl restart network
|
||||||
|
|
||||||
|
ip addr
|
||||||
|
```
|
||||||
|
|
||||||
|
## 软件安装
|
||||||
|
|
||||||
|
rpm 本地安装
|
||||||
|
yum centos安装软件 需要源
|
||||||
|
|
||||||
|
安装screenFetch
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#使用wget 下载安装包
|
||||||
|
wget https://github.com/KittyKatt/screenFetch/archive/master.zip
|
||||||
|
#使用unzip解压,unzip需要安装
|
||||||
|
yum install unzip
|
||||||
|
unzip master.zip
|
||||||
|
#移动
|
||||||
|
mv screenFetch-master/screenfetch-dev /usr/bin/screenfetch
|
||||||
|
```
|
||||||
|
|
||||||
|
## 用户
|
||||||
|
|
||||||
|
who am i 查看当前用户
|
||||||
|
who --count 查看当前登录用户数量
|
||||||
|
exit 退出登录
|
||||||
|
groupadd 创建用户组
|
||||||
|
groupdel 删除用户组
|
||||||
|
useradd xiaoqiang -g user 创建一个用户xiaoqiang,并指定用户组user
|
||||||
|
passwd xiaoqiangf 给xiaoqiang用户指定密码
|
||||||
|
su 切换用户 从root切换到其他用户不需要输入密码 如果从其他用户切换到root用户,需要输入密码
|
||||||
|
|
||||||
|
### 权限管理
|
||||||
|
|
||||||
|
Linux 下文件有三种权限 r 读 w写 x可执行
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```shell
|
||||||
|
chmod 755 file
|
||||||
|
```
|
||||||
|
|
||||||
|
## 安装MySQL
|
||||||
|
|
||||||
|
有些Linux会自带MariaDB数据库,所以需要先卸载
|
||||||
|
|
||||||
|
列出安装的MariaDB的包
|
||||||
|
|
||||||
|
```shell
|
||||||
|
rpm -qa | grep mariadb
|
||||||
|
```
|
||||||
|
|
||||||
|
得到查看到的包名
|
||||||
|
|
||||||
|
卸载包 后面加上包名
|
||||||
|
|
||||||
|
```shell
|
||||||
|
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
|
||||||
|
```
|
||||||
|
|
||||||
|
自此下载MariaDB已经完成了
|
||||||
|
|
||||||
|
切换到home目录下
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd /home/
|
||||||
|
```
|
||||||
|
|
||||||
|
安装 wget 并下载yum库
|
||||||
|
|
||||||
|
```shell
|
||||||
|
yum install wget -y
|
||||||
|
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
|
||||||
|
rpm -Uvh mysql80-community-release-el7-1.noarch.rpm
|
||||||
|
cd /etc/yum.repos.d/
|
||||||
|
vim mysql-community.repo
|
||||||
|
```
|
||||||
|
|
||||||
|
选择要安装的MySQL版本
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[mysql57-community]
|
||||||
|
name=MySQL 5.7 Community Server
|
||||||
|
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
|
||||||
|
enabled=0 // 将这里的0改为1
|
||||||
|
gpgcheck=1
|
||||||
|
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
|
||||||
|
|
||||||
|
[mysql80-community]
|
||||||
|
name=MySQL 8.0 Community Server
|
||||||
|
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
|
||||||
|
enabled=1 //将这里的1改为0
|
||||||
|
gpgcheck=1
|
||||||
|
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
enabled=0为禁用对应版本的YUM库,enabled=1为启用,默认8.0的配置为enabled=1,安装5.7的话,我们就把8.0的enabled=1修改为enabled=0,然后把5.7的enabled=0修改为enabled=1
|
||||||
|
|
||||||
|
安装MySQL并启动
|
||||||
|
|
||||||
|
```shell
|
||||||
|
yum install mysql-community-server
|
||||||
|
service mysqld start
|
||||||
|
```
|
||||||
|
|
||||||
|
第一步安装成功之后,然后启动MySQL
|
||||||
|
|
||||||
|
如果失败了,提示GPG
|
||||||
|
|
||||||
|
RPM 维护一个单独的密钥环,因为它是一个系统范围的应用程序,而用户的 GPG 公钥环是一个用户特定的文件。要将 MySQL 公钥导入 RPM 密钥环,首先获取密钥,然后使用 rpm --import 导入密钥
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# centos
|
||||||
|
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
|
||||||
|
|
||||||
|
# Ubuntu:
|
||||||
|
wget -q -O - https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | apt-key add -
|
||||||
|
|
||||||
|
yum install mysql-community-server
|
||||||
|
```
|
||||||
|
|
||||||
|
查看MySQL初始密码
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo grep 'temporary password' /var/log/mysqld.log
|
||||||
|
```
|
||||||
|
|
||||||
|
登录MySQL
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql -u root -p
|
||||||
|
```
|
||||||
|
|
||||||
|
设置密码的验证强度等级
|
||||||
|
|
||||||
|
```shell
|
||||||
|
set global validate_password_policy=LOW;
|
||||||
|
```
|
||||||
|
|
||||||
|
设置密码长度为6位
|
||||||
|
|
||||||
|
```shell
|
||||||
|
set global validate_password_length=6;
|
||||||
|
```
|
||||||
|
|
||||||
|
修改MySQL初始密码
|
||||||
|
|
||||||
|
```shell
|
||||||
|
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
|
||||||
|
```
|
||||||
|
|
||||||
|
给root权限开启远程登录
|
||||||
|
|
||||||
|
```shell
|
||||||
|
use mysql;
|
||||||
|
select user,host from user;
|
||||||
|
update user set host = '%' where user = 'root';
|
||||||
|
flush privileges;
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 配置Java环境变量
|
||||||
|
|
||||||
|
将tar.gz格式的jdk解压后移动到/usr目录下
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mv jdk1.8.0_301/ /usr/
|
||||||
|
```
|
||||||
|
|
||||||
|
编辑/etc目录下profile文件 G到最后一行
|
||||||
|
|
||||||
|
```shell
|
||||||
|
vim /etc/profile
|
||||||
|
|
||||||
|
export JAVA_HOME=/usr/jdk1.8.0_301
|
||||||
|
export PATH=$PATH:$JAVA_HOME/bin
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
:wq保存退出
|
||||||
|
|
||||||
|
重新加载配置文件
|
||||||
|
|
||||||
|
```shell
|
||||||
|
source /etc/profile
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CentOS7防火墙
|
||||||
|
|
||||||
|
放行特定端口
|
||||||
|
|
||||||
|
```shell
|
||||||
|
firewall-cmd --add-port=6379/tcp --permanent
|
||||||
|
```
|
||||||
|
|
||||||
|
重新加载防火墙
|
||||||
|
|
||||||
|
```shell
|
||||||
|
firewall-cmd --reload
|
||||||
|
```
|
||||||
|
|
||||||
|
查看防火墙开放的端口
|
||||||
|
|
||||||
|
```shell
|
||||||
|
firewall-cmd --list-all
|
||||||
|
```
|
||||||
|
|
||||||
|
指定作用域开发防火墙端口
|
||||||
|
|
||||||
|
```shell
|
||||||
|
firewall-cmd --zone=public --add-port=3306/tcp --permanent
|
||||||
|
# -zone 作用域
|
||||||
|
# -add-port 添加端口,格式为端口/协议
|
||||||
|
# -permanent 永久生效,没有此参数重启后失效
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 分配Swap
|
||||||
|
|
||||||
|
查看分区大小
|
||||||
|
|
||||||
|
```shell
|
||||||
|
free -h
|
||||||
|
```
|
||||||
|
|
||||||
|
使用dd命令创建一个swap分区
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dd if=/dev/zero of=/home/swap bs=1024 count=4194304
|
||||||
|
```
|
||||||
|
|
||||||
|
count的值是:size(多少M)* 1024
|
||||||
|
|
||||||
|
格式化swap分区
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mkswap /home/swap
|
||||||
|
```
|
||||||
|
|
||||||
|
把格式化后的文件分区设置为swap分区
|
||||||
|
|
||||||
|
```shell
|
||||||
|
swapon /home/swap
|
||||||
|
```
|
||||||
|
|
||||||
|
swap分区自动挂载
|
||||||
|
|
||||||
|
```shell
|
||||||
|
vim /etc/fstab
|
||||||
|
# G 在文件末尾加上
|
||||||
|
/home/swap swap swap default 0 0
|
||||||
|
```
|
||||||
|
|
||||||
|
关闭Swap
|
||||||
|
|
||||||
|
```shell
|
||||||
|
swapoff /home/swap
|
||||||
|
```
|
||||||
|
|
||||||
|
### 修改swap使用率
|
||||||
|
|
||||||
|
swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端
|
||||||
|
|
||||||
|
查看swappiness
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cat /proc/sys/vm/swappiness
|
||||||
|
```
|
||||||
|
|
||||||
|
修改swappiness值为60
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sysctl vm.swappiness=60
|
||||||
|
```
|
||||||
|
|
||||||
|
但是这只是临时性的修改,还要做一步
|
||||||
|
|
||||||
|
```shell
|
||||||
|
vim /etc/sysctl.conf
|
||||||
|
# 编辑这行
|
||||||
|
vm.swappiness=60
|
||||||
|
```
|
||||||
|
|
||||||
|
## Windows Linux子系统
|
||||||
|
|
||||||
|
### WSL2
|
||||||
|
|
||||||
|
打开 Windows Terminal PowerShell
|
||||||
|
|
||||||
|
#### 安装
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
wsl --install
|
||||||
|
```
|
||||||
|
|
||||||
|
微软官方文档 [安装 WSL | Microsoft Docs](https://docs.microsoft.com/zh-cn/windows/wsl/install)
|
||||||
|
|
||||||
|
默认安装Ubuntu 20.04 LTS版
|
||||||
|
|
||||||
|
更改默认安装的Linux发行版
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
wsl --install -d <Distribution Name>
|
||||||
|
```
|
||||||
|
|
||||||
|
/mnt目录下是Windows系统的挂载盘,可直接访问Windows磁盘文件
|
||||||
|
|
||||||
|
#### 通过FinalShell连接WSL2
|
||||||
|
|
||||||
|
1. 需要先删除ssh,再安装ssh
|
||||||
|
|
||||||
|
```shell
|
||||||
|
apt-get remove --purge openssh-server #先删ssh
|
||||||
|
apt-get install openssh-server #再安装ssh
|
||||||
|
rm /etc/ssh/ssh_config
|
||||||
|
service ssh --full-restart #重启ssh服务
|
||||||
|
```
|
||||||
|
|
||||||
|
2. 修改配置文件
|
||||||
|
|
||||||
|
```shell
|
||||||
|
vim /etc/ssh/sshd_config
|
||||||
|
|
||||||
|
Port 6666 # 指定连接端口 6666
|
||||||
|
ListenAddress 0.0.0.0 # 指定连接的IP
|
||||||
|
PasswordAuthentication yes # 开启密码认证
|
||||||
|
PermitRootLogin yes # 开启root用户登录
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
3. 重启ssh(每次重启wsl都要执行该语句)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
service ssh --full-restart
|
||||||
|
```
|
||||||
|
|
||||||
|
4. 重新生成host key
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dpkg-reconfigure openssh-serve
|
||||||
|
```
|
||||||
|
|
||||||
|
FinalShell就可以连接WSL2了
|
||||||
|
|
||||||
|
## 安装Nginx
|
||||||
|
|
||||||
|
```shell
|
||||||
|
tar -zxvf nginx-1.21.4.tar.gz
|
||||||
|
cd nginx-1.21.4/
|
||||||
|
./configure
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
```
|
||||||
450
source/_posts/Oracle.md
Normal file
450
source/_posts/Oracle.md
Normal file
@ -0,0 +1,450 @@
|
|||||||
|
---
|
||||||
|
title: Oracle
|
||||||
|
date: 2021-03-23 10:30:31
|
||||||
|
author: 文永达
|
||||||
|
---
|
||||||
|
# Oracle
|
||||||
|
|
||||||
|
## 1.1 安装Oracle 19c
|
||||||
|
|
||||||
|
### 1.1.1 Linux下安装
|
||||||
|
|
||||||
|
#### 1.1.1.1 rpm方式 `没成功`
|
||||||
|
|
||||||
|
从Oracle官网下载安装包 Linux x86-64 RPM
|
||||||
|
|
||||||
|
https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
|
||||||
|
|
||||||
|
安装帮助文档
|
||||||
|
|
||||||
|
https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/preface.html#GUID-071A6B76-11E3-4421-963E-41DA6F2EF07A
|
||||||
|
|
||||||
|
下载地址
|
||||||
|
|
||||||
|
https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/index.html,浏览器搜索-19c
|
||||||
|
|
||||||
|
安装,首先执行
|
||||||
|
|
||||||
|
```shell
|
||||||
|
yum install oracle-database-preinstall-19c-1.0-3.el7.x86_64.rpm
|
||||||
|
```
|
||||||
|
|
||||||
|
会提示缺少依赖
|
||||||
|
|
||||||
|
可以去RPM源网站下载
|
||||||
|
|
||||||
|
http://www.rpmfind.net/linux/rpm2html/search.php?query=compat-libcap1(x86-64)
|
||||||
|
|
||||||
|
安装
|
||||||
|
|
||||||
|
```shell
|
||||||
|
rpm -ivh compat-libcap1-1.10-7.el7.x86_64.rpm
|
||||||
|
```
|
||||||
|
|
||||||
|
再次执行
|
||||||
|
|
||||||
|
```shell
|
||||||
|
yum install oracle-database-preinstall-19c-1.0-3.el7.x86_64.rpm
|
||||||
|
```
|
||||||
|
|
||||||
|
安装数据库
|
||||||
|
|
||||||
|
```shell
|
||||||
|
yum install oracle-database-ee-19c-1.0-1.x86_64.rpm
|
||||||
|
```
|
||||||
|
|
||||||
|
如果发生错误
|
||||||
|
|
||||||
|
```shell
|
||||||
|
Exception java.lang.UnsatisfiedLinkError: /opt/oracle/product/19c/dbhome_1/oui/lib/linux64/liboraInstaller.so: libnsl.so.1: cannot open shared object file: No such file or directory occurred..
|
||||||
|
java.lang.UnsatisfiedLinkError: /opt/oracle/product/19c/dbhome_1/oui/lib/linux64/liboraInstaller.so: libnsl.so.1: cannot open shared object file: No such file or directory
|
||||||
|
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
|
||||||
|
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
|
||||||
|
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
|
||||||
|
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
|
||||||
|
at java.lang.System.loadLibrary(System.java:1122)
|
||||||
|
at oracle.sysman.oii.oiip.osd.unix.OiipuUnixOps.loadNativeLib(OiipuUnixOps.java:388)
|
||||||
|
at oracle.sysman.oii.oiip.osd.unix.OiipuUnixOps.<clinit>(OiipuUnixOps.java:130)
|
||||||
|
at oracle.sysman.oii.oiip.oiipg.OiipgEnvironment.getEnv(OiipgEnvironment.java:201)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniPair.instantiateEnvVars(OiixIniPair.java:299)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniPair.updateValue(OiixIniPair.java:230)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniPair.<init>(OiixIniPair.java:148)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniFile.readFile(OiixIniFile.java:809)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniFile.readIniFile(OiixIniFile.java:978)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniFile.getProfileString(OiixIniFile.java:385)
|
||||||
|
at oracle.sysman.oii.oiix.OiixOraparam.getOraparamProfileString(OiixOraparam.java:338)
|
||||||
|
at oracle.sysman.oii.oiix.OiixOraparam.getOraparamProfileString(OiixOraparam.java:296)
|
||||||
|
at oracle.sysman.oii.oiix.OiixOraparam.usePrereqChecker(OiixOraparam.java:416)
|
||||||
|
at oracle.sysman.oii.oiic.OiicSessionContext.setVariables(OiicSessionContext.java:1325)
|
||||||
|
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.execute(OiicBaseInventoryApp.java:771)
|
||||||
|
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.main_helper(OiicBaseInventoryApp.java:690)
|
||||||
|
at oracle.sysman.oii.oiic.OiicDetachHome.main(OiicDetachHome.java:420)
|
||||||
|
'DetachHome' failed.
|
||||||
|
Exception in thread "main" java.lang.NullPointerException
|
||||||
|
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.main_helper(OiicBaseInventoryApp.java:706)
|
||||||
|
at oracle.sysman.oii.oiic.OiicDetachHome.main(OiicDetachHome.java:420)
|
||||||
|
Exception java.lang.NoClassDefFoundError: Could not initialize class oracle.sysman.oii.oiip.osd.unix.OiipuUnixOps occurred..
|
||||||
|
java.lang.NoClassDefFoundError: Could not initialize class oracle.sysman.oii.oiip.osd.unix.OiipuUnixOps
|
||||||
|
at oracle.sysman.oii.oiip.oiipg.OiipgEnvironment.getEnv(OiipgEnvironment.java:201)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniPair.instantiateEnvVars(OiixIniPair.java:299)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniPair.updateValue(OiixIniPair.java:230)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniPair.<init>(OiixIniPair.java:148)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniFile.readFile(OiixIniFile.java:809)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniFile.readIniFile(OiixIniFile.java:978)
|
||||||
|
at oracle.sysman.oii.oiix.OiixIniFile.getProfileString(OiixIniFile.java:385)
|
||||||
|
at oracle.sysman.oii.oiix.OiixOraparam.getOraparamProfileString(OiixOraparam.java:338)
|
||||||
|
at oracle.sysman.oii.oiix.OiixOraparam.getOraparamProfileString(OiixOraparam.java:296)
|
||||||
|
at oracle.sysman.oii.oiix.OiixOraparam.usePrereqChecker(OiixOraparam.java:416)
|
||||||
|
at oracle.sysman.oii.oiic.OiicSessionContext.setVariables(OiicSessionContext.java:1325)
|
||||||
|
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.execute(OiicBaseInventoryApp.java:771)
|
||||||
|
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.main_helper(OiicBaseInventoryApp.java:690)
|
||||||
|
at oracle.sysman.oii.oiic.OiicAttachHome.main(OiicAttachHome.java:696)
|
||||||
|
'AttachHome' failed.
|
||||||
|
Exception in thread "main" java.lang.NullPointerException
|
||||||
|
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.main_helper(OiicBaseInventoryApp.java:706)
|
||||||
|
at oracle.sysman.oii.oiic.OiicAttachHome.main(OiicAttachHome.java:696)
|
||||||
|
[SEVERE] An error occurred while registering the Oracle home. Verify logs in /var/log/oracle-database-ee-19c/results/oraInstall.log and /opt/oracle/oraInventory for more details and try again.
|
||||||
|
warning: %post(oracle-database-ee-19c-1.0-1.x86_64) scriptlet failed, exit status 1
|
||||||
|
```
|
||||||
|
|
||||||
|
解决办法
|
||||||
|
|
||||||
|
```shell
|
||||||
|
yum -y install /lib64/libnsl.so.1
|
||||||
|
```
|
||||||
|
|
||||||
|
再次执行安装
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 需要先删除 /opt/oracle/*
|
||||||
|
rm -rf /opt/oracle/*
|
||||||
|
# 再次执行安装 需要加上 --force
|
||||||
|
rpm -ivh oracle-database-ee-19c-1.0-1.x86_64.rpm --force
|
||||||
|
```
|
||||||
|
|
||||||
|
配置数据库
|
||||||
|
|
||||||
|
```shell
|
||||||
|
/etc/init.d/oracledb_ORCLCDB-19c configure
|
||||||
|
```
|
||||||
|
|
||||||
|
过程较长,等待即可
|
||||||
|
|
||||||
|
可能会JDK报错
|
||||||
|
|
||||||
|
```shell
|
||||||
|
yum install libnsl
|
||||||
|
```
|
||||||
|
|
||||||
|
配置号后设置当前用户下的环境变量
|
||||||
|
|
||||||
|
```shell
|
||||||
|
vi ~/.bashrc
|
||||||
|
# 追加oracle环境变量信息
|
||||||
|
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
|
||||||
|
export ORACLE_SID=ORCLCDBexport
|
||||||
|
PATH=$ORACLE_HOME/bin:$PATH
|
||||||
|
|
||||||
|
# 保存退出,执行
|
||||||
|
source ~/.bashrc
|
||||||
|
```
|
||||||
|
验证安装是否正确
|
||||||
|
|
||||||
|
```shell
|
||||||
|
su oracle
|
||||||
|
|
||||||
|
sqlplus / as sysdba
|
||||||
|
|
||||||
|
# 提示
|
||||||
|
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Oct 17 12:25:27 2022
|
||||||
|
Version 19.3.0.0.0
|
||||||
|
|
||||||
|
Copyright (c) 1982, 2019, Oracle. All rights reserved.
|
||||||
|
|
||||||
|
Connected to an idle instance.
|
||||||
|
```
|
||||||
|
|
||||||
|
启动监听
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 1.1.1.2 Docker方式
|
||||||
|
|
||||||
|
安装Docker
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo wget -qO- https://get.docker.com/ | bash
|
||||||
|
docker --version
|
||||||
|
systemctl start docker
|
||||||
|
systemctl status docker
|
||||||
|
systemctl enable docker
|
||||||
|
```
|
||||||
|
|
||||||
|
拉取镜像 `quay.io/maksymbilenko/oracle-12c`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker pull quay.io/maksymbilenko/oracle-12c
|
||||||
|
```
|
||||||
|
|
||||||
|
如果有本地镜像则使用
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker build -t quay.io/maksymbilenko/oracle-12c .
|
||||||
|
```
|
||||||
|
|
||||||
|
构建容器
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 首先创建本地目录
|
||||||
|
mkdir /oracle/data
|
||||||
|
# 授予权限
|
||||||
|
chmod -R 777 /oracle/data
|
||||||
|
docker run --name o12c -d -p 8080:8080 -p 1521:1521 -v /oracle/data:/u01/app/oracle quay.io/maksymbilenko/oracle-12c
|
||||||
|
# 查看日志
|
||||||
|
docker logs -f # 字符串ID
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
安装完成
|
||||||
|
|
||||||
|
数据库连接信息
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
hostname: localhost
|
||||||
|
port: 1521
|
||||||
|
sid: xe
|
||||||
|
service name: xe
|
||||||
|
username: system
|
||||||
|
password: oracle
|
||||||
|
```
|
||||||
|
|
||||||
|
进入容器修改账号密码设置
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 查看所有容器信息
|
||||||
|
docker ps -a
|
||||||
|
docker exec -it [containerID] /bin/bash
|
||||||
|
# 切换成oracle用户
|
||||||
|
su oracle
|
||||||
|
# 进入sqlplus
|
||||||
|
$ORACLE_HOME/bin/sqlplus / as sysdba
|
||||||
|
|
||||||
|
SQL*Plus: Release 12.1.0.2.0 Production on Sun Aug 1 03:15:37 2021
|
||||||
|
|
||||||
|
Copyright (c) 1982, 2014, Oracle. All rights reserved.
|
||||||
|
|
||||||
|
|
||||||
|
Connected to:
|
||||||
|
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
|
||||||
|
|
||||||
|
# 设置密码有效期为无限制
|
||||||
|
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
|
||||||
|
|
||||||
|
Profile altered.
|
||||||
|
|
||||||
|
SQL> alter user SYSTEM account unlock;
|
||||||
|
|
||||||
|
User altered.
|
||||||
|
|
||||||
|
# 创建一个账号为act_test的用户密码设置为test
|
||||||
|
SQL> create user act_test identified by test;
|
||||||
|
|
||||||
|
User created.
|
||||||
|
# 为这个用户赋予管理员的权限
|
||||||
|
SQL> grant dba to act_test;
|
||||||
|
|
||||||
|
Grant succeeded.
|
||||||
|
|
||||||
|
# ctrl + p + q 退出容器(注意不要exit退出,防止容器直接关闭了)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 2.1 Oracle SQL Developer
|
||||||
|
|
||||||
|
### 2.1.1 设置自动提示
|
||||||
|
|
||||||
|
工具栏 -> 工具 -> 首选项 -> 代码编辑器 -> 完成设置
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 2.1.2 设置代码模板
|
||||||
|
|
||||||
|
工具栏 -> 工具 -> 首选项 -> 代码编辑器 -> 代码模板
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 2.1.3 同时打开多个表
|
||||||
|
|
||||||
|
工具栏 -> 工具 -> 首选项 -> 数据库 ->对象查看器
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 3.1 SQL PLUS
|
||||||
|
|
||||||
|
### 3.1.1 解决控制台输错命令删除
|
||||||
|
|
||||||
|
使用`Ctrl + backspace`代替`backspace`
|
||||||
|
|
||||||
|
### 3.1.2 登录
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 以oracle账号登录
|
||||||
|
su oracle
|
||||||
|
$ORACLE_HOME/bin/sqlplus / as sysdba
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 4.1 语法
|
||||||
|
|
||||||
|
### 4.1.1 新建表空间
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLESPACE ACT_DEV
|
||||||
|
DATAFILE
|
||||||
|
'\oracle\data\oradata\xe\FILE_SPECIFICATION1.dbf' SIZE 52428800 AUTOEXTEND ON NEXT 52428800 MAXSIZE 2147483648
|
||||||
|
|
||||||
|
EXTENT MANAGEMENT LOCAL;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.1.2 解除占用
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select l.session_id,o.owner,o.object_name
|
||||||
|
from v$locked_object l,dba_objects o
|
||||||
|
where l.object_id=o.object_id;
|
||||||
|
|
||||||
|
SELECT sid, serial#, username, osuser FROM v$session where sid = sid;
|
||||||
|
|
||||||
|
alter system kill session 'sid,serial#';
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.1.3 修改表
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 表重命名
|
||||||
|
ALTER TABLE BOOK
|
||||||
|
RENAME TO BIND_PHONE_NUMBER;
|
||||||
|
-- 添加表字段Column
|
||||||
|
ALTER TABLE BIND_PHONE_NUMBER
|
||||||
|
ADD (USERNAME VARCHAR2(20) );
|
||||||
|
-- 修改表字段Column名
|
||||||
|
ALTER TABLE BIND_PHONE_NUMBER RENAME COLUMN NAME TO APPNAME;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.1.4 使用关键字做完表名,列名
|
||||||
|
|
||||||
|
使用""形式,如"INDEX"
|
||||||
|
|
||||||
|
## 5.1 内连接与外连接
|
||||||
|
|
||||||
|
### 5.1.1 内连接
|
||||||
|
|
||||||
|
合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行
|
||||||
|
|
||||||
|
语法:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT 字段列表
|
||||||
|
FROM A表 INNER JOIN B表
|
||||||
|
ON 关联条件
|
||||||
|
WHERE 条件;
|
||||||
|
```
|
||||||
|
|
||||||
|
类似于:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
方式一
|
||||||
|
SELECT e.employee_id, e.last_name, e.department_id,
|
||||||
|
d.department_id, d.location_id
|
||||||
|
FROM employees e JOIN departments d
|
||||||
|
ON (e.department_id = d.department_id);
|
||||||
|
|
||||||
|
方式二:
|
||||||
|
SELECT employee_id,department_name
|
||||||
|
FROM employees e,departments d
|
||||||
|
WHERE e.`department_id` = d.department_id;
|
||||||
|
```
|
||||||
|
|
||||||
|
这种查询方式,它会把所有的符合where条件的字段查询出来。但是有这样一种情况,就是两张表的数据有的不存在某种关系。
|
||||||
|
|
||||||
|
缺点:如果我们想要把不满足条件的数据也查询出来,内连接就做不到。
|
||||||
|
|
||||||
|
于是引入外连接。
|
||||||
|
|
||||||
|
### 5.1.2 外连接
|
||||||
|
|
||||||
|
查询多表时一般要求中出现:查询所有的数据时,就一定会用到外连接。
|
||||||
|
|
||||||
|
两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接。没有匹配的行时,结果表中相应的列为空(NULL)。
|
||||||
|
|
||||||
|
#### 5.1.2.1 满外连接
|
||||||
|
|
||||||
|
`FULL JOIN`
|
||||||
|
|
||||||
|
`LEFT JOIN UNION RIGHT JOIN`
|
||||||
|
|
||||||
|
#### 5.1.2.2 左外连接
|
||||||
|
|
||||||
|
语法:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT 字段列表
|
||||||
|
FROM A表 LEFT JOIN B表
|
||||||
|
ON 关联条件
|
||||||
|
WHERE 条件;
|
||||||
|
```
|
||||||
|
|
||||||
|
类似于:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT e.last_name, e.department_id, d.department_name
|
||||||
|
FROM employees e
|
||||||
|
LEFT OUTER JOIN departments d
|
||||||
|
ON (e.department_id = d.department_id) ;
|
||||||
|
```
|
||||||
|
|
||||||
|
`employees`表中的数据会全部显示出来
|
||||||
|
|
||||||
|
#### 5.1.2.3 右外连接
|
||||||
|
|
||||||
|
语法:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT 字段列表
|
||||||
|
FROM A表 RIGHT JOIN B表
|
||||||
|
ON 关联条件
|
||||||
|
WHERE 条件;
|
||||||
|
```
|
||||||
|
|
||||||
|
类似于:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT e.last_name, e.department_id, d.department_name
|
||||||
|
FROM employees e
|
||||||
|
RIGHT OUTER JOIN departments d
|
||||||
|
ON (e.department_id = d.department_id) ;
|
||||||
|
```
|
||||||
|
|
||||||
|
`departments`表中的数据会全部显示出来
|
||||||
|
|
||||||
|
### 5.1.3 UNION的使用
|
||||||
|
|
||||||
|
·语法:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT column,... FROM table1
|
||||||
|
UNION [ALL]
|
||||||
|
SELECT column,... FROM table2
|
||||||
|
```
|
||||||
|
|
||||||
|
UNION 操作符返回两个查询的结果集的并集,去除重复记录。
|
||||||
|
|
||||||
|
UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。
|
||||||
64
source/_posts/Typora.md
Normal file
64
source/_posts/Typora.md
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
---
|
||||||
|
title: Typora
|
||||||
|
date: 2022-11-18 14:48:31
|
||||||
|
author: 文永达
|
||||||
|
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg
|
||||||
|
---
|
||||||
|
|
||||||
|
# Typora
|
||||||
|
|
||||||
|
## 设置引用图片存储路径
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Typora添加右键新建Markdown文件
|
||||||
|
|
||||||
|
### 步骤
|
||||||
|
|
||||||
|
新建一个txt文本文件,写入:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
Windows Registry Editor Version 5.00
|
||||||
|
|
||||||
|
[HKEY_CLASSES_ROOT\.md]
|
||||||
|
@="Typora.md"
|
||||||
|
"Content Type"="text/markdown"
|
||||||
|
"PerceivedType"="text"
|
||||||
|
|
||||||
|
[HKEY_CLASSES_ROOT\.md\ShellNew]
|
||||||
|
"NullFile"=""
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
然后修改.txt后缀为.reg的注册表文件
|
||||||
|
|
||||||
|
然后双击运行
|
||||||
|
|
||||||
|
## 几点说明
|
||||||
|
|
||||||
|
这个方法要先安装`Typora`。如果不安装`Typora`,只是导入上述注册表,在很久以前是可以生效的,但自从某次`Windows`更新之后就失效了,之后的 Windows 要求`[HKEY__ROOT\.md]`项的`@ 值 xxx`必须对应于注册表项`[HKEY_CLASSES_ROOT\xxx]`,这里填写`Typora.md`,是因为`Typora `已经为我们生成了`[HKEY_CLASSES_ROOT\Typora.md]`,可以不用再重入导入,这个项的`@ 值`代表右键新建该类型的名称显示。如果是自定义其他的类型,则必须导入一遍,比如要添加`.py`类型,一个最简的注册表如下:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
Windows Registry Editor Version 5.00
|
||||||
|
|
||||||
|
[HKEY_CLASSES_ROOT\.py]
|
||||||
|
@="PythonFile"
|
||||||
|
|
||||||
|
[HKEY_CLASSES_ROOT\.py\ShellNew]
|
||||||
|
"NullFile"=""
|
||||||
|
|
||||||
|
[HKEY_CLASSES_ROOT\PythonFile]
|
||||||
|
@="Python 脚本"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 可能遇到的问题
|
||||||
|
|
||||||
|
右键新建markdown文件以后,可能会发现文件有几十MB那么大。
|
||||||
|
|
||||||
|
解决方法:`win+R`打开“运行”输入`regedit`打开注册表,打开路径`\HKEY_CLASSES_ROOT\.md\ShellNew`
|
||||||
|
|
||||||
|
删除多余的文件(尤其是有一个什么Markdown File),只保留如下的两项。然后关闭注册表,即可修复bug
|
||||||
|
|
||||||
|

|
||||||
1480
source/_posts/Vue.md
Normal file
1480
source/_posts/Vue.md
Normal file
File diff suppressed because it is too large
Load Diff
36
source/_posts/Winform.md
Normal file
36
source/_posts/Winform.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
title: Winform
|
||||||
|
date: 2022-11-18 14:48:31
|
||||||
|
author: 文永达
|
||||||
|
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg
|
||||||
|
---
|
||||||
|
|
||||||
|
# Winform
|
||||||
|
|
||||||
|
## 1 .Net Framework
|
||||||
|
|
||||||
|
### 1.1 控件属性
|
||||||
|
|
||||||
|
#### 1.1.1 Name
|
||||||
|
|
||||||
|
表示控件名
|
||||||
|
|
||||||
|
```c#
|
||||||
|
this.button1.Name = "button1";
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 1.1.2 Text
|
||||||
|
|
||||||
|
表示控件文本显示
|
||||||
|
|
||||||
|
```c#
|
||||||
|
this.button.Text = "button1";
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.2 控件事件
|
||||||
|
|
||||||
|
#### 1.2.1 button按钮
|
||||||
|
|
||||||
|
##### 1.2.1.1 click
|
||||||
|
|
||||||
|
|
||||||
BIN
source/_posts/image/Oracle/image-20221017111632399.png
Normal file
BIN
source/_posts/image/Oracle/image-20221017111632399.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
BIN
source/_posts/image/Oracle/image-20221017112825105.png
Normal file
BIN
source/_posts/image/Oracle/image-20221017112825105.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
BIN
source/_posts/image/Oracle/image-20221017123327552.png
Normal file
BIN
source/_posts/image/Oracle/image-20221017123327552.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 53 KiB |
BIN
source/_posts/image/Oracle/image-20221017145702216.png
Normal file
BIN
source/_posts/image/Oracle/image-20221017145702216.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
BIN
source/_posts/image/Oracle/image-20221020141231505.png
Normal file
BIN
source/_posts/image/Oracle/image-20221020141231505.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
BIN
source/_posts/image/Typora/image-20221118150139161.png
Normal file
BIN
source/_posts/image/Typora/image-20221118150139161.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
0
themes/.gitkeep
Normal file
0
themes/.gitkeep
Normal file
Loading…
x
Reference in New Issue
Block a user