编程整理

以下是本人编程开发中的一些配置信息整理,好记性不如烂笔头,以资参考(后续还会更新…)

Java 相关环境配置项:

1、环境下载:

标题 链接地址
JDK下载: JDK7下载 JDK8下载 快速下载地址(国内镜像) JDK17下载
Eclipse下载: 最新版 其他版
Maven下载: 下载地址
Spring 插件下载: 下载地址
MySQL下载: 下载地址 安装版下载 压缩版下载
MariaDB 下载: 下载地址
Gradle下载 下载地址

2、环境配置:

Java及部分工具的环境变量配置

1
2
3
4
5
6
7
8
9
10
11
12
13
# JDK配置:
JAVA_HOME JDK的安装路径
CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
Path 追加 ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

# Maven配置:
M2_HOME maven的解压路径
Path 追加 ;%M2_HOME%\bin;

# Gradle环境配置:
GRADLE_HOME Gradle安装或者解压路径
Path 追加 ;%GRADLE_HOME%\bin;
GRADLE_USER_HOME 指定Gradle用户主目录(默认为USER_HOME/.gradle),该配置设置Gradle本地

3、Linux下安装java环境

  • 压缩版安装

    官网下载地址:https://www.oracle.com/java/technologies/downloads/#java8

    下载地址(国内):https://repo.huaweicloud.com/java/jdk/

    解压文件

    1
    tar -zxvf jdk-8u171-linux-i586.tar.gz

    配置java环境变量,打开/etc/profile文件,添加环境变量配置,配置完后使用source /etc/profile 命令使环境生效

  • yum安装:

    检查系统中是否包含有java环境:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ## 先确认以前有没有安装过
    rpm -qa |grep java
    rpm -qa |grep jdk
    rpm -qa |grep gcj
    ## 如果没有输入信息表示没有安装。

    ## 如果安装可以使用rpm -qa | grep java | xargs rpm -e --nodeps 批量卸载所有带有Java的文件 这句命令的关键字是java

    ## 首先检索包含java的列表
    yum list java*

    # 检索1.8的列表
    yum list java-1.8*

    安装并校验:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    ## 安装1.8.0的所有文件 默认jre jdk 安装路径是/usr/lib/jvm 下面
    yum install java-1.8.0-openjdk* -y

    ## 使用命令检查是否安装成功
    java -version

    ## 查询java安装路径
    ## 先用which java查询到执行路径 得到 /usr/bin/java
    $ which java

    ## 再用ls -l查询到具体的路径
    $ ls -l /usr/bin/java

    ## 得到
    lrwxrwxrwx 1 root root 22 Jan 7 11:30 /usr/bin/java -> /etc/alternatives/java

    ## 继续使用ls -l 查看
    $ ls -l /etc/alternatives/java

    ## 得到下面的地址就是java安装目录 即 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64
    lrwxrwxrwx 1 root root 73 Jan 7 11:30 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre/bin/java


    ## 校验java环境
    [root@jnssd ~]# java


    [root@jnssd ~]# javac

4、Maven 仓库配置:

下载地址:http://maven.apache.org/download.cgi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- 本地仓库地址配置 -->
<localRepository>D:/Program Files/apache-maven-3.5.4/repo</localRepository>

<!-- 中央仓库地址配置 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

5、Gradle仓库配置

