Git
01|前排提示
git真好用,配置真麻烦。
附:Linux系统上的安装只需要一行命令就到第三步了。
再附:GitHub服务更大更全但经常上不去需要手动修改hosts,Gitee在国内更快更稳定但只有基本服务。
02|本体安装
Windows
- 安装时更改位置
- 只勾选"Git Bash Here"和"Git LFS"
- 默认编辑器推荐选择VSCode
- 环境变量选择只用Git
- 控制台选择Windows
- 其余默认安装
Linux
(sudo) apt/dnf install git -y
03|生成本地ssh密钥
打开控制台/终端,输入 ssh-keygen
,一路默认回车即可。在用户主目录("~/")下的 .ssh/
文件夹生成一对rsa密钥。
选择路径时,一定要输入完整的unix格式或者双右斜杠路径
使用"-C"对密钥添加备注,如邮箱、昵称
04|连通远程库
GitHub
注册账号
进入GitHub,点击右上角"Sign Up"注册,填写相关信息后等待验证加载完毕,通过验证即注册成功。用户名一经选定就不容易更改,谨慎选择。
添加ssh密钥到账户
点击右上角头像,选下拉菜单中的"Settings"设置选项,跳转页面左侧"Access"权限下有条目"SSH and GPG keys",选择,点击右上绿色"New SSH key"按钮,将创建出的密钥对中的.pub文件使用记事本打开,复制全文到"Key"条目,"Title"条目随便写但建议写点有意义的方便管理。
创建仓库并连通
点击右上角加号+,点击菜单中的"New repository"新建仓库,填入仓库名,点击"Create repository"就创建完成。
在本地创建同名文件夹,使用如下命令即可将本地与远程库连同。在过程中可能会跳出GitHub验证,提交相应信息即可。
mkdir {your_repo_name}
cd {your_repo_name}
git init #初始化为git仓库
git config user.name {your_github_name} #设置仓库用户名
git config user.email {your_github_email} #设置用户邮件
git remote add origin {your_repo_link} #添加远程库链接
#创建一些文件并写入内容
git add * #添加所有修改到暂存区
git commit -m "some text" #提交一定要添加信息
git push origin -u master/main #推送到远程分支,GitHub默认main为主分支
Gitee
注册账号
进入官网,点击注册,输入手机号、验证码等相关信息后,即可注册成功。
添加ssh密钥到账户
指向右上角,在下拉菜单中点击“设置”。转到打开的页面,在左侧安全设置中找到SSH密钥,标题任意填写但建议有意义,公钥部分填写.pub文件的全文。
新建仓库并连通
指向右上角的加号+,在下拉菜单中点击新建仓库,填入仓库名默认产生仓库地址,创建仓库即可。
在本地打开终端/控制台,使用以下命令与远程库连通。
shell
mkdir {your_repo_name}
cd {your_repo_name}
git init #初始化为git仓库
git config user.name {your_gitee_name} #设置仓库用户名
git config user.email {your_gitee_email} #设置用户邮件
git remote add origin {your_repo_link} #添加远程库链接
#创建一些文件并写入内容
git add * #添加所有修改到暂存区
git commit -m "some text" #提交一定要添加信息
git push origin master #推送到远程master分支
GPG for GitHub
05|命令集合
git克隆
# 默认在当前目录下创建和版本库名相同的文件夹并下载版本到该文件夹下
$ git clone <远程仓库的网址>
# 指定本地仓库的目录
$ git clone <远程仓库的网址> <本地目录>
# -b 指定要克隆的分支,默认是master分支
$ git clone <远程仓库的网址> -b <分支名称> <本地目录>
分支
# 列出本地的所有分支,当前所在分支以 "*" 标出
$ git branch
# 列出本地的所有分支并显示最后一次提交,当前所在分支以 "*" 标出
$ git branch -v
# 创建新分支,新的分支基于上一次提交建立
$ git branch <分支名>
#修改分支名称,如果不指定原分支名称则为当前所在分支
$ git branch -m [<原分支名称>] <新的分支名称>
# 强制修改分支名称
$ git branch -M [<原分支名称>] <新的分支名称>
# 删除指定的本地分支
$ git branch -d <分支名称>
# 强制删除指定的本地分支
$ git branch -D <分支名称>
增删
# 把指定的文件添加到暂存区中
$ git add <文件路径>
# 添加所有修改、已删除的文件到暂存区中
$ git add -u [<文件路径>]
$ git add --update [<文件路径>]
# 添加所有修改、已删除、新增的文件到暂存区中,省略 <文件路径> 即为当前目录
$ git add -A [<文件路径>]
$ git add --all [<文件路径>]
# 查看所有修改、已删除但没有提交的文件,进入一个子命令系统
$ git add -i [<文件路径>]
$ git add --interactive [<文件路径>]#删除工作区文件,并将这次删除放入缓存区
git rm <file>
#停止追逐文件,但该文件会保留在工作区
git rm --cached <file>
#改名文件,并将改名放入缓存区
git mv <file_or> <file_re>
提交
# 把暂存区中的文件提交到本地仓库,调用文本编辑器输入该次提交的描述信息
$ git commit
# 把暂存区中的文件提交到本地仓库中并添加描述信息
$ git commit -m "<提交的描述信息>"
#重做上一次提交,并包括指定文件的新变化,若无变化则修改提交信息
$ git commit --amend <file> -m "message"
#提交时显示所有diff信息
git commit -v
合并
# 把指定的分支合并到当前所在的分支下
$ git merge <分支名称>
比较
# 比较当前文件和暂存区中文件的差异,显示没有暂存起来的更改
$ git diff
# 比较暂存区中的文件和上次提交时的差异
$ git diff --cached
$ git diff --staged
# 比较当前文件和上次提交时的差异
$ git diff HEAD
# 查看从指定的版本之后改动的内容
$ git diff <commit ID>
# 比较两个分支之间的差异
$ git diff <分支名称> <分支名称>
# 查看两个分支分开后各自的改动内容
$ git diff <分支名称>...<分支名称>
推拉
# 从远程仓库获取最新版本。
$ git pull
# 把本地仓库的分支推送到远程仓库的指定分支
$ git push <远程仓库的别名> <本地分支名>:<远程分支名># 删除指定的远程仓库的分支
$ git push <远程仓库的别名> :<远程分支名>
$ git push <远程仓库的别名> --delete <远程分支名>
记录
# 打印所有的提交记录
$ git log
# 打印从第一次提交到指定的提交的记录
$ git log <commit ID>
# 打印指定数量的最新提交的记录
$ git log -<指定的数量># 重置暂存区,但文件不受影响
# 相当于将用 "git add" 命令更新到暂存区的内容撤出暂存区,可以指定文件
# 没有指定 commit ID 则默认为当前 HEAD
$ git reset [<文件路径>]
$ git reset --mixed [<文件路径>]
# 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
$ git reset <commit ID>
$ git reset --mixed <commit ID>
# 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
# 相当于调用 "git reset --mixed" 命令后又做了一次 "git add"
$ git reset --soft <commit ID>
# 将 HEAD 的指向改变,撤销到指定的提交记录,文件也修改了
$ git reset --hard <commit ID># 生成一个新的提交来撤销某次提交
$ git revert <commit ID># 把已经提交的记录合并到当前分支
$ git cherry-pick <commit ID>
远程
# 列出已经存在的远程仓库
$ git remote
# 列出远程仓库的详细信息,在别名后面列出URL地址
$ git remote -v
$ git remote --verbose
# 添加远程仓库
$ git remote add <远程仓库的别名> <远程仓库的URL地址>
# 修改远程仓库的别名
$ git remote rename <原远程仓库的别名> <新的别名>
# 删除指定名称的远程仓库
$ git remote remove <远程仓库的别名>
# 修改远程仓库的 URL 地址
$ git remote set-url <远程仓库的别名> <新的远程仓库URL地址>
标签
# 列出所有tag
$ git tag
# 新建一个tag在当前commit
$ git tag [tag]
# 新建一个tag在指定commit
$ git tag [tag] [commit]
# 删除本地tag
$ git tag -d [tag]
# 删除远程tag
$ git push origin :refs/tags/[tagName]
# 查看tag信息
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交所有tag
$ git push [remote] --tags
# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]
杂项
#初始化本地仓库;新建代码库
git init <project-name>
#查看本地仓库状态,简短模式
git status -s
其它知识
搭建git服务器
建议使用Ubuntu
- 安装git,添加git用户(sudo apt install git, sudo adduser git)
- 创建证书登录(/home/git/.ssh/authorizedKeys)
- 选定目录,初始化仓库(sudo git init --bare sample.git)
- owner改为git(sudo chown -R git:git sample:git)
- 禁用shell登录(/etc/passwd git❌1001:1001,,,:home/git:/bin/bash to git❌1001:1001,,,:/home/git:/bin/git-shell)
- 克隆远程仓库
忽略特殊文件(.gitignore)
- 系统自动生成文件、编译中间文件、自己敏感信息文件
- Windows系统.db .ini
- Python 编译.pyc .pyo .dist
- 强制添加使忽略无效:git add -f file
- 校验文件是否被忽略:git check-ignore -v file
- 添加例外文件:在忽略文件中添加"!fileName"
HTTP连不上
git config --global http.postBuffer 50M
SSH密钥
cd ~\.ssh
#t是加密方式,默认rsa;C是备注,可写电子邮箱等
keygen -t rsa -C
#默认不用密码,三下回车;clone时候输入yes
git配置
- 仓库配置文件:
.git/.gitconfig
- 全局配置文件:
~/.gitconfig
- 系统配置文件:
/etc/gitconfig
#显示当前git配置
git config --list
#编辑git配置
git config --global -e
#提交代码时显示的用户信息
git config --global user.name "<name>"
git config --global user.email "<email>"
Jupyter
基础安装配置
安装本体和nbextensions
安装python3.7+
pip install jupyter
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
好用的扩展推荐
Code prettify、Hinterland、Table of Contents (2)、Scratchpad、Collapsible Headings、A 2to3 converter
插入代码控制的插件
Jupyter-notify 网页通知提示插件
pip install jupyternotify
%load_ext jupyternotify # 载入插件
%autonotify -a 30
对所有执行超过30s的cells在运行结束后进行通知,只关注特定的cell,那么可以将%autonotify -a 30
去掉,然后在对应的格子中加入%%notify
,在Jupyter运行的时候自动加载该插件,在需要向Notebook的config文件中加入下列代码
c.InteractiveShellApp.extensions = ['jupyternotify'
]
显示python循环进度
pip install tpdm
from tqdm import tnrange, tqdm_notebook
from time import sleep## 原来的循环
for i in range(10):for j in tqdm_notebook(range(100), desc='2nd loop'):sleep(0.01)## 使用tqdm显示进度的循环
for i in tnrange(10, desc='1st loop'):for j in tqdm_notebook(range(100), desc='2nd loop'):sleep(0.01)
修改默认文件夹路径
- cmd输入
jupyter notebook --generate-config
,在家目录下生成配置文件 - 查找关键词“c.NotebookApp.notebook_dir”,把该行行首的井号(#)删除
- 在该行写入新路径
修改默认浏览器
打开配置文件,找到c.NotebookApp.browser
import webbrowser
webbrowser.register('chrome', None, webbrowser.GenericBrowser(u'C:\\Program Files\\chrome.exe'))
c.NotebookApp.browser = 'chrome'
设置登录密码
- 打开配置文件,找到
c.NotebookApp.allow_password_change
- 设置为
False
,并删掉#
- cmd运行
jupyter notebook password
,设置密码
多语言配置
python3
安装即可,默认选中
java
- 从链接下载zip文件并解压
- cmd进入解压后文件夹,运行
python install.py --sys-prefix
安装java,确保jdk9+ jupyter kernelspec list
在cmd中运行,查看已安装内核
功能使用配置
常用快捷键
快捷键 | 功能 |
---|---|
Ctrl+Enter | 运行本单元 |
Shift+Enter | 运行本单元,选中下个单元 |
Alt+Enter | 运行本单元,在其下插入新单元 |
Y | 单元转入代码状态 |
M/Ctrl+M | 单元转入markdown状态 |
A | 在上方插入新单元 |
B | 在下方插入新单元 |
X | 剪切选中的单元 |
Shift+V | 在上方粘贴单元 |
Tab | 自动补全 |
Shift+Tab | 查看帮助文档 |
s | 保存 |
Ctrl+/ | 添加取消注释 |
Ctrl+Shift+- | 切分单元格 |
Ctrl+[] | 删除/添加缩进 |
Shift+M | 合并单元格 |
自定义(命令模式) | 功能目的 |
---|---|
Alt+C | 清除当前单元格输出 |
Alt+Shift+C | 清除所有单元格输出 |
魔法函数
函数使用 | 功能 |
---|---|
%pwd | 显示Jupyter当前的工作空间 |
%hist | 显示当前Jupyter中,所有运行过的历史代码 |
%who | 显示当前Jupyter环境中的所有变量或名称 |
%reset | 删除当前Jupyter环境中的所有变量或名称 |
%time | 计算当前代码行的运行时长 |
%timeit | 计算当前代码行的平均运行时长,默认执行一个语句100000次,给出最快3次的平均值 |
%%timeit | 计算当前cell的代码运行时长 |
%matplotlib | 显示绘图结果的风格,默认为%matplotlib inline,是直接将图片显示在浏览器中,如果希望图片单独生成,可以使用%matplotlib |
%load | 加载本地Python文件或者网络中的Python文件,例如本地脚本文件的加载:%load xxx.py |
%run | 运行本地或网络中的Python文件,例如本地脚本文件的运行:%load xxx.py |
美化配置
- 安装jupyterthemes:
pip install jupyterthemes
jt -l
查看可选样式列表,后缀d为dark模式,l为light模式
jt命令说明(必须jt开头一行写完)
- 使用帮助:-h
- 主题列表: -l
- 主题名称安装: -t
- 代码的字体: -f
- 代码字体大小: -fs(默认值:11 )
- Notebook 字体: -nf
- Notebook 字体大小: -nfs( 默认值: 13 )
- Text/MD 单元格的字体: -tf
- Text/MD 单元格字体大小:-tfs (默认值: 13)
- Pandas DF Fontsize:-dfs(默认值: 9)
- 输出面积字形大小: -ofs(默认值: 8.5 )
- Mathjax 字形大小 (%): -mathfs(默认值: 100)
- 介绍页边距 : -m(默认值: auto)
- 单元格的宽度:-cellw ( 默认值: 980)
- 行高: -lineh(默认值: 170 )
- 光标宽度: -cursw(默认值: 2)
- 光标的颜色:-cursc
- Alt键提示布局:-altp
- Alt键Markdown背景颜色:-altmd
- Alt键输出背景色:-altout
- Vim风格 NBExt* :-vim
- 工具栏可见: -T
- 名称和标识可见: -N
- 标志可见: -kl
- 重置默认主题: -r
- 强制默认字体:-dfonts
jt -t chesterish -f hack -fs 14 -T -ofs 12 #my settings
拓展功能
%load URL #加载网页源代码
%load road #加载本地python文件(.py),绝对路径,使用ctrl+enter执行
%run road #运行本地python文件
!python(3) road #同上,是shell命令的用法
%/!pwd #显示当前路径
在单元格中使用shell命令:!shell
,或者新建终端
命令模式(Esc)和编辑模式(Enter)
扩展命令
%matplotlib inline #在notebook中集成matplotlib图形
openGauss
00|修改后的安装脚本
#!/bin/bash## Author: 齐雅纳(Kyana)由贾军峰老师版本修改
## Date: 2021-11-14
## OS: openEuler20.03LTS x86_64[最小硬件配置:2c/4G]
## Database:openGauss 2.1.0
## Description:一键式实现操作系统环境配置、openGauss软件下载、openGauss软件安装等步骤,帮助大家提升安装openGauss数据库效率
## Tips: 请确保操作系统可以连接外网
## Midifies: 更换了2.1版本,有更好的多核调用;############################################################
## 说明:ARM架构的操作系统需要修改脚本的URL地址和YUM源地址。
## 第1步操作修改内容:
## export openGauss_Download_url=https://opengauss.obs.cn-south-1.myhuaweicloud.com/2.1.0/arm/openGauss-2.1.0-openEuler-64bit-all.tar.gz
## 第8步操作修改内容:
## wget -O /etc/yum.repos.d/openEulerOS.repo https://repo.huaweicloud.com/repository/conf/openeuler_aarch64.repo
############################################################## 0.关闭virbr0网卡 [本地虚拟机软件标准化安装openEuler系统会默认存在virbr0网卡,删除该网卡以避免干扰数据库的安装]
## virsh net-destroy default
## virsh net-list
## echo "Net device virbr0 is disabled."## 1.定义主机信息[请根据实际情况修改]
export MY_HOSTNAME=euler ## 主机名
export MY_HOSTIP=192.168.181.157 ## IP地址
export MY_SOFTWARE_DIRECTORY=/soft/openGauss ## 软件包所在目录
export MY_XML=/soft/openGauss/clusterconfig.xml ## 集群配置文件XML
export openGauss_Download_url=https://opengauss.obs.cn-south-1.myhuaweicloud.com/2.0.0/x86_openEuler/openGauss-2.0.0-openEuler-64bit-all.tar.gz ## openGauss软件包下载地址## 1. 设置主机名并配置hosts文件
hostnamectl set-hostname $MY_HOSTNAME
sed -i '/$MY_HOSTIP/d' /etc/hosts
echo "$MY_HOSTIP $MY_HOSTNAME #Gauss OM IP Hosts Mapping" >> /etc/hosts
cat /etc/hosts
echo "1.Configure /etc/hosts completed."
echo -e "\n"## 2. 关闭防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
echo "Firewalld " `systemctl status firewalld|grep Active`
echo "2.Disable firewalld service completed."
echo -e "\n"## 3. 关闭SELinux
sed -i '/^SELINUX=/d' /etc/selinux/config
echo "SELINUX=disabled" >> /etc/selinux/config
cat /etc/selinux/config|grep "SELINUX=disabled"
echo "3.Disable SELINUX completed."
echo -e "\n"## 4. 设置操作系统字符集编码
echo "LANG=en_US.UTF-8" >> /etc/profile
source /etc/profile
echo $LANG
echo "4.Configure encoding completed."
echo -e "\n"## 5. 设置操作系统时区
rm -fr /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date -R
hwclock
echo "5.Configure Timezone completed."
echo -e "\n"## 6. 关闭SWAP分区 [对于2G内存的设备,建议待安装完毕后再打开SWAP以间接 “扩容内存容量”]
sed -i '/swap/s/^/#/' /etc/fstab
swapoff -a
free -m
echo "6.Close swap partition completed."
echo -e "\n"## 7. 配置SSH服务,关闭Banner,允许root远程登录
sed -i '/Banner/s/^/#/' /etc/ssh/sshd_config
sed -i '/PermitRootLogin/s/^/#/' /etc/ssh/sshd_config
echo -e "\n" >> /etc/ssh/sshd_config
echo "Banner none " >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner'
echo "7.Configure SSH Service completed."
echo -e "\n"## 8. 配置YUM源、安装依赖包、修改默认Python3版本
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
wget -O /etc/yum.repos.d/openEulerOS.repo https://repo.huaweicloud.com/repository/conf/openeuler_x86_64.repo
yum clean all
yum install -y bzip2 python3
yum install -y libaio-devel libnsl flex bison ncurses-devel glibc-devel patch readline-devel net-tools tar
mv /usr/bin/python /usr/bin/python2_bak
ln -s /usr/bin/python3 /usr/bin/python
python -V
echo "8.Configure Install Packages and change default Python version completed."
echo -e "\n"## 9. 配置 sysctl.conf 和 performance.sh
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_retries1 = 5
net.ipv4.tcp_syn_retries = 5
net.sctp.path_max_retrans = 10
net.sctp.max_init_retransmits = 10
EOF
sysctl -psed -i '/vm.min_free_kbytes/s/^/#/' /etc/profile.d/performance.sh ## Only for openEuler
cat /etc/profile.d/performance.sh|grep vm.min_free_kbytesecho "9.Configure sysctl.conf and performance.sh completed."
echo -e "\n"## 10. 配置资源限制
echo "* soft stack 3072" >> /etc/security/limits.conf
echo "* hard stack 3072" >> /etc/security/limits.conf
echo "* soft nofile 1000000" >> /etc/security/limits.conf
echo "* hard nofile 1000000" >> /etc/security/limits.conf
echo "* soft nproc unlimited" >> /etc/security/limits.d/90-nproc.conf
tail -n 4 /etc/security/limits.conf
tail -n 1 /etc/security/limits.d/90-nproc.conf
echo "10.Configure resource limits completed."
echo -e "\n"## 11. 关闭透明大页[Only for CentOS]
cat >>/etc/rc.d/rc.local<<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; thenecho never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; thenecho never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod +x /etc/rc.d/rc.local
/usr/bin/sh /etc/rc.d/rc.local
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
echo "11.Close transparent_hugepage completed."
echo -e "\n"## 12. 禁用RemoveIPC[Only for openEuler]
sed -i '/^RemoveIPC/d' /etc/systemd/logind.conf
sed -i '/^RemoveIPC/d' /usr/lib/systemd/system/systemd-logind.service
echo "RemoveIPC=no" >> /etc/systemd/logind.conf
echo "RemoveIPC=no" >> /usr/lib/systemd/system/systemd-logind.service
systemctl daemon-reload
systemctl restart systemd-logind
loginctl show-session | grep RemoveIPC
systemctl show systemd-logind | grep RemoveIPC
echo "12.Disable RemoveIPC completed."
echo -e "\n"## 13. 下载openGauss软件包
mkdir -p $MY_SOFTWARE_DIRECTORY
cd $MY_SOFTWARE_DIRECTORY
wget $openGauss_Download_url
echo "13.openGauss software download completed."
echo -e "\n"## 14. 配置XML文件
rm -fr $MY_XML
cat >> $MY_XML <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<ROOT> <!-- openGauss整体信息 --> <CLUSTER> <PARAM name="clusterName" value="dbCluster" /> <PARAM name="nodeNames" value="$MY_HOSTNAME" /> <PARAM name="backIp1s" value="$MY_HOSTIP"/> <PARAM name="gaussdbAppPath" value="/gaussdb/app" /> <PARAM name="gaussdbLogPath" value="/gaussdb/log" /> <PARAM name="gaussdbToolPath" value="/gaussdb/om" /> <PARAM name="corePath" value="/gaussdb/corefile"/> <PARAM name="clusterType" value="single-inst"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- node1上的节点部署信息 --> <DEVICE sn="1000001"> <PARAM name="name" value="$MY_HOSTNAME"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="$MY_HOSTIP"/> <PARAM name="sshIp1" value="$MY_HOSTIP"/> <!--dbnode--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="26000"/> <PARAM name="dataNode1" value="/gaussdb/data/db1"/> </DEVICE> </DEVICELIST>
</ROOT>
EOF
cat $MY_XML
echo "14.Configure XML file completed."
echo -e "\n"## 15. 解压安装包并修改目录权限
echo "Begin to Uncompress openGauss Package and Modify directory permissions:"
cd $MY_SOFTWARE_DIRECTORY
tar -zxvf *all.tar.gz
tar -zxvf *om.tar.gz
ls -l
chmod -R 777 $MY_SOFTWARE_DIRECTORY/../
echo "15.Uncompress openGauss Package completed."
echo -e "\n"## 16. 执行 gs_preinstall
echo "Begin to execute openGauss preinstall:"
python $MY_SOFTWARE_DIRECTORY/script/gs_preinstall -U omm -G dbgrp -X $MY_XML
echo "16.openGauss preinstall completed."
echo -e "\n"## 17. 检查预安装环境
echo "Begin to Check OS environment:"
$MY_SOFTWARE_DIRECTORY/script/gs_checkos -i A -h $MY_HOSTNAME --detail## 18. 执行 gs_install
echo "Begin to execute openGauss install:"
touch /home/omm/install_db
cat >> /home/omm/install_db <<EOF
source ~/.bashrc
gs_install -X $MY_XML --gsinit-parameter="--encoding=UTF8" --dn-guc="max_process_memory=2GB" --dn-guc="shared_buffers=128MB" --dn-guc="cstore_buffers=16MB"
EOF
chown -R omm:dbgrp /home/omm/install_db
su - omm -c "sh /home/omm/install_db"
echo "17.openGauss install completed."
echo -e "\n"## 安装完毕!
echo "openGauss Install completed.congratulations"
echo "Congratulations!!!"
#!/bin/bash
## Author: Kyana modified from JiaJunfeng
## Date: 2021-11-18
## OS: CentOS7.6 [least:2c/4G]
## Database:openGauss 2.1.0## DEL VIRBR0
#ifconfig virbr0 down
#brctl delbr virbr0
#systemctl disable libvirtd.service[REBOOT NEEDED MAYBE]## 0. SET HOST INFO
export MY_HOSTNAME=gs_centos
export MY_HOSTIP=192.68.181.142
export MY_SOFTWARE_DIRECTORY=/soft/openGauss
export MY_XML=/soft/openGauss/clusterconfig.xml
export openGauss_Download_url=https://opengauss.obs.cn-south-1.myhuaweicloud.com/2.1.0/x86/openGauss-2.1.0-CentOS-64bit-all.tar.gz## 1. SET HOSTNAME & hosts FILE
hostnamectl set-hostname $MY_HOSTNAME
sed -i '/$MY_HOSTIP/d' /etc/hosts
echo "$MY_HOSTIP $MY_HOSTNAME #Gauss OM IP Hosts Mapping" >> /etc/hosts
cat /etc/hosts
echo "1.Configure hostname and /etc/hosts completed."
echo -e "\n"## 2. CLOSE FIREWALL & SELinux
systemctl disable firewalld.service
systemctl stop firewalld.service
echo "Firewalld " `systemctl status firewalld|grep Active`
sed -i '/^SELINUX=/d' /etc/selinux/config
echo "SELINUX=disabled" >> /etc/selinux/config
cat /etc/selinux/config|grep "SELINUX=disabled"
echo "2.Disable firewalld service and SELINUX completed."
echo -e "\n"## 3. SET SYS ENCODING & TIMEZONE
#####Can be done via GUI when installing
#echo "LANG=en_US.UTF-8" >> /etc/profile
#source /etc/profile
#echo $LANG
rm -fr /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date -R
hwclock
echo "3.Configure encoding and Timezone completed."
echo -e "\n"## 4. CLOSE SWAP PARTITION
sed -i '/swap/s/^/#/' /etc/fstab
swapoff -a
free -m
echo "4.Close swap partition completed."
echo -e "\n"## 5. SET SSH SERVICE & CLOSE Banner
sed -i '/Banner/s/^/#/' /etc/ssh/sshd_config
sed -i '/PermitRootLogin/s/^/#/' /etc/ssh/sshd_config
echo -e "\n" >> /etc/ssh/sshd_config
echo "Banner none " >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner'
echo "5.Configure SSH Service completed."
echo -e "\n"## 6. SET YUM MIRROR RELIABLE PACKAGE & PYTHON VERSION
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
yum clean all
yum install -y python3 libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel
mv /usr/bin/python /usr/bin/python2_bak
ln -s /usr/bin/python3 /usr/bin/python
python -V
echo "6.Configure Install Packages and change default Python version completed."
echo -e "\n"## 7. SET sysctl.conf & performance.sh
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_retries1 = 5
net.ipv4.tcp_syn_retries = 5
net.sctp.path_max_retrans = 10
net.sctp.max_init_retransmits = 10
EOF
sysctl -p
echo "7.Configure sysctl.conf and performance.sh completed."
echo -e "\n"## 8. SET RESOURCE LIMITITION
echo "* soft stack 3072" >> /etc/security/limits.conf
echo "* hard stack 3072" >> /etc/security/limits.conf
echo "* soft nofile 1000000" >> /etc/security/limits.conf
echo "* hard nofile 1000000" >> /etc/security/limits.conf
echo "* soft nproc unlimited" >> /etc/security/limits.d/90-nproc.conf
tail -n 4 /etc/security/limits.conf
tail -n 1 /etc/security/limits.d/90-nproc.conf
echo "8.Configure resource limits completed."
echo -e "\n"## 9. CLOSE TRANSPARENT HUGEPAGE[Only for CentOS]
cat >>/etc/rc.d/rc.local<<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; thenecho never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; thenecho never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod +x /etc/rc.d/rc.local
/usr/bin/sh /etc/rc.d/rc.local
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
echo "9.Close transparent_hugepage completed."
echo -e "\n"
[reboot here?]
## 10. DOWNLOAD openGauss SOFTWARE PACKAGE
mkdir -p $MY_SOFTWARE_DIRECTORY
cd $MY_SOFTWARE_DIRECTORY
wget $openGauss_Download_url
echo "10.openGauss software download completed."
echo -e "\n"## 11. SET XML CONFIGURE FILE
rm -fr $MY_XML
cat >> $MY_XML <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<ROOT> <CLUSTER> <PARAM name="clusterName" value="dbCluster" /> <PARAM name="nodeNames" value="$MY_HOSTNAME" /> <PARAM name="backIp1s" value="$MY_HOSTIP"/> <PARAM name="gaussdbAppPath" value="/gaussdb/app" /> <PARAM name="gaussdbLogPath" value="/gaussdb/log" /> <PARAM name="gaussdbToolPath" value="/gaussdb/om" /> <PARAM name="corePath" value="/gaussdb/corefile"/> <PARAM name="clusterType" value="single-inst"/> </CLUSTER> <DEVICELIST> <DEVICE sn="1000001"> <PARAM name="name" value="$MY_HOSTNAME"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="$MY_HOSTIP"/> <PARAM name="sshIp1" value="$MY_HOSTIP"/> <!--dbnode--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="23333"/> <PARAM name="dataNode1" value="/gaussdb/data/db1"/> </DEVICE> </DEVICELIST>
</ROOT>
EOF
cat $MY_XML
echo "11.Configure XML file completed."
echo -e "\n"## 12. UNZIP PACKAGE & MODIFY PATH RIGHT
echo "Begin to Uncompress openGauss Package and Modify directory permissions:"
cd $MY_SOFTWARE_DIRECTORY
tar -zxvf *all.tar.gz
tar -zxvf *om.tar.gz
ls -l
chmod -R 777 $MY_SOFTWARE_DIRECTORY/../
echo "12.Uncompress openGauss Package completed."
echo -e "\n"## 13. OPERATE gs_preinstall & CHECK
echo "Begin to execute openGauss preinstall:"
python $MY_SOFTWARE_DIRECTORY/script/gs_preinstall -U omm -G dbgrp -X $MY_XML
echo "Begin to Check OS environment:"
$MY_SOFTWARE_DIRECTORY/script/gs_checkos -i A -h $MY_HOSTNAME --detail
echo "13.openGauss preinstall and check completed."
echo -e "\n"## 14. OPERATE gs_install
echo "Begin to execute openGauss install:"
touch /home/omm/install_db
cat >> /home/omm/install_db <<EOF
source ~/.bashrc
gs_install -X $MY_XML --gsinit-parameter="--encoding=UTF8" --dn-guc="max_process_memory=3GB" --dn-guc="shared_buffers=128MB" --dn-guc="cstore_buffers=16MB"
EOF
chown -R omm:dbgrp /home/omm/install_db
su - omm -c "sh /home/omm/install_db"
echo "14.openGauss install completed."
echo -e "\n"
echo "openGauss Install completed.congratulations"
echo "Congratulations!!!"
01|学习SQL
关系模型
- 表之间的关系“一对一”、“一对多”、“多对一”,通过主键和外键维护
- 主键(ID)唯一定位记录,不能用任何业务相关字段作为主键,主键通常选择自增整数或者全局唯一GUID
- 联合主键是通过多个字段唯一标识记录,允许重复,但不常用
- 通过定义外键实现一对多关系,防止插入无效数据,但会降低数据库效率,通过
ALERT TABLE
实现 - 通过中间表实现多对多关系
- 通过定义新表实现一对一关系,可以提高效率
- 索引是对关系数据库中某一列或者多个列的值进行预排序的数据结构,加快了查询效率
- 索引效率取决于索引列值是否散列,越互不相同效率越高,主键会自动创建索引
- 添加唯一索引保证列值的唯一性
查询数据
-- 选择数据库
USE database_name;-- 查询数据表(带条件)
SELECT * FROM table_name WHERE condition(AND OR NOT is avaliable);-- 投影查询
SELECT column_name( rename, mutiple_name) FROM table_name;-- 排序(逆序)
SELECT FROM ORDER BY column_name (DESC);-- 分页查询
SELECT FROM LIMIT maxium_each_page OFFSET offset_index;-- 聚合查询(返回一个一行一列的表,聚合分组)
SELECT COUNT(*) FROM table_name GROUP BY column_name;
-- 其它聚合函数: SUM, AVG, MAX, MIN, CELING, FLOOR
-- MAX和MIN也可以返回排序最前/后的字符串
-- 匹配不到时候,COUNT返回0,其它返回NULL-- 多表查询(笛卡尔查询,返回二维乘积表,列数是列数和、行数是行数积,可以使用表别名、列别名)-- 链接查询
-- 返回两表都存在的内容
INNER JOIN table_name ON column_name=column_name
-- 返回单表存在的内容,不存在的用NULL填充
LEFT/RIGHT/FULL JOIN
修改数据
-- 添加、替换数据,如果存在就忽略(自增和默认值可以不写,VALUES后可以增加多条数据)
INSERT/REPLACE (IGNORE) INTO (column_name1, column_name2, ...) VALUES (value1, value2, ...)-- 更新记录(如果WHERE没有匹配,不会更新不会报错,没有WHERE更新全表,可以一次更新多条)
UPDATE table_name SET column1=value1, ... WHERE condition-- 删除记录
DELETE FROM table_name WHERE condition
MySQL
mysql -h ipv4 -u root -p
链接远程服务器,真正的服务器是 mysqld
,mysql
是客户端
-- 切换数据库
USE database_name-- 创建数据库
CREATE database_name-- 删除数据表、库
DROP database_name-- 显示数据表、库
SHOW table_name-- 查看表结构
DESC table_name-- 查看创建表的语句
SHOW CREATE TABLE 'table_name-- 新增、修改表列
ALERT TABLE tabel_name ADD/CHANGE COLUMN column_name column_type(VARCHAR(10)) NOT NULL-- 删除表列
ALERT TABLE table_name DROP COLUMN column_name-- 写入查询结果集:把SELECT替换为INSERT
事务
对一些只能执行全部语句或全不执行,不能执行一部分语句的,事务有ACID(原子、一致、隔离、持久)四个特性
-- 显式事务
BEGIN
-- MYSQL STATEMENTS
COMMIT/ROLLBACK
隔离级别
SET TRANSACTION ISOLATION LEVEL level;
在事务开始前设定隔离级别
Read Uncommited
:隔离级别最低,别的事务可以读到本事务更新但未提交的数据,脏读
Read Commited
:可能遇到不可重复读(Non Reaptedable Read)问题,两次读取数据不一致
Repeatable Read
:可能遇到幻读(Phantom Read),可以更新不存在的记录,再一次读取成功
Serializable
:最高级别,默认,串行,什么都不会发生,性能下降