正如 Maven 的 setting.xml 文件一样,Gradle 也有定义自己的初始化全局配置文件的操作,官方文档指引,以下随机演示一种我采用的方式:

  • GRADLE_HOME/init.d/ 目录下新建 init.gradle 文件

  • 配置仓库地址:将以下代码复制到 init.gradle 文件中,jar 包查找路径从上至下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    allprojects {
    repositories {
    // 使用 maven 本地仓库
    mavenLocal()
    // 使用阿里云代理的中央仓库
    maven { name "aliyun" ; url 'https://maven.aliyun.com/repository/public' }
    // 使用 maven 中央仓库
    mavenCentral()
    }

    buildscript {
    repositories {
    mavenLocal()
    maven { name "aliyun" ; url 'https://maven.aliyun.com/repository/public' }
    mavenCentral()
    }
    }
    }

    注意:mavenLocal() 会从以下路径查找 setting.xml 从而找到本地的 maven 仓库具体路径

  • 或者使用如下的配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    allprojects{
    repositories {
    def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
    def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
    all { ArtifactRepository repo ->
    if(repo instanceof MavenArtifactRepository){
    def url = repo.url.toString()
    if (url.startsWith('https://repo1.maven.org/maven2')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
    remove repo
    }
    if (url.startsWith('https://jcenter.bintray.com/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
    remove repo
    }
    }
    }
    maven {
    url ALIYUN_REPOSITORY_URL
    url ALIYUN_JCENTER_URL
    }
    }
    }
  • 或者这种配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    allprojects{
    repositories {

    def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'
    def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/'
    def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'

    all { ArtifactRepository repo ->
    if(repo instanceof MavenArtifactRepository){
    def url = repo.url.toString()
    if (url.startsWith('https://repo1.maven.org/maven2/') || url.startsWith('http://jcenter.bintray.com/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
    remove repo
    }
    if (url.startsWith('https://maven.google.com/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
    remove repo
    }
    if (url.startsWith('https://plugins.gradle.org/m2/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
    remove repo
    }
    }
    }

    maven {
    allowInsecureProtocol = true
    url ALIYUN_REPOSITORY_URL
    url ALIYUN_GOOGLE_URL
    url ALIYUN_GRADLE_PLUGIN_URL
    }

    }

    buildscript{
    repositories {

    def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'
    def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/'
    def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'

    all { ArtifactRepository repo ->
    if(repo instanceof MavenArtifactRepository){
    def url = repo.url.toString()
    if (url.startsWith('https://repo1.maven.org/maven2/') || url.startsWith('http://jcenter.bintray.com/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
    remove repo
    }
    if (url.startsWith('https://maven.google.com/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
    remove repo
    }
    if (url.startsWith('https://plugins.gradle.org/m2/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
    remove repo
    }
    }
    }

    maven {
    allowInsecureProtocol = true
    url ALIYUN_REPOSITORY_URL
    url ALIYUN_GOOGLE_URL
    url ALIYUN_GRADLE_PLUGIN_URL
    }
    }
    }
    }



  • 以上各种方式尝试下即可

JAVA 配置打包相关:

  • 打成war包的时候排除某些文件夹

    1
    2
    3
    4
    5
    6
    7
    8
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
    <packagingExcludes>template\**,html\**,uploads\**,static\**</packagingExcludes>
    </configuration>
    </plugin>

JAVA 项目在Linux上部署相关

1、Tomcat实现war包部署

这里不做赘述

部署后配置tomcat服务自启等,

  • 如果使用的压缩版:

    • 下载

      Tomcat下载页面:https://tomcat.apache.org/download-80.cgi 选择需要的包

      1
      $ wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.73/bin/apache-tomcat-8.5.73.tar.gz
    • 解压

      1
      $ tar -zxvf apache-tomcat-8.5.73.tar.gz
    • 注册Tomcat为Linux上的systemd服务

      /etc/systemd/system目录下创建一个 tomcat.service文件

      1
      $ nano /etc/systemd/system/tomcat.service

      填入以下信息:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      [Unit]
      Description=The tomcat-server Process Manager
      After=syslog.target network.target remote-fs.target nss-lookup.target

      [Service]
      Type=forking

      Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_144/jre"
      Environment="CATALINA_BASE=/opt/software/apache-tomcat-8.5.73"
      Environment="CATALINA_HOME=/opt/software/apache-tomcat-8.5.73"
      Environment="CATALINA_PID=/opt/software/apache-tomcat-8.5.73/temp/tomcat.pid"

      ExecStart=/opt/software/apache-tomcat-8.5.73/bin/startup.sh
      ExecReload=/bin/kill -USR2 $MAINPID
      ExecStop=/bin/kill -SIGINT $MAINPID
      PrivateTmp=true

      [Install]
      WantedBy=multi-user.target

      重新加载服务配置文件

      1
      $ systemctl daemon-reload
    • 服务启动、停止、重启、开机自启等

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      # 启动
      systemctl start tomcat

      # 停止
      systemctl stop tomcat

      # 重启
      systemctl restart tomcat

      # 查看状态
      systemctl status tomcat

      # 配置开机自启
      systemctl enable tomcat

      # 禁用自启
      systemctl disable tomcat
  • 如果使用的yum安装版:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 安装 (安装目录在 "/usr/share/tomcat"
    yum install tomcat

    # 启动
    systemctl start tomcat

    # 停止
    systemctl stop tomcat

    # 重启
    systemctl restart tomcat

    # 查看状态
    systemctl status tomcat

    # 配置开机自启
    systemctl enable tomcat

    # 禁用自启
    systemctl disable tomcat

2、在Linux上以jar形式运行

2.1、直接运行(但是不能关闭窗口,关闭窗口程序也会关闭)

1
2
3
4
5
java -jar jar包

## eg:

java -jar demo.jar

2.2、程序在后台运行

1
2
3
4
5
nohup java -jar jar包名称  >记录日志 2>&1 &

## eg:

nohup java -jar demo.jar >demo.log 2>&1 &

2.3、程序以服务的形式运行(可配置为程序开机自启)

配置 Spring Boot jar以服务的方式运行

  • 创建shell脚本

    1
    2
    # 这里使用的的nano工具编写文本,可以使用 vim编辑器,看各人爱好
    nano spring-boot-admin.sh
  • 编写shell脚本内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    #!/bin/bash 

    # 配置java环境变量哦,不然程序还是无法启动的
    export JAVA_HOME=/opt/SoftWare/jdk1.8.0_211
    export PATH=${JAVA_HOME}/bin:${PATH}

    #这里可替换为你自己的执行程序,其他代码无需更改 这里的包名为 spring-boot-admin-1.0.0.jar
    APP_NAME=/opt/web/spring-boot-admin-1.0.0.jar
    # 配置jar启动的jvm大小
    # JVM="-server -Xms128m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=128m -XX:MaxPermSize=128m -Djava.awt.headless=true -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"
    JVM="-server -Xms128m -Xmx256m -XX:MetaspaceSize=64M -XX:MaxNewSize=128m -XX:MaxMetaspaceSize=128m -Djava.awt.headless=true"

    # 配置jar包外部配置文件的路径
    APPFILE_PATH="-Dspring.config.location=/opt/web/config/application.properties"
    #使用说明,用来提示输入参数
    usage() {
    echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
    exit 1
    }
    #检查程序是否在运行
    is_exist(){
    pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
    #如果不存在返回1,存在返回0
    if [ -z "${pid}" ]; then
    return 1
    else
    return 0
    fi
    }
    #启动方法
    start(){
    is_exist
    if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
    else
    nohup java $JVM -jar $APPFILE_PATH $APP_NAME > /dev/null 2>&1 &
    echo "${APP_NAME} start success"
    fi
    }
    #停止方法
    stop(){
    is_exist
    if [ $? -eq "0" ]; then
    kill -9 $pid
    else
    echo "${APP_NAME} is not running"
    fi
    }
    #输出运行状态
    status(){
    is_exist
    if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
    else
    echo "${APP_NAME} is NOT running."
    fi
    }
    #重启
    restart(){
    stop
    start
    }
    #根据输入参数,选择执行对应方法,不输入则执行使用说明
    case "$1" in
    "start")
    start
    ;;
    "stop")
    stop
    ;;
    "status")
    status
    ;;
    "restart")
    restart
    ;;
    *)
    usage
    ;;
    esac

  • 启动运行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 启动服务
    sh spring-boot-admin.sh start

    # 停止服务
    sh spring-boot-admin.sh stop

    # 查看服务
    sh spring-boot-admin.sh status

    # 重启服务
    sh spring-boot-admin.sh restart
  • 注册为系统服务

    /etc/systemd/system目录下创建一个spring-boot-admin.service文件,文件内容为:

    (文件也可以在/usr/lib/systemd/system目录下创建,然后使用 ln -l 命令软连接到/etc/systemd/system下)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [Unit]
    # 备注信息
    Description=Springboot project for test auto start
    After=syslog.target network.target nss-lookup.target

    [Service]
    User=root
    Type=forking
    # 这里是指定启动程序的目录
    ExecStart=/bin/sh /opt/web/shell/spring-boot-admin.sh start
    ExecReload=/bin/sh /opt/web/shell/spring-boot-admin.sh restart
    ExecStop=/bin/sh /opt/web/shell/spring-boot-admin.sh stop

    [Install]
    WantedBy=multi-user.target
  • 测试服务执行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # 刷新配置
    systemctl daemon-reload

    # 启动、重启、停止

    # 启动
    systemctl start spring-boot-admin.service

    # 重启
    systemctl restart spring-boot-admin.service
    # 停止
    systemctl stop spring-boot-admin.service

    # 配置开机自启
    systemctl enable spring-boot-admin.service

    # 禁止开机启动
    systemctl disable spring-boot-admin.service

数据库安装

MySQL安装程序

安装版下载地址:https://dev.mysql.com/downloads/installer/

安装很简单,不描述了

MySQL 压缩版安装

压缩版下载地址:https://dev.mysql.com/downloads/mysql/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
服务配置:

1、环境变量
path: MySQL压缩包解压路径 + bin

2、修改配置文件 my-default.ini
basedir = MySQL压缩包解压路径
datadir = MySQL压缩包解压路径/data

3、与bin目录同级创建data文件夹

4、进入命令窗口,访问到mysql 的bin目录下
初始化data文件夹
①初始化出没有密码的账号
mysqld --initialize-insecure --user=mysql

注册mysql
mysqld --install

5、启动服务:net start mysql(若有问题,mysqld -remove 卸载服务)

6、mysql -u root -p 无密码访问
若登录成功,有 Welcome to the MySQL monitor.等提示

7、改密码:update user set password=password("root") where user="root";
如果出问题:使用如下命令修改密码:
update mysql.user set authentication_string=password('root') where user='root' and Host ='localhost';
flush privileges; 必须刷新权限

8、配置远程ip访问
mysql -u root -proot 登录,若登录成功,有 Welcome to the MySQL monitor.等提示时:

输入:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges; 必须刷新权限

9、设置全局的时区
set global time_zone='+8:00';
flush privileges; //必须刷新权限

注:配置多台MySQL服务
其他步骤基本一致,只有注册服务的时候稍有不同,具体如下:

1、注册服务:
mysqld install MySQL8.0 --defaults-file="D:\Program Files\mysql-8.0.19-winx64\my.ini"
这里的**MySQL8.0** 就是服务名称,注意不能中间带空格,好像带空格不生效 ( ̄(∞) ̄) 

2、打开注册表(regedit)找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL8.0
修改 ImagePath 属性 为
"D:\Program Files\mysql-8.0.19-winx64\bin\mysqld" MySQL8.0
(多个MySQL的服务文件地址) (配置多个服务的服务名称)

界面配置
安装 navicat.exe 记住路径
双击 PatchNavicat.exe 找到navicat.exe 安装路径中的 navicat.exe
Navicat 下载地址 (12.X版本):http://download.navicat.com.cn/download/navicat120_premium_cs_x64.exe

如果实在 CentOS 上面用 yum 安装的 mysql ,好像 默认 Linux 上面的mysql 对表的大小写敏感,需添加如下配置
编辑 nano /etc/my.cnf 该目录下的 配置文件 ,添加如下配置:

#配置表名大小写不敏感
lower_case_table_names=1

重启 mysql 服务
systemctl restart mysql

MySQL在Linux上安装

1、查看CentOS自带mysql是否已安装

1
yum list installed | grep mysql

2、如果有,就全部卸载

1
2
3
yum -y remove +数据库名称
### 或者
rpm -qa | grep mysql | xargs rpm -e --allmatches --nodeps

3、下载 MySQL Yum Repository

1
2
3
4
5
6
### 如果找不到wget命令则先yum install wget
### 这个库里面只有MySQL5.7和8.0
wget https://repo.mysql.com//mysql80-community-release-el7-4.noarch.rpm

### 如果需要MySQL5.6版本,使用此库
wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm

4、添加 MySQL Yum Repository

1
2
### 添加 MySQL Yum Repository 到你的系统 repository 列表中,执行
rpm -ivh mysql80-community-release-el7-4.noarch.rpm

5、验证下是否添加成功

1
yum repolist enabled | grep "mysql.*-community.*"

6、选择要启用 MySQL 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
yum repolist all | grep mysql

### 得到如下信息
[root@jnssd ~]# yum repolist all | grep mysql
mysql-cluster-7.5-community/x86_64 MySQL Cluster 7.5 Community disabled
mysql-cluster-7.5-community-source MySQL Cluster 7.5 Community disabled
mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Community disabled
mysql-cluster-7.6-community-source MySQL Cluster 7.6 Community disabled
mysql-cluster-8.0-community/x86_64 MySQL Cluster 8.0 Community disabled
mysql-cluster-8.0-community-source MySQL Cluster 8.0 Community disabled
mysql-connectors-community/x86_64 MySQL Connectors Community enabled: 221
mysql-connectors-community-source MySQL Connectors Community disabled
mysql-tools-community/x86_64 MySQL Tools Community enabled: 135
mysql-tools-community-source MySQL Tools Community - Sou disabled
mysql-tools-preview/x86_64 MySQL Tools Preview disabled
mysql-tools-preview-source MySQL Tools Preview - Sourc disabled
mysql55-community/x86_64 MySQL 5.5 Community Server disabled
mysql55-community-source MySQL 5.5 Community Server disabled
mysql56-community/x86_64 MySQL 5.6 Community Server disabled
mysql56-community-source MySQL 5.6 Community Server disabled
mysql57-community/x86_64 MySQL 5.7 Community Server disabled
mysql57-community-source MySQL 5.7 Community Server disabled
mysql80-community/x86_64 MySQL 8.0 Community Server enabled: 301
mysql80-community-source MySQL 8.0 Community Server disabled
[root@jnssd ~]#

### 当前的mysql8.0是启用的,5.6和5.7版本是被禁用的,如果安装默认使用的是8.0版本,如果需要5.7版本,需要如下操作

yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community

### 或者手动编辑/etc/yum.repos.d/mysql-community.repo 文件来选择,把默认版本的enabled=1改为0,需要版本的enabled=1

7、通过 Yum 来安装 MySQL

1
2
3
4
5
6
7
8
9
### 如果是MySQL5.6版本的,最好指定版本,默认的5.6.51有些问题,最好使用5.6.50版本的比较好,如果需要其他版本,使用如下命令查看:
### 因为使用5.6.51版本的启动后会报[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.错误
yum search mysql --showduplicates

### 如果使用的是MySQL5.7及5.7版本以上的,直接使用如下命令,5.6版本的需要指定版本号
yum -y install mysql-community-server

### 5.6版本的需要指定版本号(具体版本自己选择,这里仅供参考)
yum install mysql-community-server-5.6.50-2.el7

8、启动MySQL

1
2
3
4
5
###(如果是MySQL5.6.51版本的,可能启动不了,卸载MySQL后最好删除掉 /var/lib/mysql 下的相关数据后重新安装并启动,不然可能后续的5.6版本还是无法启动)
service mysqld start

### 查看数据库状态
systemctl status mysqld.service

9、登录mysql(MySQL5.6默认没有密码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
###(注意:5.7以上的版本,为了加强安全性,MySQL为root用户随机生成了一个密码,在error log中,关于error log的位置,具体地址是/var/log/mysqld.log。),5.6版本的默认没有密码就能登录

## 使用的是MySQL5.7版本以上时快速查看密码
grep "password" /var/log/mysqld.log
#得到:
[root@jnssd ~]# grep "password" /var/log/mysqld.log
2021-11-10T06:57:11.199867Z 1 [Note] A temporary password is generated for root@localhost: liZmuk/yp4JJ

### 这里的随机密码是liZmuk/yp4JJ

### 登录(注:mysql5.7以上的版本使用随机密码登录,且在登录后必须修改密码,不然无法进行后续操作,)
mysql -u root -p

### eg:如果在没有修改密码后需要查看用户,5.7以上的会报如下错误
mysql> select user();
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

### 查看数据库也是无法操作的
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

10、修改密码(修改密码的四种方式)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
### 10.1、shell命令行下
mysqladmin -uroot -poldpassword password 'your new password'
### 10.2、sql命令行下
set password = password('your new password');
### 10.3、sql命令行下
update user set authentication_string=password('your new password') where user='root';
### 10.4、sql命令行下
alter user root@'localhost' identified by 'your new password';

### 注意:由于 MySQL5.7版本以上采用了密码强度验证插件 validate_password,故此我们需要设置一个有一定强度的密码;如果设置简单密码会报如下错误:
mysql> SET PASSWORD = PASSWORD('root');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

### 如果不想设置强度密码,需要进行如下配置
#### 首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可
set global validate_password_policy=LOW;
#### 如果设置的密码长度小于8位数,可能也会报错,修改调整密码的长度(5.7版本以上默认密码长度为8位字符以上)
set global validate_password_length=4;

### 这样就能通过上面的修改密码命令修改密码了

#### 查看数据库密码策略(同样必须在修改了密码才能查看!)
show variables like 'validate_password%';

#### eg:
mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

#### 相关的属性值解释
validate_password_check_user_name
validate_password_dictionary_file ## 指定密码验证的文件路径;
validate_password_length ## 固定密码的总长度;默认值8
validate_password_mixed_case_count ## 整个密码中至少要包含大/小写字母的总个数;
validate_password_number_count ## 整个密码中至少要包含阿拉伯数字的个数;
validate_password_policy ## 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
validate_password_special_char_count ## 整个密码中至少要包含特殊字符的个数;

validate_password_length ## 固定密码的总长度;默认值8
validate_password_dictionary_file ## 指定密码验证的文件路径;
validate_password_mixed_case_count ## 整个密码中至少要包含大/小写字母的总个数;
validate_password_number_count ## 整个密码中至少要包含阿拉伯数字的个数;
validate_password_policy ## 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
validate_password_special_char_count ## 整个密码中至少要包含特殊字符的个数;

注意:由于 MySQL5.7版本以上采用了密码强度验证插件 validate_password,故此我们需要设置一个有一定强度的密码;如果设置简单密码会报如下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
mysql> SET PASSWORD = PASSWORD('root');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

### 如果不想设置强度密码,需要进行如下配置
#### 首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可
set global validate_password_policy=LOW;
#### 如果设置的密码长度小于8位数,可能也会报错,修改调整密码的长度(5.7版本以上默认密码长度为8位字符以上)
set global validate_password_length=4;

### 这样就能通过上面的修改密码命令修改密码了

#### 查看数据库密码策略(同样必须在修改了密码才能查看!)
show variables like 'validate_password%';

#### eg:
mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

#### 相关的属性值解释
validate_password_check_user_name
validate_password_dictionary_file ## 指定密码验证的文件路径;
validate_password_length ## 固定密码的总长度;默认值8
validate_password_mixed_case_count ## 整个密码中至少要包含大/小写字母的总个数;
validate_password_number_count ## 整个密码中至少要包含阿拉伯数字的个数;
validate_password_policy ## 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
validate_password_special_char_count ## 整个密码中至少要包含特殊字符的个数;

validate_password_length ## 固定密码的总长度;默认值8
validate_password_dictionary_file ## 指定密码验证的文件路径;
validate_password_mixed_case_count ## 整个密码中至少要包含大/小写字母的总个数;
validate_password_number_count ## 整个密码中至少要包含阿拉伯数字的个数;
validate_password_policy ## 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
validate_password_special_char_count ## 整个密码中至少要包含特殊字符的个数;

11、配置远程登录访问

1
2
3
4
5
6
7
8
9
10
11
12
13
## 1、新建用户远程连接mysql数据库
grant all on *.* to admin@'%' identified by '123456' with grant option;
flush privileges;

### 允许任何ip地址(%表示允许任何ip地址)的电脑用admin帐户和密码(123456)来访问这个mysql server。
### 注意admin账户不一定要存在。

## 2、支持root用户允许远程连接mysql数据库
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;

## 查看系统用户(最好使用 use mysql 切换到mysql数据库中)
select user,host from user;

12、Linux下忽略MySQL表名称大小写

  • 修改/etc/my.cnf文件:

    1
    $ nano /etc/my.cnf
  • 在[mysqld]下加入一行:lower_case_table_names=1

  • 重新启动数据库即可

    1
    $ systemctl restart mysqld

MySQL查看版本号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
## 1、使用命令行登录 mysql -uroot -p,进入的欢迎界面就有版本号,如:
[root@jnssd ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 487032
Server version: 5.6.50 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

## 2、 也可以在Navicat中使用如下语句在命令行中查看:
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.50 |
+-----------+
1 row in set (0.07 sec)

mysql>

## 3、使用 mysql --help | grep Distrib 查看
mysql --help | grep Distrib

MariaDB 压版版安装

下载地址:https://mariadb.org/download/

1
2
3
4
5
6
7
8
# 请以管理员身份运行cmd控制台,该命令会自定创建MariaDB 服务,同时配置端口、密码、允许远程连接访问
mysql_install_db.exe --service=MariaDB --port=3307 --password=root --allow-remote-root-access

# 卸载服务
mysqld --remove MariaDB

# 启动服务
net start MariaDB

MariaDB 安装时初始化相关命令参数

参数 描述
-?, –help 显示帮助信息并退出
-d, –datadir=name 新数据库的数据目录(不输入默认当前解压路径下)
-S, –service=name Windows服务的名称
-p, –password=name root用户密码
-P, –port=# mysqld 端口(指定服务端口)
-W, –socket=name 命名管道名称
-D, –default-user 创建默认用户
-R, –allow-remote-root-access 允许用户以root身份从网络进行远程访问
-N, –skip-networking 不要使用TCP连接,而是使用管道
-i, –innodb-page-size MariaDB 10.2.5起,Innodb页面大小

Linux相关

配置阿里 epel源

1
wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo

安装 epel仓库

1
yum install epel-release

修改系统的hostname

编辑/etc/sysconfig/network文件:

1
[root@demo ~]# nano /etc/sysconfig/network

添加HOSTNAME=mytest 如下:

1
2
3
# Created by cloud-init on instance boot automatically, do not edit.
#
HOSTNAME=mytest

再使用如下命令设置一下:

1
hostnamectl set-hostname mytest

断开xshell连接,重新连接一下,就换为mytest了:如:

1
[root@mytest ~]#

Linux 查找之前打过的命令

  • 第一种:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    history | grep xxx

    #eg: history | grep wget

    [jiang@jnssd software]$ history | grep wget
    798 wget https://github.com/alibaba/nacos/releases/download/2.0.3/nacos-server-2.0.3.tar.gz
    859 wget https://downloads.apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip
    899 wget http://ftp.cuhk.edu.hk/pub/packages/apache.org/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
    902 wget https://downloads.apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip
    1000 wget --no-check-certificate https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz
    1028 wget --no-check-certificate https://codeload.github.com/apache/rocketmq/tar.gz/refs/tags/rocketmq-all-4.9.2
    1033 wget --no-check-certificate https://codeload.github.com/apache/rocketmq/tar.gz/refs/tags/rocketmq-rocketmq-all-4.9.2.tar.gz
    1035 wget https://github.com/apache/rocketmq/archive/rocketmq-all-4.7.1.tar.gz
    1036 wget --no-check-certificate https://github.com/apache/rocketmq/archive/rocketmq-rocketmq-all-4.9.2.tar.gz
    1037 wget --no-check-certificate https://github.com/apache/rocketmq/archive/rocketmq-all-4.9.2.tar.gz
    1041 wget https://github.com/apache/rocketmq/archive/rocketmq-all-4.7.1.tar.gz
    1046 wget https://downloads.apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-source-release.zip
    1084 history | grep wget
    1088 history | grep wget
    [jiang@jnssd software]$
  • 第二种:

    ctrl +r 搜索快捷按键类似于 window 文本查找

Nginx在Linux上安装

1、配置nginx的yum安装源

1
2
3
4
5
6
7
8
9
10
11
## 编辑 Nginx 源  这里设置为中科大的镜像repo
nano /etc/yum.repos.d/nginx.repo

## 配置信息如下:

[nginx-mainline]
name=nginx mainline repo
baseurl=http://mirrors.ustc.edu.cn/nginx/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
module_hotfixes=true

2、安装 Nginx、启动及其他命令等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
### 安装 Nginx
yum install nginx -y

### 查看 nginx 版本
nginx -v

### 启动Nginx
systemctl start nginx

### 配置Nginx开机启动
systemctl enable nginx

### 查看Nginx 安装位置
whereis nginx

### 检查Nginx 配置是否正确
nginx -t

### nginx修改配置后重载
nginx -s reload

Nginx在Windows上安装使用

Windows下载Nginx:http://nginx.org/en/download.html

解压后即可使用,以下命令最好在解压目录下使用,如需全局使用,可将解压地址配置在Windows下Path环境变量中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 启动nginx
start nginx

# 修改配置后重新加载生效
nginx -s reload

# 重新打开日志文件
nginx -s reopen

# 测试nginx配置文件是否正确
nginx -t

# 测试某文件配置是否正确
nginx -t -c /path/to/nginx.conf

# 关闭nginx
## 快速停止nginx
nginx -s stop

## 完整有序的停止nginx
nginx -s quit

Nginx代理配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
user  nginx;
worker_processes 1; # nginx处理并发的值 值越大,处理的并发越多(配置 nginx worker个数,和cpu个数相同比较适宜)

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024; // 最大的连接数
# 发送一个请求,占用 2个(静态资源)或者 4个(web服务)连接数
# 普通静态资源的最大并发数是 : worker_connections * worker_processes / 2
# 如果是 http作为 反向代理来说,最大并发数是 worker_connections * worker_processes / 4
}


http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

# 这里可以直接不使用下面的配置,直接用的是该配置路径下的配置
#include /etc/nginx/conf.d/*.conf;

# 配置负载均衡
upstream tomcats {
# 负载分配策略
#① 轮询 默认配置,不做任何处理,服务器宕机,自动剔除
# eg:
# server ip
#② weight 权重策略,默认是1,值越高,被分配客户端请求越多
# eg:
# server ip weight=10;
#③ ip_hash 每个请求安访问的ip的hash结果分配,每个访客固定访问一个后端服务器,可以结果session问题
# eg:
# ip_hash
# server ip;
#④ fair 按后端服务器的响应时间分配请求,响应时间段的优先分配(放在server列表后)
# eg:
# server ip;
# fair
server 127.0.0.1:8888 weight=10;
server 192.168.65.129:8888 weight=10;
server 192.168.65.130:8888 weight=10;
}
server {
listen 80;

server_name localhost;
# 如果配置的是域名(一级域名填写一级域名,二级域名填写二级域名)
# server_name demo.com api.demo.com;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;

location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
# #配置反向代理的 地址
# proxy_pass http://127.0.0.1:9527;
# #这种是配置多个服务器负载的情况
proxy_pass http://tomcats;
proxy_redirect default;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

}


# 如果配置的是静态文件中带有类似VueRouter路由相关的
#location / {
# root /opt/nginx/tool/;
# #配置vue 路由跳转相关
# try_files $uri $uri/ /index.html;
# index index.html index.htm;
#}

# 使用www 地址访问某些系统路径上的静态资源
#location /www/ {
# 指定在系统上允许访问的资源路径
# root /usr/share/nginx/html;
# index index.html index.htm;
# autoindex on; #列出文件列表
#}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
}

以上是直接使用的http协议访问的,如果需要配置https证书访问,添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
# 配置域名
server_name www.demo.com;
# 配置证书地址
ssl_certificate "/etc/**/cert/6463711_demo.com_nginx/6463711_demo.com.pem";
ssl_certificate_key "/etc/**/cert/6463711_demo.com_nginx/6463711_demo.com.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
include /etc/nginx/default.d/*.conf;

location / {
root /opt/***/public/;
index index.html index.htm;
}
error_page 404 /404.html;
location = /error-404.html {
root /opt/***/demo;
}

error_page 500 502 503 504 /50x.html;
location = /error-500.html {
root /opt/***/demo;
}
}

SSH相关:

配置SSH中root账号不能登录

  • 编辑ssh的配置文件,取消PermitRootLogin 前的注释,把属性值 从 yes 改为 no

    1
    [root@jnssd ~]# nano /etc/ssh/sshd_config 
  • 重启sshd服务

    1
    [root@jnssd ~]# service sshd restart

配置SSH的端口:

  • 编辑ssh的配置文件,取消Port前的注释,把属性值 从 22改为 需要的端口

    1
    [root@jnssd ~]# nano /etc/ssh/sshd_config 
  • 重启sshd服务

    1
    [root@jnssd ~]# service sshd restart

用户相关及权限:

1、创建用户

1
[root@jnssd ~]# adduser jiang

2、为新用户创建初始化密码

1
2
3
4
5
[root@jnssd ~]# passwd jiang
Changing password for user jiang.
New password: # 输入密码
Retype new password: # 再次输入密码
passwd: all authentication tokens updated successfully.

3、授权

个人用户的权限只可以在本home下有完整权限,其他目录需要别人授权。经常需要root用户的权限,可以通过修改sudoers文件来赋予权限。

新创建的用户并不能使用sudo命令,需要给他添加授权。

  • 查找sudoers文件路径并赋予权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 查找sudoers文件路径
    [root@jnssd ~]# whereis sudoers

    # 查看权限
    [root@jnssd ~]# ls -l /etc/sudoers
    -r--r----- 1 root root 4363 Nov 12 10:21 /etc/sudoers

    # 赋予读写权限
    [root@jnssd ~]# chmod -v u+w /etc/sudoers
    mode of ‘/etc/sudoers’ changed from 0440 (r--r-----) to 0640 (rw-r-----)
  • 修改sudoers文件

    1
    [root@jnssd ~]# nano /etc/sudoers

    文件中添加新用户信息:

    1
    2
    3
    ## Allow root to run any commands anywhere
    root ALL=(ALL) ALL
    jiang ALL=(ALL) ALL #这个是新用户
  • 收回权限

    1
    2
    [root@jnssd~]# chmod -v u-w /etc/sudoers
    mode of ‘/etc/sudoers’ changed from 0640 (rw-r-----) to 0440 (r--r-----)

    注:/etc下面的sudo开头的文件不能赋予除root用户之外的权限,如果赋予了可能会出现如下错误:

    1
    2
    3
    4
    [jiang@jnssd ~]$ sudo
    sudo: /etc/sudo.conf is owned by uid 1000, should be 0
    sudo: /etc/sudo.conf is owned by uid 1000, should be 0
    sudo: /etc/sudoers.d is owned by uid 1000, should be 0

    解决:

    1
    2
    3
    # 在root用户模式下分别执行如下命令
    [root@jnssd jiang]# chown -R root:root /etc/sudoers.d
    [root@jnssd jiang]# chown -R root:root /etc/sudo.conf

4、删除用户

1
[root@jnssd ~]# userdel -r jiang

5、给某个用户某个文件的权限

1
2
# 给某个用户(jiang)某文件夹(opt)权限
chown -R jiang /opt/

6、禁止普通用户通过sudo su命令进入root模式的方法(在root模式下操作):

  • 修改 /etc/sudoers 的权限, 用来写入文件

    1
    [root@jnssd ~]# chmod 777 /etc/sudoers
  • 修改sudo 可以执行的命令

    1
    2
    3
    4
    5
    # 编辑sudoers文件
    [root@jnssd ~]# nano /etc/sudoers

    # 在需要配置的用户后面追加如下内容(如这里的用户 jiang)
    jiang ALL=(ALL) ALL,!/bin/su
    1. ! 取反的意思
    2. 追加的内容意思就是所有用户, 所有组都不允许使用 /bin/su 命令
    3. 如果想要普通用户, 使用指定的命令就直接使用 “,” 分割 在 “!/bin/su” 后面追加即可
    4. 如果不想让普通用户使用, 只需要在指定命令的开头写入 ! 取反即可
    5. 写入命令时必须写绝对路径
  • 将文件的权限修改回来

    1
    [root@jnssd ~]# chmod 0440 /etc/sudoers
  • 测试

    1
    2
    3
    [jiang@jnssd ~]$ sudo su root
    [sudo] password for jiang:
    Sorry, user jiang is not allowed to execute '/bin/su root' as root on jnssd.

7、其他

  • 配置在其他用户使用 netstat -ntlp 查看端口时没有进程编号的情况

    1
    # chmod +s /bin/netstat
  • 查看当前系统中能登录的账号

    1
    $ cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1

配置防火墙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 列出所有可用单元
systemctl list-unit-files

# 列出所有运行中单元
systemctl list-units

# CentOS 配置防火墙操作实例(启、停、开、闭端口):
# 注:防火墙的基本操作命令:
# 关闭禁止Firewall :

systemctl stop firewalld.service
systemctl disable firewalld.service

# 如果没有iptables时:
# 添加iptables:yum -y install iptables-services

# 编辑配置文件:
vim /etc/sysconfig/iptables
nano /etc/sysconfig/iptables

# 开放端口:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# 配置防火墙自启:
service iptables enable
systemctl enable iptables

# 列出防火墙规则:
iptables -L -n --line-number

# 查询防火墙状态:
[root@localhost ~]# service iptables status

# 停止防火墙:
[root@localhost ~]# service iptables stop

# 启动防火墙:
[root@localhost ~]# service iptables start

# 重启防火墙:
[root@localhost ~]# service iptables restart

# 永久关闭防火墙:
[root@localhost ~]# chkconfig iptables off

# 永久关闭后启用:
[root@localhost ~]# chkconfig iptables on

文件远程传输

Rsync实现传输文件

Rsync拷贝命令中常用的几个参数说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v, --verbose 详细模式输出
-p, --perms 保持文件权限
-g, --group 保持文件属组信息
-o, --owner 保持文件属主信息
-r, --recursive 对子目录以递归模式处理。同步目录的时候要加上这个参数
-l, --links 保留软链结,加上这个参数,同步过来的文件会保持之前的软链接属性不变
-H, --hard-links 保留硬链结
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
-z, --compress 对备份的文件在传输时进行压缩处理
--stats 给出某些文件的传输状态
--progress 打印同步的过程
--timeout=TIME 同步过程中,IP超时时间,单位为秒
--delete 删除那些目标目录中有而源目录中没有的多余文件。这个是rsync做增量方式的全备份的最佳选择方案!!!!!!
--delete-before 接受者在输出之前进行删除操作。即先将目标目录中文件全部删除,再将源目录文件拷贝过去。这是rsync保持目标目录跟源目录一致的方案!!!
--delete-after 在同步操作之后做比较,删除那些目标目录中有而源目录中没有的多余文件
--delete-excluded 删除目标目录中那些被该选项指定排除的文件
--ignore-errors 即使出现IO错误也进行删除,忽略错误
--exclude 指定同步时需要过滤掉的文件或子目录(即不需要同步过去的),后面直接跟不需要同步的单个文件名或子目录(不需要跟路径) ,过滤多个文件或子目录,就使用多个--exclude
--exclude-from 指定同步时需要过滤掉的文件或子目录,后面跟文件(比如/root/exclue.txt),然后将不需要同步的文件和子目录放到/root/exclue.txt下。
--version 打印版本信息
--port=PORT 指定其他的rsync服务端口
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second

传输实例

1
2
3
4
5
# 使用ssh默认端口使用用户jiang传输log文件 到远程服务器的opt目录下
rsync -auz -e 'ssh' --progress log jiang@192.168.0.66:9527:/opt

# 如果ssh配置了端口(端口9527)
rsync -auz -e 'ssh -p 9527' --progress log jiang@192.168.0.66:/opt

Windows相关

Windows下查看某端口使用

1
netstat -ano|findstr 端口号

其他

Redis 安装

Windows安装:

下载地址:https://github.com/tporadowski/redis/releases

1
2
3
4
5
6
7
## 下载地址: https://github.com/tporadowski/redis/releases

## redis 目录下 进入命令行输入以下命令
redis-server.exe --service-install redis.windows.conf --loglevel verbose

### 配置服务 启动
redis-server --service-start

Linux安装:

  • yum 方式安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 直接yum 安装的redis 不是最新版本
    yum install redis

    # 如果要安装最新的redis,需要安装Remi的软件源,官网地址:http://rpms.famillecollet.com/
    yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

    # 然后可以使用下面的命令安装最新版本的redis:
    yum --enablerepo=remi install redis

    # 安装后启动redis
    service redis start
    # 或者
    systemctl start redis

    # 配置redis开机启动
    chkconfig redis on
    或者
    systemctl enable redis.service

    # redis安装完毕后,我们来查看下redis安装时创建的相关文件,相关命令如下:
    rpm -qa |grep redis
    rpm -ql redis

    # redis安装后的相关配置文件在 /etc/redis.conf
  • 解压版安装

    • 下载

      redis下载地址:https://redis.io/

      1
      $ wget https://download.redis.io/releases/redis-6.2.6.tar.gz
    • 解压

      1
      $ tar -zxvf redis-6.2.6.tar.gz
    • 编译安装

      1
      2
      3
      4
      5
      6
      $ cd redis-6.2.6/
      $ make

      # 此时用以下命令就能启动了
      $ redis-6.2.6/src/redis-server redis-6.2.6/redis.conf

      注: 这种启动在控制关闭后会停止,如果需要后台启动需修改 redis.conf 文件中的**daemonize属性值为yes**即可

    • 配置服务

      /etc/systemd/system目录下创建一个 redis.service文件

      1
      $ nano /etc/systemd/system/redis.service

      填入以下信息:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      [Unit]
      Description=The redis-server Process Manager
      After=syslog.target network.target

      [Service]
      Type=simple
      PIDFile=/var/run/redis_6379.pid
      ExecStart=/opt/software/redis-6.2.6/src/redis-server /opt/software/redis-6.2.6/redis.conf
      ExecReload=/bin/kill -USR2 $MAINPID
      ExecStop=/bin/kill -SIGINT $MAINPID

      [Install]
      WantedBy=multi-user.target

      注:如果在redis.conf 文件中将**daemonize属性值改为了yes,此服务文件中的Type值需为forking**

      重新加载服务配置文件

      1
      $ systemctl daemon-reload
    • 服务的启动、停止、重启、开机自启等

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      # 启动
      systemctl start redis

      # 停止
      systemctl stop redis

      # 重启
      systemctl restart redis

      # 查看状态
      systemctl status redis

      # 配置开机自启
      systemctl enable redis

      # 禁用自启
      systemctl disable redis

SVN安装

1、Windows安装

下载地址:https://tortoisesvn.net/downloads.html

中文库在页面下方

2、Linux安装

  • 安装svn

    1
    yum -y install subversion
  • 创建目录并配置

    建立版本库目录(建议使用/var/svn 这样的路径,不然后续在配置开机自启的时候需要修改部分配置,看个人喜好吧!)

    1
    mkdir -p /opt/svn/

    创建svn代码库

    1
    svnadmin create  /opt/svn/repo

    执行上面的命令后,自动建立repo测试库,查看/opt/svn/repo 文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。以后创建svn库类似,替换repo名称即可

  • 用户密码passwd配置

    1
    2
    [root@Master ~]# cd /opt/svn/repo/conf/
    [root@Master conf]# nano passwd

    修改password为以下内容:

    1
    2
    3
    4
    [users]
    # harry = harryssecret
    # sally = sallyssecret
    admin=admin

    注:格式必须是 用户名=密码(用户名和密码必须成对)

  • 权限控制authz配置

    1
    [root@Master conf]# nano authz 

    目的是设置哪些用户可以访问哪些目录,向authz文件追加以下内容:

    1
    2
    3
    #设置[/]代表根目录下所有的资源   或者写成[repl:/]
    [/]
    admin = rw

    以上配置表示demo对根目录有读写权限,r为读,w为写

    如果是多个用户开发,这里可以配置用户组,编辑示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [groups]
    admin = admin # admin为用户组,等号之后的admin为用户
    test = fuhd,test

    [repo:/] # 表示根目录(/opt/svn/repo)
    @admin = rw # 表示admin组对根目录有读写权限,r为读,w为写

    [repo:/test] # 表示test目录(/opt/svn/repo/test)
    @test = rw # 表示test组对test目录有读写权限
  • 服务svnserve.conf配置

    每个版本库创建之后都会生成svnserve.conf主要配置文件。编辑它:

    1
    [root@Master conf]# nano svnserve.conf 

    追加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [general]
    #匿名访问的权限,可以是read,write,none,默认为read
    anon-access=none
    #使授权用户有写权限
    auth-access=write
    #密码数据库的路径
    password-db=passwd
    #访问控制文件
    authz-db=authz
    #认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字,可以填写为项目名称
    realm=repositories
  • 启动与停止svn服务

    查看svn的服务是否启动

    1
    ps -ef|grep svn

    如果没有启动执行下面命令即可(默认端口3690):

    1
    2
    3
    4
    5
    6
    svnserve -d -r /opt/svn/repo
    # 或者:
    systemctl start svnserve

    ## 指定端口
    svnserve -d -r /opt/svn/repo --listen-port=9527

    停止:

    1
    killall svnserve
  • 开启端口

    如果配置了防火墙规则,使用如下命令即可:

    1
    2
    3
    4
    /sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
    /etc/rc.d/init.d/iptables save
    /etc/init.d/iptables restart
    /etc/init.d/iptables status
  • 访问

    本地使用svn去checkout代码。请求地址:svn://ip(域名)/库名

    eg:

    QQ截图20211116180137

    填写账号、密码

    QQ截图20211116181201

  • 配置开机自启

    1
    systemctl enable svnserve.service  

    如果前面设置的svn目录地址使用的是/var/svn 这样的路径,开机时能够启动的,如果不是,可能会报如下错误:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@Master ~]#systemctl status svnserve
    ● svnserve.service - Subversion protocol daemon
    Loaded: loaded (/usr/lib/systemd/system/svnserve.service; enabled; vendor preset: disabled)
    Active: failed (Result: exit-code) since Tue 2021-11-16 18:22:03 CST; 31s ago
    Process: 1011 ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS (code=exited, status=1/FAILURE)

    Nov 16 18:22:02 Master systemd[1]: Starting Subversion protocol daemon...
    Nov 16 18:22:03 Master svnserve[1011]: svnserve: 根路径“/var/svn”不存在,或者不是目录。
    Nov 16 18:22:03 Master systemd[1]: svnserve.service: control process exited, code=exited status=1
    Nov 16 18:22:03 Master systemd[1]: Failed to start Subversion protocol daemon.
    Nov 16 18:22:03 Master systemd[1]: Unit svnserve.service entered failed state.
    Nov 16 18:22:03 Master systemd[1]: svnserve.service failed.

    这里需要修改/etc/sysconfig下的svnserve文件:

    1
    [root@Master ~]# nano /etc/sysconfig/svnserve

    将该配置文件中的/var/svn变更为你自己的路径就行,eg:

    1
    2
    3
    4
    # OPTIONS is used to pass command-line arguments to svnserve.
    #
    # Specify the repository location in -r parameter:
    OPTIONS="-r /opt/svn"

    使用如下命令项目是可以启动的:

    1
    systemctl start svnserve.service

    查看svn服务:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [root@Master ~]# systemctl status svnserve.service
    ● svnserve.service - Subversion protocol daemon
    Loaded: loaded (/usr/lib/systemd/system/svnserve.service; enabled; vendor preset: disabled)
    Active: active (running) since Tue 2021-11-16 18:28:58 CST; 28s ago
    Process: 2049 ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS (code=exited, status=0/SUCCESS)
    Main PID: 2050 (svnserve)
    Tasks: 1
    Memory: 596.0K
    CGroup: /system.slice/svnserve.service
    └─2050 /usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /opt/svn

    Nov 16 18:28:58 Master systemd[1]: Starting Subversion protocol daemon...
    Nov 16 18:28:58 Master systemd[1]: Started Subversion protocol daemon.

visual code 插件

1
2
3
4
5
6
7
8
9
10
Auto Close Tag 自动补全html标签
Auto Rename Tag——修改HTML标签时,自动修改匹配的标签
AutoFileName——自动补全文件路径提示
Babel ES6/ES7——ES6,ES7语法加亮检查插件
Chinese (Simplified) Language Pack for Visual Studio Code——为 VS Code 提供简体中文界面
ESLint——代码检查插件
vetur——Vue语法高亮
vscode-icons——为每个文件类型增加一个小图标,使文件目录更直观
Vue 2 Snippets——Vue2 片段补全工具
VueHelper——Vue2代码段(包括Vue2 api、vue-router2、vuex2)

Hbase 数据备份 还原

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# test_table 表名
# /opt/hbase-data-back/test_table_back 文件存储路径
hbase org.apache.hadoop.hbase.mapreduce.Export test_table /opt/hbase-data-back/test_table_back

# 在Hadoop中查看导出的文件信息
hadoop fs -ls /opt/hbase-data-back/test_table_back

# 在Hadoop中删除导出的文件信息
hadoop fs -rmr /opt/hbase-data-back/test_table_back

#获取hdfs文件到系统

#将hdfs中的/opt/hbase-data-back/test_table_back,复制到系统的/opt/hbase-data-back/test_table_back中:

hadoop fs -get /opt/hbase-data-back/test_table_back /opt/hbase-data-back/test_table_back

##将备份文件添加到hdfs中
# localFile 本地路径
# hdfsFile Hadoop中的路径 hdfsFile 必须是已存在的路径
# 若不存在:hadoop dfs -mkdir /opt/hbase-data-back (只能一级一级的建目录。)
hadoop dfs -put localFile hdfsFile
#eg:
hadoop dfs -put /opt/hbase-data-back/test_table_back /opt/hbase-data-back

#导入hbase中
hbase org.apache.hadoop.hbase.mapreduce.Import test_table_back /opt/hbase-data-back/test_table_back
hbase org.apache.hadoop.hbase.mapreduce.Driver import test_table_back /opt/hbase-data-back/test_table_back

MySQL数据操作相关

1
2
3
4
5
6
7
8
9
10
11
12
###############创建视图##################

create view viewname
as
select * from tablename
###############视图转表##################

oracle、mysql :
create table tablename as select * from viewname

sqlserver:
select * into tablename from viewname

Phoenix 相关操作整理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# 建表
# 注,建表时表名、列名、列簇 若不加双引号,Phoenix默认设置为大写格式,若使用默认的大写,操作表时大小写都能识别
# (建议不加引号,方便在java中操作时直接写SQL语句操作,不然全部的表名、列名都需要对引号转义
# 如:upsert into \"user \"(\"id\",\"name\",\"passwd \") values('20','xuxiao','德国柏林')")

1、默认不分区
CREATE TABLE user (id varchar PRIMARY KEY,name varchar ,passwd varchar);

2、建立20个分区的表
CREATE TABLE user (id varchar PRIMARY KEY,name varchar ,passwd varchar) SALT_BUCKETS = 20;

3、建表并设置info列族
CREATE TABLE user (id varchar PRIMARY KEY,info.name varchar ,info.passwd varchar) SALT_BUCKETS = 20;

4、对表进行schema分组处理,帮助识别,如果进行schema分了组,之后的所有所有都需要带上组名
//新建一个test组的user表,schema组名test
CREATE TABLE test.user (id varchar PRIMARY KEY,name varchar ,passwd varchar);
5、建表并分区,压缩表
CREATE TABLE test.user (id varchar PRIMARY KEY,name varchar ,passwd varchar) COMPRESSION='GZ',SALT_BUCKETS=16

修改表结构
1、添加字段
ALTER TABLE user ADD age integer;
ALTER TABLE user ADD age integer, address varchar;

2、添加字段带info列族
ALTER TABLE user ADD info.age integer;
ALTER TABLE user ADD info.age integer, info.address varchar;

3、修改字段(先删除字段,再添加)
ALTER TABLE user DROP COLUMN age;

删除表信息
1、仅删除Phoenix中的索引映射表
DELETE from SYSTEM.CATALOG where TABLE_NAME = user;

2、Phoenix和hbase中都删除
drop table user;

***************************************************************
*******注:操作字符串类型数据时,最好使用单引号包裹*******************
***************************************************************

给表添加数据
upsert into user(id,name,password) values('001','张三','123456');

删除数据
DELETE FROM user;
DELETE FROM user WHERE ID= ‘001’;
DELETE FROM user WHERE NAME LIKE '张%';

查询数据(查询所有)
SELECT * FROM user;

查询数据(带条件查询所有)
********************************************************************
*******注:默认能通过 primary key 字段查询,若是别的字段,需要创建索引*******
********************************************************************
//当前的id是primary key字段
SELECT * FROM user where id = '001';

分页查询 (LIMIT 筛选出多少行,OFFSET 从第几行开始筛选)
SELECT * FROM user LIMIT 10;

SELECT * FROM user LIMIT 10 OFFSET 10;


创建索引(同样索引也可以进行schema分组)
//USER_NAME_INADEX 索引名称,最好全大写,测试时小写出错了☹
create index USER_NAME_INADEX on user (name);

//如果是带有列族的列
create index USER_NAME_INADEX on user (info.name);


//采取INCLUDE(index cover,即索引覆盖)的方式创建password的索引:
create index USER_PASSWORD_INADEX on user (password) INCLUDE(name);

多列索引
//若是新创建的
create index USER_NAME_PASSWORD_INADEX on user (name, password);

设置网页滤镜

1
2
3
4
5
6
7
8
9
body>* {
filter: grayscale(100%);
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
-webkit-filter: grayscale(1);
}

一行代码设置网页暗模式

1
2
3
html{
filter: invert(1) contrast(0.95) saturate(0.5) hue-rotate(180deg);
}

实现正则检测密码强度

1
2
3
4
5
6
7
8
这里实现匹配“大写字母,小写字母,数字,特殊字符”四项中的至少三项的正则表达式如下:

var reg = /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\\W_!@#$%^&*`~()-+=]+$)(?![0-9\\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\\W_!@#$%^&*`~()-+=]{6,30}$/;

reg.test("qwer123!@#") --- true
reg.test("qwer123") --- false
reg.test("QWERqwer123") --- true
reg.test("QWER123!@#") --- true

待续。。。