关于CentOS 7.6 的一些操作(持续不定时更新中)

1. YUM命令

yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。

基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

1.1 YUM语法

1
yum [options] [command] [packages ...]

options : 可选, 选项包括 -h(帮助), -y(当安装过程提示选择全部为”yes”), -q(不显示安装的过程)等等.

command : 要进行的操作

package : 安装的包名

1.2 常用命令

  1. 列出所有可更新的软件清单命令: yum check-update

  2. 更新所有软件命令: yum update

  3. 仅安装指定的软件命令: yum install <package name>

  4. 仅更新指定的软件命令: yum update <package name>

  5. 列出所有可安装的软件清单命令: yum list

  6. 删除软件包命令: yum remove <package name>

  7. 查找软件包命令: yum search <keyword>

  8. 清除缓存命令

yum clean packages : 清除缓存目录下的软件包

yum clean headers : 清除缓存目录下的headers

yum clear oldheaders : 清除缓存目录下的旧headers

yum clean, yum clean alln (= yum clean packages; yum clean oldheaders) : 清除缓存目录下的软件包以及旧的headers

2. 基本命令

2.1 提升资源权限

1
chmod a+x

2.2 以后台服务运行jar包

1
nohup java -jar xxxx.jar > log.file  2>&1 &

2.3 修改jar包运行时的服务端口号

1
--server.port=xxxx

2.4 查看进程占用资源情况

1
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep java

2.5 权限

  • 修改文件/文件夹权限
    语法: chmod [*options*] *mode*[,*mode*] *file1* [*file2* ...]
  • 修改文件所属用户组
    chown

3. 安装GitLab

1
2
1.安装依赖软件
yum -y install policycoreutils openssh-server openssh-clients postfix
1
2
2.设置postfix开机自启,并启动,postfix支持gitlab发信功能
  systemctl enable postfix && systemctl start postfix
1
2
3
4
3.下载gitlab安装包,然后安装
  gitlab的下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

  rpm -ivh gitlab-ce-8.0.0-ce.0.el7.x86_64.rpm
1
2
3
4
4.修改gitlab配置文件指定服务器ip和自定义端口      -->更改gitlab默认端口
  vim /etc/gitlab/gitlab.rb
  修改内容:external_url 后改为自己的http://ip:端口 ; unicorn['port'] = 28080 修改 unicorn['port'] 端口
  !注意,两个端口不能一样
1
2
 5:使用gitlab-ctl reconfigure 自动配置,并安装数据库,初始化信息,如下所示(第一次使用配置时间较长):
命令:gitlab-ctl reconfigure
1
2
3
4
5
 6:使用gitlab-ctl start 启动gitlab服务。
命令:gitlab-ctl start
sudo gitlab-ctl stop --停止服务
sudo gitlab-ctl reconfigure --启动服务
sudo gitlab-ctl start --启动所有gitlab组件
1
7:在浏览器中输入 http://ip:端口/ ,然后 change password: ,并使用root用户登录 即可 (后续动作根据提示操作)

4. 防火墙(firewalld)

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. 运行命令:
firewall-cmd --get-active-zones
运行完成之后,可以看到zone名称,如下:

2. 执行如下命令命令:
firewall-cmd --zone=public --add-port=8012/tcp --permanent

3. 重启防火墙,运行命令:
firewall-cmd --reload

4. 查看端口号是否开启,运行命令:
firewall-cmd --query-port=6379/tcp

5. 删除已放行的短裤,运行命令:
firewall-cmd --zone=public --remove-port=80/tcp --permanent

6. 查看防火墙开启状态,运行命令:
systemctl status firewalld

7. 停止防火墙,运行命令:
systemctl stop firewalld

8. 开启防火墙,运行命令:
systemctl start firewalld

9. 重新启动防火墙,运行命令:
systemctl restart firewalld

10. 查看已放行的端口列表
firewall-cmd --zone=public --list-ports

5. Docker容器

5.1 Docker安装

5.1.1. 删除已有的docker服务

1
2
3
4
5
6
7
8
yum remove docker \                  
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

5.1.2. 安装所需依赖

1
yum install -y yum-utils

5.1.3. 配置yum源

1
2
3
sudo yum-config-manager \    	
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

5.1.4. 安装最新版Docker

1
yum install docker-ce docker-ce-cli containerd.io

5.1.5 Docker服务命令

  • 启动: systemctl start docker
  • 停止: systemctl stop docker
  • 重启: systemctl restart docker
  • 查看镜像: docker images
  • 查看已经启动的容器: docker ps
  • 查看所有容器,包含未启动: docker ps -a
  • 一键启动所有容器: docker start $(docker ps -aq)
  • 进入容器: docker exec -it [容器ID]
  • 停止容器: docker stop [容器ID]
  • 一键停止所有容器: docker stop $(docker ps -aq)
  • 一键删除所有容器(前提, 全部容器都已经停止): docker rm $(docker ps -aq)
  • 进入指定容器: docker exec -it [容器ID] /bin/bash

5.1.6. 配置Docker国内镜像源

5.2 使用 tomcat 镜像

1
2
3
4
5
运行容器	# docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat  

命令说明:
-p 8080:8080:将主机的 8080 端口映射到容器的 8080 端口。
-v $PWD/test:/usr/local/tomcat/webapps/test:将主机中当前目录下的 test 挂载到容器的 /test。

5.3 Docker 镜像导入导出

5.3.1 导出/入 镜像

导出:将docker 镜像导出成文件

1
docker save -o [image ID/name] xxx.tar.gz

导出后, 会在命令参数指定的目录下生成对应的压缩文件,如果没有指定目录,则在执行docker save命令的路径下生成文件。

导出后的文件,可以在其他机器上通过加载镜像文件的方式进行导入加载。

导出时,强烈建议使用docker save -o 镜像名称:版本号 xxx.tar.gz的方式

导出时,如果使用docker save -o [ImageID] xxx.tar.gz的方式导出,导入时会出现镜像的名称和版本号都为none的情况

导入:将离线的docker镜像文件导入到docker服务中

1
docker load < xxxx.tar.gz

导入后,系统会随机生成imageID

5.3.2 导出/入 容器

导出:将docker运行的容器导出成文件

1
docker export [ImageID/name:target] > xxx.tar.gz

导出时,和save方式导出镜像一样,推荐使用imageID的方式导出,否则导入时可能会出现导入后的镜像的镜像名称版本号都是<none>的情况。

导入:将离线的docker镜像文件导入到docker服务中

1
docker import xxxx.tar.gz <IMAGE NAME>:<IMAGE TAG>

Tips:

  • 导入和导出两组命令必须成对使用

    • 导出时使用 save,导入时就需要使用load
    • 导出时使用export,导入时就需要使用import
  • 导出时使用imageID为指向标记导出,避免出现导入后ImageIDtargetnone的情况

5.4 Docker离线方式安装(二进制源码方式安装)

下载docker离线二进制文件

1
https://download.docker.com/linux/static/stable/x86_64/

下载后通过FTP传输到服务器后,解压

1
tar xzvf docker-xx.xx.x.tgz

将解压后的docker下的所有文件移动或拷贝到 /usr/bin

1
2
cd docker/
mv * /usr/bin

新建docker.service文件

1
touch  /etc/systemd/system/docker.service

编辑docker.service文件

1
vi  /etc/systemd/system/docker.service

在docker.service文件中填入如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.targe

赋予docker.service可执行权限

1
2
chmod +x /etc/systemd/system/docker.service
systemctl daemon-reload

[可选]将docker.service加入开机启动项

1
2
3
systemctl enable docker.service

# 如果报错,可以使用将 systemctl start docker 命令加入到 '/etc/rc.d/rc.load'文件中,并赋予该文件可执行权限 [自定义启动项方式]

6. natapp端口映射工具

1
以前台运行	./natapp -authtoken=7cc9d2d7c758b320以后台运行	nohup ./natapp -authtoken=8679cddfaea0f1fa -log=stdout &

7. 安装JDK

7.1 方式一 (手动二进制包安装)

​ 官网下载地址: https://www.oracle.com/technetwork/java/javase

7.1.1 切换到jdk目录

​ 切换命令是 cd 目录名

7.1.2 解压jdk安装包

​ 解压命令: tar zxvf jdk-8u181-linux-x64.tar.gz

7.1.3 配置环境变量

​ 输入命令: vim /etc/profile

7.1.4 然后依次操作如下步骤

  • 按键盘 shift+g
  • 按键盘 o 字母
  • 配置环境,将如下代码复制进去,复制成功, 在linux中鼠标右键即可粘贴
1
2
3
4
export JAVA_HOME=/opt/jdk/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
  • 按键盘的Esc键, 在键盘左上角
  • 输入命令保存退出 :wq
  • 输入命令使配置文件生效 source /etc/profile
  • 查看JKD是否配置成功 命令 java -version (看到版本就是成功了)

7.2 方式二 (使用yum进行安装,不推荐)

  • 执行如下命令查看可安装的jdk版本 yum -y list Java*
  • 根据需要选择安装的jdk版本,这里安装jdk1.8 执行如下命令, 然后等待安装完成 yum install -y java-1.8.0-openjdk-devel.x86_64
  • 安装完毕后执行如下命令查看版本 java -version
  • 使用yum安装后 jdk目录位置 usr/lib/jvm
  • 配置环境变量 切换到安装目录 cd /usr/lib/jvm
  • 然后配置步骤和手动安装的配置步骤是一样的

8. 安装Redis

8.1 二进制方式安装

  1. 安装编译源文件时所需的编译环境
1
2
3
4
5
yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make
#升级gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
  1. 下载Redis二进制包文件
1
2
3
4
5
6
wget https://download.redis.io/releases/redis-6.0.9.tar.gz

# 如果wget时报错, 说没有此命令, 就说明系统中没有安装wget
# 使用 yum install wget -y 安装wget
# 安装wget后, 重新wget redis的二进制源文件.
# 也可在本地电脑上下载后, 使用FTP上传到服务器
  1. 解压
1
tar -zxf redis-6.0.9.tar.gz
  1. 进入解压后的目录
1
cd redis-6.0.9.tar.gz
  1. 编译
1
2
make
# 编译二进制源文件时, 如果提示缺少编译所需的环境, 根据相应的提示安装对应的环境即可.

8.2 yum方式安装

  1. 安装EPEL插件包
1
yum install epel-release -y
  1. 使用yum命令安装redis
1
yum install redis -y

8.3 Redis常用指令

1
2
3
4
5
6
7
8
9
10
11
12
# 启动服务
systemctl start redis.service
# 停止服务
systemctl stop redis.service
# 重启服务
systemctl restart redis.service
# 查看服务启动状态
systemctl status redis.service
# 开启开机自启
systemctl enable redis.service
# 关闭开机自启
systemctl disable redis.service

8.4 配置文件常用修改

etc/redis.conf

1
2
3
4
5
6
7
8
# 配置监听所有网段,ip. 默认只监听本机回环, 也可配置成服务器对应的ip地址
bind 127.0.0.1 ==修改为==> bind 0.0.0.0

# 配置启动方式以后台方式启动, 默认以前台方式启动
daemonize no ==修改为==> daemonize yes

# 配置redis访问密码, 默认无密码
requirepass 密码

9. 安装Nginx

Ngxin启动后会有两个PID[进程], 一个是Master, 另一个是Worker.

Master:

Worker:

9.1. 安装 pcre 依赖

  • 下载pcre
1
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
  • 解压
1
tar -zxvf pcre-8.37.tar.gz
  • 编译 安装
1
./configure	make	make install

9.2 安装openssl zlib gcc

1
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

9.3 安装 Nginx

  • 上传tar
  • 解压
  • 编译 ./configure
  • 安装 make && make install [安装后的路径: /usr/local/nginx/sbin/nginx]

9.4 Nginx的常用命令

[nginx的配置文件 conf/nginx.conf]

[使用nginx的命令的前提是: 必须要进入 /usr/local/nginx/sbin (nginx的)目录中]

  • 查看nginx版本号 ./nginx -v

  • 启动nginx ./nginx

  • 停止ngins ./nginx - s stop

  • 重新加载nginx ./nginx -s reload

  • nginx的配置文件的位置

    • 安装目录下的 conf文件夹下的 nginx.conf [/usr/local/nginx/conf/nginx.conf]
    • 配置文件的组成, nginx的配置文件由三部分组成
      • 全局块 : 从配置文件开始到events块之间的内容, 主要会设置一些影响nginx服务器整体运行的配置指令, 主要包括配置运行nginx服务器的用户(组)/允许生成的work process参数/ 进程PID存放路径/日志存放路径和类型以及配置文件的引入等.
      • events块
      • http块
      • http全局块
      • server块

9.4.1 Nginx ‘localtion’匹配规则

  1. [~] : 波浪线标示执行一个正则匹配, 区分大小写;
  2. [~*] : 表示执行一个正则匹配, 不区分大小写;
  3. [^~] : 表示普通字符匹配, 如果该选项匹配, 只匹配该选项, 不匹配别的选项. 一般用来匹配目录;
  4. [=] : 进行普通字符精确匹配;
  5. [@] : 定义一个命名的localtion, 使用在内部定向, 例如: error_page, try_files;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
location  = / {
# 只匹配"/".
[ configuration A ]
}
location / {
# 匹配任何请求,因为所有请求都是以"/"开始
# 但是更长字符匹配或者正则表达式匹配会优先匹配
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
[ configuration C ]
}
location ~* .(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg结尾的请求.
# 但是所有 /images/ 目录的请求将由 [Configuration C]处理.
[ configuration D ]
}

9.4.2 Ngxin ‘localtion’匹配优先级

9.5 Ngxin反向代理

9.5.1 tomcat启动端口 8080

9.5.2 nginx监听端口 80

要求: 使用nginx的反向代理, 访问80端口即访问tomcat80端口

9.5.3 在nginx.xml中做如下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
worker_processes  1;        
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

server {
listen 80;
server_name [服务器当前IP地址];

location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}

location = /50x.html {
root html;
}
}

负载均衡

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
  worker_processes  1;        
events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream myserver {
server [服务器当前IP地址:端口号];
server [服务器当前IP地址:端口号];
}

server {
listen 80;
server_name [服务器当前IP地址];

location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}

location = /50x.html {
root html;
}
}
}

9.5.4 Nginx配置ssl

  • 编译带ssl插件的nginx ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  • 安装 make && make install
  • 检查nginx是否正确安装带ssl插件 ./nginx -V 出现 configure arguments: –with-http_stub_status_module –with-http_ssl_module 表示正确安装
  • 修改nginx权限 chmod 111 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
http {    
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

server {
#监听443端口
listen 443;
#你的域名
server_name huiblog.top;
ssl on;

#ssl证书的pem文件路径
ssl_certificate /root/card/datav.abin9999.com_chain.crt;
#ssl证书的key文件路径
ssl_certificate_key /root/card/datav.abin9999.com_key.key;

location / {
proxy_pass http://公网地址:项目端口号;
}
}

server {
listen 80;
server_name huiblog.top;
#将请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
}
}
  • 配置完成后 重启nginx ./nginx -s reload./nginx -s stop./nginx

9.6 yum方式安装Ngxin

9.6.1 添加Ngxin的yum源

1
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

9.6.2 yum命令安装

1
yum install -y nginx

9.6.3 yum安装Ngxin文件路径

  • 配置文件路径 /etc/nginx
  • 可执行文件路径 /usr/sbin/nginx

9.7 将Nginx命令添加到系统环境变量

1
ln -s [nginx可执行文件所在路径] /usr/local/bin

9.8 使用Ngxin实现视频点播

1
./configure --add-module=../nginx-rtmp-module-1.2.2

编译成功后安装

1
make && make install

Nginx视频模块配置文件:

1
2
3
4
5
6
7
8
9
10
11
rtmp {                #RTMP服务
server {
listen 1935; #//服务端口
chunk_size 4096; #//数据传输块的大小

application vod {
play /home/video; #//视频文件存放位置。
# on_play http://localhost:10086/user/auth;
}
}
}

9.8 使用Ngxin实现视频直播推流

  1. 需要nginx在编译时导入rtmp模块
    下载地址: https://github.com/arut/nginx-rtmp-module/tags
  2. 上传下载的文件到服务器,或者使用curl或者wget直接下载到服务器
  3. 解压下载的压缩文件
  4. 在编译nginx时加上对应插件
1
2
./configure --add-module=../nginx-rtmp-module
make && make install
  1. 安装FFmpeg
1
2
3
4
5
6
7
1. 安装启用EPEL软件存储库
sudo yum install epel-release
2. 导入存储库GPG密钥并通过安装rpm软件包来启用Nux存储库
sudo rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
3. 安装FFmpeg
sudo yum install ffmpeg ffmpeg-devel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
rtmp {
server {
listen 1935;

application live {
live on;
# on_publish http://127.0.0.1:8686/auth;
# on_play http://127.0.0.1:8686/auth;
}

application hls {
live on;
hls on;
hls_path temp/hls;
hls_fragment 8s;
}
}
}

9.9 使用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
location ~ .*\.(gif|jpg|jpeg|png)$ { 
# expires 24h; # 客户端缓存数据时长
root /opt/upload/iot;#指定图片存放路径
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /opt/upload/iot;#图片访问路径
proxy_redirect off;
proxy_set_header Host 127.0.0.1;
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;

# 资源不存在时,跳转
if ( !-e $request_filename)
{
proxy_pass http://127.0.0.1;#默认80端口
}
}

9.10 Nginx做端口映射(跳板机)

实现目的: 使用一台服务器或多台服务器中转跳接 登录其他服务器. 隐藏真实访问目标服务器ssh连接ip地址信息

nginx版本要求 1.8.X 以上

在配置文件中配置的nginx监听的端口需要在防火墙中配置放行

  1. 编译时, 需编译进 stream 模块.
    ./configure –with-stream
  2. 编写 stream 配置(和http配置同级)
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
stream {    #stream模块与http模块处于同一级;stream模块编译后需要手动添加;这两个模块可以共存。
upstream remote01{
server 192.168.110.101:22; #内网服务器101,端口为sshd默认的22
}
upstream remote02{
server 192.168.110.102:22; #内网服务器102,端口为sshd默认的22
}

server {
listen 2201; #监听代理主机的2201端口,通过该端口映射到内网的22端口
proxy_connect_timeout 1h;
proxy_timeout 1h;
proxy_pass remote01; #转向内网服务器101
}
server {
listen 2202; ##监听代理主机的2202端口,通过该端口映射到内网的22端口
proxy_connect_timeout 1h;
proxy_timeout 1h;
proxy_pass remote02; ##转向内网服务器102
}
}

注意1:server里面不能够使用location这种语句,否则报错;语法虽与http模块类似,但是有区别的。
注意2:如果与代理主机绑定多个二级域名,在server虚拟机中不可以具体指向二级域名,只需要指明需要监听的代理主机的端口即可,比如上述中的server主机如下设置的话,连接会失败。
server {
listen ns01.testing.com:2201; #ns01.testing.com为绑定代理主机的二级域名,通过该域名对应访问内网服务器
......
proxy_pass remote01;
}
server {
listen ns02.testing.com:2202; ##ns02.testing.com为绑定代理主机的二级域名,通过该域名对应访问内网服务器
......
proxy_pass remote02;
}
  1. 启动或重新加载nginx即可.

9.11 平滑升级

在不中断服务和服务的请求的同时, 进行nginx二进制可执行文件的升级


10. MinIO

10.1. 安装

  • 下载二进制源码包 wget https://dl.min.io/server/minio/release/linux-ppc64le/minio
  • 赋予文件可执行权限 chmod +x minio
  • 移动文件 mv minio /usr/local/
  • 创建minio数据文件存放目录 mkdir -p /home/minio/data

10.2 服务命令

  • 启动minio /usr/local/minio server /home/minio/data/
  • 后台运行 nohup /usr/local/minio server /home/minio/data > /home/minio/data/minio.log 2>&1 &
  • 指定ip:port nohup /usr/local/minio server --address your_ip:8999 /home/minio/data > /home/minio/data/minio.log 2>&1 &

11. 自定义启动脚本

  • /etc/rc.d/rc.local 中添加想要执行的命令(脚本)
  • 给对应文件赋予可执行权限 chmod +x /etc/rc.d/rc.local
  • 注意: /etc/rc.local/etc/rc.d/rc.local 的软链接

12. yasm编辑环境安装

前提:系统中需要有gcc环境

如果没有,可使用 yum install -y gcc gcc-c++进行安装

  1. 下载二进制源码包
1
curl http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz >yasm.tar.gz
  1. 解压文件
    tar xzvf yasm.tar.gz
  2. 进入到目录
    cd yasm-1.2.0
  3. 编译
    ./configure
  4. 安装
    make && make install

13. Redis

简介: 一个基于内存实现的用C语言编写的内存型k-v键值对数据库

13.1 安装

使用源码编译方式安装:

  1. 下载
    下载地址: https://redis.io/download/#redis-downloads

1.1 本地下载后,使用FTP上传到服务器中;
1.2 使用wget命令下载

找到所需要的版本后,右键下载超链后,选择复制链接

1
2
3
4
5
6
7
8
wget -O /另存为目标路径/另存为文件名 下载地址
# wget -O /usr/local/temp/redis.tar.gz https://download.redis.io/releases/redis-6.0.16.tar.gz


cd 下载保存路径
wget 下载地址
# cd /usr/local/temp
# wget https://download.redis.io/releases/redis-6.0.16.tar.gz
  1. 编译安装
    使用tar命令解压下载的文件
1
tar -zxf redis-6.0.16.tar.gz

解压文件后,使用 cd指令进入到 redis 源码路径中

1
cd redis-6.0.16

编译所需环境安装

1
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

使用make编译安装

1
make && make install

启动服务文件位置在 安装路径(redis源码文件解压路径下的 src 下)

使用 rpm包文件安装方式:

13.2 常用配置

13.2.1 设置Redis密码

  • 设置永久性的密码, 修改配置文件
1
requirepass 设置的密码

13.2.2 配置外网可见

修改配置文件: vi /etc/redis/6379.conf

13.2.3 Docker容器启动redis

1
docker run -di --name=myredis -p6379:6379 --restart=always -d redis --requirepass "wocoanima"

14. Maven环境安装

14.1 下载Maven

  1. 使用wget从官网下载maven编译后的包
1
wget https://dlcdn.apache.org/maven/maven-3/3.8.3/binaries/apache-maven-3.8.3-bin.tar.gz
  1. 解压文件
1
tar -zxf apache-maven-3.8.3-bin.tar.gz
  1. 移动至/usr/local
1
mv ./apache-maven-3.8.3 /usr/local

14.2 配置环境变量

  • 修改环境变量配置文件 /etc/profile
  • 在环境变量配置文件末尾添加配置
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
# MAVEN_HOME
MAVEN_HOME=/usr/local/apache-maven-3.5.0
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>



<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>huaweicloud</id>
<mirrorOf>*</mirrorOf>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
<profile>
<id>jdk18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>

15. Apache apollo –> mqtt(物联网消息队列) 部署

  • 下载mqtt可执行文件包

16. RabbitMq

16.1 rabbitMq和Erlang的对应关系

1
https://www.rabbitmq.com/which-erlang.html

16.2 依赖Erlang

  • 前提条件
1
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
  • 通过yum安装Erlang
1
yum install -y erlang
  • 查看Er的版本号
1
erl

16.3 安装RabbitMq

  • 前提条件

    • 先导入key
1
2
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
rpm --import https://packagecloud.io/gpg.key
    • 前置配置
1
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
  • 下载RabbitMq的安装包
1
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el7.noarch.rpm
    • 安装
1
rpm -ivh rabbitmq-server-3.8.5-1.el7.noarch.rpm

16.4 RabbitMQ服务启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 服务启动 
systemctl start rabbitmq-server

# 加入自启动列表
systemctl enable rabbitmq-server

# 服务停止
systemctl stop rabbitmq-server

# 服务重启
systemctl restart rabbitmq-server

# 移除自启动列表
systemctl disable rabbitmq-server

16.5 RabbitMQ账户配置及web管理页面开启

1、删除guest默认账号(可选配置)

1
rabbitmqctl delete_user guest

2、添加账号

1
rabbitmqctl add_user 用户名 密码

3、修改账号权限为Administrator

1
rabbitmqctl set_user_tags 用户名 administrator

4、赋予账号资源权限

1
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"

5、启动管理web页面

1
rabbitmq-plugins enable rabbitmq_management

管理web访问地址 : http://{ip}:15672

17. crontab 定时任务

执行一些特殊需求的任务时, 需要用到CentOS自带得定时任务

crontab的cron表达式中, 不包含秒的字段.

17.1 方式一

  • 修改定时任务配置文件 /etc/crontab 文件
  • 语法: cron表达式 command
  • 编辑完成, 保存退出. 执行:
1
/sbin/service crond reload

17.2 方式二

  • 使用命令添加任务清单列表
    crontab -e
  • 添加定时任务配置
    语法: cron表达式 command
  • 编辑完成, 保存退出. 执行
1
/sbin/service crond reload

17.3 常用命令

1
2
3
4
5
6
7
/sbin/service crond reload  --> 重新加载定时任务配置文件
/sbin/service crond start --> 启动定时任务组件
/sbin/service crond restart --> 重启定时任务组件
/sbin/service crond stop --> 停止定时任务组件
crontab -e --> 快速添加定时任务
crontab -r --> 停止已配置的定时任务
crontab -l --> 查看当前已经配置(加载)的定时任务配置

18. Shell

18.1 规范

  • shell脚本首行以 #! /bin/bash 开头
  • shell脚本后缀符号以 .sh 结尾

18.2 变量定义

  • 语法 变量名=值
    例如: number=100
  • 变量同样具有命名规范, 和java C 等编程语言类似(不要用奇奇怪怪的名字来命名)

18.3 if

1
2
3
4
5
6
7
if [ 条件表达式 ]
then
command1
command2
...
commandN
fi

18.4 if-else

1
2
3
4
5
6
7
8
9
if [ 条件表达式 ]
then
command1
command2
...
commandN
else
command
fi

18.5 if-else if -else

1
2
3
4
5
6
7
8
9
10
11
if [ 条件表达式 ]
then
command1
command2
...
commandN
elif [ 条件表达式 ]
command
else
command
fi

18.6 数组

1
2
3
4
5
6
7
1. 声明数组
arr_name=(value1 value2 value3 ...)
2. 取数组长度
${#arr_name[@]}
${#arr_name[*]}
3. 取数组元素
${arr_name[index]}

18.7 while

1
2
3
4
5
6
7
8
9
10
11
12
while ( 条件表达式 )
do
command
done
#循环遍历数组
arr=(a b c d e f g)
index=0
while ( $index < ${#arr[@]} )
do
echo ${arr[${index}]}
let "index++"
done

18.8 for

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for [item] in [容器]
do
command
done
# 循环一个数组
for item in This is a demo
do
echo $item
done
---------
输出结果
This
is
a
demo
# 循环一个数组
arr=(a b c d e f g)
for item in ${arr[@]}
do
echo $item
done

18.9 携带参数

在sh脚本执行时, 在后面携带参数 ./xxx.sh start 其中 start 就是携带的参数

在shell中 获取参数方式按照顺序 从0开始 0表示脚本本身 实际获取参数从1开始

语法:$[位置]

1
2
3
4
5
6
7
8
9
10
11
# 获取输入的参数
input=$1
if [ -z $input ]
then
echo '入参为空'
else
echo '入参为'$input''
fi
-------------
./xxx.sh start
入参为start

19. 更新内核

  • 查看方法
    cat /etc/redhat-release
  • 内核版本
    uname -r

19.1 更新内核

  1. 更新yum仓库为EL仓库
1
2
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
  1. 查看可供更新的版本
1
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

选择指定版本

1
yum --enablerepo=elrepo-kernel install kernel-lt
  1. 查看系统中已经安装的内核版本
1
yum --enablerepo=elrepo-kernel install kernel-lt
  1. 修改默认版本
1
grub2-set-default [上面3步骤中查询出来的你要更换的内核版本的序号]

修改配置文件

1
2
vim /etc/default/grub
设置 GRUB_DEFAULT=0
  1. 生成配置文件
1
grub2-mkconfig -o /boot/grub2/grub.cfg
  1. 重启
1
reboot

19.2 卸载旧版本

  1. 查看已经安装的内核
1
rpm -qa | grep kernel
  1. 卸载所有3版本
1
yum -y remove kernel-tools-3.10.0-862.el7.x86_64 kernel-tools-libs-3.10.0-862.el7.x86_64 kernel-3.10.0-1062.7.1.el7.x86_64 kernel-headers-3.10.0-1062.7.1.el7.x86_64 kernel-3.10.0-862.el7.x86_64
  1. 此时查看内核:
1
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

19.3 一键脚本

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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#!/bin/bash
#############################################################################################
# 导入系统变量
#############################################################################################
. /etc/init.d/functions
source /etc/profile

#############################################################################################
# 服务变量定义
#############################################################################################
# 线条
LINE='---------------------------------------------------------------------------------------'

# 进程用户
USER_PROCESS='root'


#############################################################################################
# 颜色输出函数
#############################################################################################
function FUNC_COLOR_TEXT() {
echo -e " \e[0;$2m$1\e[0m"
}

function FUNC_ECHO_RED() {
echo $(FUNC_COLOR_TEXT "$1" "31")
}

function FUNC_ECHO_GREEN() {
echo $(FUNC_COLOR_TEXT "$1" "32")
}

function FUNC_ECHO_YELLOW() {
echo $(FUNC_COLOR_TEXT "$1" "33")
}

function FUNC_ECHO_BLUE() {
echo $(FUNC_COLOR_TEXT "$1" "34")
}

#############################################################################################
# 颜色通知输出函数
#############################################################################################
# 通知信息
function FUNC_ECHO_INFO() {
echo $(FUNC_COLOR_TEXT "${LINE}" "33")
echo $(FUNC_COLOR_TEXT "$1" "33")
echo $(FUNC_COLOR_TEXT "${LINE}" "33")
}

# 完成信息
function FUNC_ECHO_SUCCESS() {
echo $(FUNC_COLOR_TEXT "${LINE}" "32")
echo $(FUNC_COLOR_TEXT "$1" "32")
echo $(FUNC_COLOR_TEXT "${LINE}" "32")
}

# 错误信息
function FUNC_ECHO_ERROR() {
echo $(FUNC_COLOR_TEXT "${LINE}" "31")
echo $(FUNC_COLOR_TEXT "$1" "31")
echo $(FUNC_COLOR_TEXT "${LINE}" "31")
}

#############################################################################################
# 系统版本检测函数
#############################################################################################
function FUNC_SYSTEM_CHECK() {
VAR_SYSTEM_FLAG=$(/usr/bin/cat /etc/redhat-release | grep 'CentOS' | grep '7' | wc -l)
if [[ ${VAR_SYSTEM_FLAG} -ne 1 ]];then
FUNC_ECHO_ERROR '本脚本基于 [ CentOS 7 ] 编写,目前暂不支持其他版本系统!'
exit 1001
fi
}

#############################################################################################
# 用户检测函数
#############################################################################################
function FUNC_USER_CHECK() {
VAR_USER=$(/usr/bin/whoami)
if [[ ${VAR_USER} != 'root' ]];then
FUNC_ECHO_ERROR '脚本目前只支持 [ root ] 用户执行,请先切换用户...'
exit 1002
fi
}

#############################################################################################
# 服务器联网函数
#############################################################################################
function FUNC_NETWORK_CHECK() {
VAR_PING_NUM=$(/usr/bin/ping -c 3 www.baidu.com | grep 'icmp_seq' | wc -l)
if [[ ${VAR_PING_NUM} -eq 0 ]];then
FUNC_ECHO_ERROR '网络连接失败,请先配置好网络连接...'
exit 1003
fi
}

#############################################################################################
# 打印系统信息
#############################################################################################
function FUNC_PRINT_SYSTEM_INFO() {
# 获取系统信息
SYSTEM_DATE=$(/usr/bin/date)
SYSTEM_VERSION=$(/usr/bin/cat /etc/redhat-release)
SYSTEM_CPU=$(/usr/bin/cat /proc/cpuinfo | grep 'model name' | head -1 | awk -F: '{print $2}' | sed 's#^[ \t]*##g')
SYSTEM_CPU_NUMS=$(/usr/bin/cat /proc/cpuinfo | grep 'model name' | wc -l)
SYSTEM_KERNEL=$(/usr/bin/uname -a | awk '{print $3}')
SYSTEM_IPADDR=$(/usr/sbin/ip addr | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}')

# 打印系统信息
FUNC_ECHO_YELLOW ${LINE}
echo "服务器的信息: ${SYSTEM_IPADDR}"
FUNC_ECHO_YELLOW ${LINE}
echo "操作系统版本: ${SYSTEM_VERSION}"
echo "系统内核版本: ${SYSTEM_KERNEL}"
echo "处理器的型号: ${SYSTEM_CPU}"
echo "处理器的核数: ${SYSTEM_CPU_NUMS}"
echo "系统当前时间: ${SYSTEM_DATE}"
FUNC_ECHO_YELLOW ${LINE}
}

#############################################################################################
# 升级内核
#############################################################################################
function FUNC_UPDATE_KERNEL() {
# 安装 EL 源
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

if [[ $? -ne 0 ]];then
FUNC_ECHO_ERROR "EL 源安装失败,请检查是否存在问题!"
exit 1004
fi

# 查看可提供升级的版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

VAR_KERNEL_NAME="kernel-lt"
read -p "请输入上面列出的版本中你想安装的版本(默认 lt 版本) [lt/ml]: " VAR_VERSION_CHOICE
if [[ ${VAR_VERSION_CHOICE} == "ml" ]];then
VAR_KERNEL_NAME="kernel-ml"
fi

FUNC_ECHO_INFO "本次选择升级的版本为:${VAR_KERNEL_NAME}"

# 升级内核
yum --enablerepo=elrepo-kernel install ${VAR_KERNEL_NAME}

if [[ $? -ne 0 ]];then
FUNC_ECHO_ERROR "内核升级失败,请根据报错检查是否存在问题!"
exit 1005
fi

# 查看目前版本
FUNC_ECHO_INFO "系统当前所安装的内核版本如下:"
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

# 选择默认内核版本
VAR_NUM_CHOICE=0
read -p "请输入上面列出的版本序号选择系统最终默认版本(默认 0): " VAR_NUM_CHOICE
if [[ $(echo ${VAR_NUM_CHOICE} | sed 's/[0-9]//g') == '' ]];then
if [[ ${VAR_NUM_CHOICE} == "" ]];then
VAR_NUM_CHOICE=0
fi
else
FUNC_ECHO_INFO "输入有误,将以默认配置执行..."
VAR_NUM_CHOICE=0
fi


# 配置系统默认
grub2-set-default ${VAR_NUM_CHOICE}

sed -i "s#^GRUB_DEFAULT=.*#GRUB_DEFAULT=${VAR_NUM_CHOICE}#g" /etc/default/grub

if [[ $? -ne 0 ]];then
FUNC_ECHO_ERROR "默认内核配置失败,可以手动配置/etc/default/grub文件中:GRUB_DEFAULT参数为指定内核索引!"
fi
}

#############################################################################################
# 卸载旧版本内核
#############################################################################################
function FUNC_UNINSTALL_KERNEL() {
# 显示内核版本
FUNC_ECHO_INFO "系统当前所安装的内核版本如下:"
rpm -qa | grep kernel

# 提示卸载
FUNC_ECHO_INFO "你可以手动卸载旧版本:yum -y remove 包名字,然后重启使用:uname -r 查看升级结果"
}

#############################################################################################
# 安装程序开始
#############################################################################################
# 系统检查
FUNC_SYSTEM_CHECK
# 用户检查
FUNC_USER_CHECK
# 联网检测
FUNC_NETWORK_CHECK
# 打印系统信息
FUNC_PRINT_SYSTEM_INFO

read -p "是否继续安装升级(默认 y) [y/n]: " VAR_CHOICE
case ${VAR_CHOICE} in
[yY][eE][sS]|[yY])
FUNC_UPDATE_KERNEL
FUNC_UNINSTALL_KERNEL
;;
[nN][oO]|[nN])
FUNC_ECHO_YELLOW "安装升级即将终止..."
exit
;;
*)
FUNC_UPDATE_KERNEL
FUNC_UNINSTALL_KERNEL
esac

20. 安装MySQL(8.0.27)

使用源的方式安装后的mysql, 默认开机自启

端口号3306 [可以在配置文件中进行修改]

配置文件路径: [/etc/my.cnf]

20.1 安装MySQL 8

  1. 配置MySQL 8 安装源
1
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
  1. 安装MySQL 8
1
sudo yum --enablerepo=mysql80-community install mysql-community-server
  • 提示下载插件是输入 yes或者y [一路yes到底]
  • 看到complet(完毕)就是安装完啦
  1. 启动MySQL
1
sudo service mysqld start
  1. 查看MySQL运行状态
1
service mysqld status
  1. 查看root临时密码

安装完mysql之后, 会有一个默认的临时密码让root账号登陆

1
grep "A temporary password" /var/log/mysqld.log

img

  1. 更改临时密码
1
2
3
4
5
6
7
8
9
输入:mysql -uroot -p  或者: mysql -uroot -p'密码'
登录成功
输入:ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
会提示:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements(密码不符合当前策略)

设置符合策略的密码(大小写字母+数据+符号)
比如:ALTER USER 'root'@'localhost' IDENTIFIED BY 'ROOTmm123456*';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ROOTmm123456*';
root@localhost:是本地连接
  1. 创建用户设置远程访问,root@%是远程连接
1
2
3
4
5
6
# 开启本地访问
mysql> grant all privileges on *.* to root@"localhost" identified by "密码";

# 开启远程访问
mysql> UPDATE user SET host = '%' WHERE user ='root; # mysql 8.0
mysql> flush privileges; # 刷新MySQL的系统权限相关表
  1. mysql基本操作指令
1
2
3
4
5
6
7
8
# 启动服务
service mysqld start / systemctl start mysqld
# 停止服务
service mysqld stop / systemctl stop mysqld
# 重启服务
service mysqld restart / systemctl restart mysqld
# 查看服务状态
service mysqld status / systemctl status mysqld

20.2 卸载MySQL 8

  1. 查看是否有安装过MySQL
1
rpm -qa | grep -i mysql
  1. 删除MySQL
1
2
3
yum -y remove MySQL-*
或者
yum -y remove mysql80-*

一般用rpm -e 的命令删除mysql,这样表面上删除了mysql,可是mysql的一些残余程序仍然存在,并且通过第一步的方式也查找不到残余,而yum命令比较强大,可以完全删除mysql.(ps:用rpm删除后再次安装的时候会提示已经安装了,这就是rpm没删除干净的原因)

  1. 把所有出现的目录都删除
1
2
find / -name mysql
# 查找mysql的一些目录, 把所有出现的目录都删除; 可以使用 rm -rf [文件夹路径]
  1. 删除配置文件
1
rm -rf /etc/my.cnf
  1. 删除MySQL的默认密码
1
2
rm -rf /root/.mysql_sercret
# 删除mysql的默认密码, 如果不删除, 以后安装mysql这个sercret中的默认密码就不会改变, 使用其中的默认密码可能会错线一些密码错误的问题.

20.3 修改密码策略

  1. 查看MySQL密码策略
1
SHOW VARIABLES LIKE 'validate_password.%';
  1. 策略说明
1
2
3
4
5
6
validate_password.length 是密码的最小长度,默认是8,我们把它改成6
输入:set global validate_password.length=6;
validate_password.policy 验证密码的复杂程度,我们把它改成0
输入:set global validate_password.policy=0;
validate_password.check_user_name 用户名检查,用户名和密码不能相同,我们也把它关掉
输入:set global validate_password.check_user_name=off;

20.4 添加用户

  1. 创建用户
1
create user 'saotolls'@'%' identified by 'Saotolls%Inc@Nb';
  1. 修改用户加密规则
1
ALTER USER 'saotolls'@'%' IDENTIFIED  WITH mysql_native_password BY 'Saotolls%Inc@Nb';
  1. 刷新
1
FLUSH PRIVILEGES;
  1. 查看是否修改成功
1
select host, user, authentication_string, plugin from user;
  1. 赋予权限配置远程访问
1
grant all privileges on *.* to 'saotolls'@'%';
  1. 重启mysql服务
1
serivce mysqld start/stop

20.5 删除用户

1
DROP USER 'saotolls'@'%';

20.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
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
#以下选项会被MySQL客户端应用读取。注意只有MySQL附带的客户端应用程序保证可以读取这段内容。如果你想你自己的MySQL应用程序获取这些值。需要在MySQL客户端库初始化的时候指定这些选项。
[client]
port = 3309
socket = /usr/local/mysql/tmp/mysql.sock
[mysqld] #服务器端配置
!include /usr/local/mysql/etc/mysqld.cnf #包含的配置文件,可以把用户名和密码文件单独存放
port = 3306  #监听端口  
bind-address = 0.0.0.0  #监听的ip地址
server-id = 1  #MySQL服务的ID
socket = /usr/local/mysql/tmp/mysql.sock  #socket通信设置
pid-file = /usr/local/mysql/var/mysql.pid  #pid文件路径
basedir = /usr/local/mysql/          #MySQL程序路径
datadir = /usr/local/mysql/data        #数据目录
tmpdir = /usr/local/mysql/tmp/
#此目录被 MySQL用来保存临时文件.例如,它被用来处理基于磁盘的大型排序,和内部排序一样,以及简单的临时表.如果你不创建非常大的临时文件,将其放置到 swapfs/tmpfs 文件系统上也许比较好。另一种选择是你也可以将其放置在独立的磁盘上.你可以使用”;”来放置多个路径,他们会按照 roud-robin 方法被轮询使用.

slave-load-tmpdir = /usr/local/mysql/tmp/ #当slave执行load data infile时使用
#*** skip options 相关选项 ***#
skip-name-resolve
#禁止 MySQL 对外部连接进行 DNS 解析,使用这一选项可以消除 MySQL 进行 DNS 解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用 IP 地址方式,否则 MySQL 将无法正常处理连接请求!
skip-symbolic-links
#不能使用连接文件,多个客户可能会访问同一个数据库,因此这防止外部客户锁定 MySQL 服务器。 该选项默认开启

skip-external-locking
#不使用系统锁定,要使用 myisamchk,必须关闭服务器 ,避免 MySQL的外部锁定,减少出错几率增强稳定性。

skip-slave-start
#启动 mysql,不启动复制

skip-networking
#开启该选项可以彻底关闭 MySQL 的 TCP/IP 连接方式,如果 WEB 服务器是以远程连接的方式访问 MySQL 数据库服务器则不要开启该选项!否则将无法正常连接! 如果所有的进程都是在同一台服务器连接到本地的 mysqld, 这样设置将是增强安全的方法

sysdate-is-now = 1
#把SYSDATE 函数编程为 NOW的别名

#*** 系统资源相关选项 ***#
back_log = 50
#接受队列,对于没建立 tcp 连接的请求队列放入缓存中,队列大小为 back_log,受限制与 OS 参数,试图设定 back_log 高于你的操作系统的限制将是无效的。默认值为 50。对于 Linux 系统推荐设置为小于512的整数。如果系统在一个短时间内有很多连接,则需要增大该参数的值

max_connections = 1000
#指定MySQL允许的最大连接进程数。如果在访问数据库时经常出现"Too Many Connections"的错误提 示,则需要增大该参数值。

max_connect_errors = 10000
#如果某个用户发起的连接 error 超过该数值,则该用户的下次连接将被阻塞,直到管理员执行 flush hosts ; 命令或者服务重启, 防止黑客 , 非法的密码以及其他在链接时的错误会增加此值

open_files_limit = 10240
#MySQL打开的文件描述符限制,默认最小1024;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit-n的值,哪个大用哪个,当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。

connect-timeout = 10
#连接超时之前的最大秒数,在 Linux 平台上,该超时也用作等待服务器首次回应的时间

wait-timeout = 28800
#等待关闭连接的时间

interactive-timeout = 28800
#关闭连接之前,允许 interactive_timeout(取代了wait_timeout)秒的不活动时间。客户端的会话 wait_timeout 变量被设为会话interactive_timeout 变量的值。如果前端程序采用短连接,建议缩短这2个值, 如果前端程序采用长连接,可直接注释掉这两个选项,默认配置(8小时)

slave-net-timeout = 600
#从服务器也能够处理网络连接中断。但是,只有从服务器超过slave_net_timeout 秒没有从主服务器收到数据才通知网络中断

net_read_timeout = 30
#从服务器读取信息的超时

net_write_timeout = 60
#从服务器写入信息的超时

net_retry_count = 10
#如果某个通信端口的读操作中断了,在放弃前重试多次

net_buffer_length = 16384
#包消息缓冲区初始化为 net_buffer_length 字节,但需要时可以增长到 max_allowed_packet 字节

max_allowed_packet = 64M
# 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB 字段一起工作时相当必要), 每个连接独立的大小.大小动态增加。 设置最大包,限制server接受的数据包大小,避免超长SQL的执行有问题 默认值为16M,当MySQL客户端或mysqld
服务器收到大于 max_allowed_packet 字节的信息包时,将发出“信息包过大”错误,并关闭连接。对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与 MySQL 服务器的连接”错误。默认值 16M。

table_cache = 512
# 所有线程所打开表的数量. 增加此值就增加了mysqld所需要的文件描述符的数量这样你需要确认在[mysqld_safe]中 “open-files-limit” 变量设置打开文件数量允许至少4096

thread_stack = 192K
# 线程使用的堆大小. 此容量的内存在每次连接时被预留.MySQL 本身常不会需要超过 64K 的内存如果你使用你自己的需要大量堆的 UDF 函数或者你的操作系统对于某些操作需要更多的堆,你也许需要将其设置的更高一点.默认设置足以满足大多数应用

thread_cache_size = 20
# 我们在 cache 中保留多少线程用于重用.当一个客户端断开连接后,如果 cache 中的线程还少于 thread_cache_size,则客户端线程被放入 cache 中.这可以在你需要大量新连接的时候极大的减少线程创建的开销(一般来说如果你有好的线程模型的话,
这不会有明显的性能提升.)服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,
如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用
根据物理内存设置规则如下:
1G —> 8
2G —> 16
3G —> 32
大于3G —> 64

thread_concurrency = 8
#此允许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.该参数取值为服务器逻辑CPU数量×2,在本例中,服务器有 2 颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为 4 × 2 = 8.设置 thread_concurrency的值的正确与否,
mysql 的性能影响很大, 在多个 cpu(或多核)的情况下,错误设置了 thread_concurrency 的值, 会导致 mysql 不能充分利用多 cpu(或多核),出现同一时刻只能一个 cpu(或核)在工作的情况。 thread_concurrency 应设为 CPU 核数的 2 倍.比如有一个双核的 CPU,
那么 thread_concurrency 的应该为 4; 2 个双核的 cpu,thread_concurrency 的值应为 8,属重点优化参数


#*** qcache settings 相关选项 ***#
query_cache_limit = 2M
#不缓存查询大于该值的结果.只有小于此设定值的结果才会被缓冲, 此设置用来保护查询缓冲,防止一个极大的结果集将其他所有的查询结果都覆盖.

query_cache_min_res_unit = 2K
#查询缓存分配的最小块大小.默认是 4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费
查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
如果查询缓存碎片率超过 20%,可以用 FLUSH QUERY CACHE 整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。
查询缓存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size *100%
查询缓存利用率在 25%以下的话说明 query_cache_size 设置的过大,可适当减小;查询缓存利用率在 80%以上而且 Qcache_lowmem_prunes > 50 的话说明 query_cache_size 可能有点小,要不就是碎片太多。
查询缓存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

query_cache_size = 64M
#指定 MySQL 查询缓冲区的大小。可以通过在 MySQL 控制台执行以下命令观察:
代码:
> SHOW VARIABLES LIKE '%query_cache%';
> SHOW STATUS LIKE 'Qcache%';如果 Qcache_lowmem_prunes 的值非常大,则表明经常出现缓冲不够的情况;
如果 Qcache_hits 的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲; Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。
memlock # 如果你的系统支持 memlock() 函数,你也许希望打开此选项用以让运行中的 mysql 在在内存高度
紧张的时候,数据在内存中保持锁定并且防止可能被 swapping out,此选项对于性能有益

#*** default settings 相关选项 ***#
default_table_type = InnoDB
# 当创建新表时作为默认使用的表类型,如果在创建表示没有特别执行表类型,将会使用此值

default-time-zone = system
#服务器时区

character-set-server = utf8
#server 级别字符集

default-storage-engine = InnoDB
#默认存储引擎

#*** tmp && heap settings 相关选项 ***#
tmp_table_size = 512M
#临时表的最大大小,如果超过该值,则结果放到磁盘中,此限制是针对单个表的,而不是总和.

max_heap_table_size = 512M
#独立的内存表所允许的最大容量.此选项为了防止意外创建一个超大的内存表导致永尽所有的内存资源.

#*** log settings 相关选项 ***#
log-bin = mysql-bin
#打开二进制日志功能.在复制(replication)配置中,作为 MASTER 主服务器必须打开此项.如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.这些路径相对于 datadir

log_slave_updates = 1
#表示slave将复制事件写进自己的二进制日志

log-bin-index = mysql-bin.index
#二进制的索引文件名

relay-log = relay-log
#定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录,文件名为host_name-relay-bin.nnnnnn(By default, relay log file names have the form host_name-relay-bin.nnnnnn in the data directory);

relay_log_index = relay-log.index
#relay-log的索引文件名

log-warnings = 1
# 将警告打印输出到错误 log 文件.如果你对于MySQL有任何问题,你应该打开警告 log 并且仔细审查错误日志,查出可能的原因.

log-error = /usr/local/mysql/log/mysql.err
#错误日志路径

log_output = FILE
#参数 log_output 指定了慢查询输出的格式,默认为 FILE,你可以将它设为 TABLE,然后就可以查询 mysql 架构下的 slow_log 表了

log_slow_queries
#指定是否开启慢查询日志(该参数要被slow_query_log取代,做兼容性保留)

slow_query_log = 1
# 指定是否开启慢查询日志. 慢查询是指消耗了比 “long_query_time” 定义的更多时间的查询.如果 log_long_format 被打开,那些没有使用索引的查询也会被记录.如果你经常增加新查询到已有的系统内的话. 一般来说这是一个好主意,

long-query-time = 1
#设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s.所有的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.不要在这里使用”1″, 否则会导致所有的查询,甚至非常快的查询页被记录下来(由于MySQL 目前时间的精确度只能达到秒的级别).

log_long_format
# 在慢速日志中记录更多的信息.一般此项最好打开,打开此项会记录使得那些没有使用索引的查询也被作为到慢速查询附加到慢速日志里

slow_query_log_file = /usr/local/mysql/log/slow.log
# 指定慢日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log

log-queries-not-using-indexes
#如果运行的SQL语句没有使用索引,则mysql数据库同样会将这条SQL语句记录到慢查询日志文件中。

min_examined_row_limit=1000    
#记录那些由于查找了多余1000次而引发的慢查询

long-slow-admin-statements    
#记录那些慢的optimize table,analyze table和alter table语句

log-slow-slave-statements
#记录由Slave所产生的慢查询

general_log = 1
#将所有到达MySQL Server的SQL语句记录下来,默认关闭

general_log_file = /usr/local/mysql/log/mysql.log
#general_log路径

max_binlog_size = 1G
#如果二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于1GB或小于4096字节。 默认值是1GB。如果你正使用大的事务,二进制日志还会超过max_binlog_size

max_relay_log_size = 1G
#标记relaylog允许的最大值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小;

relay-log-purge = 1
#是否自动清空不再需要中继日志时。默认值为1(启用)

expire_logs_days = 30
#超过 30 天的 binlog 删除

binlog_cache_size = 1M
# 在一个事务中 binlog 为了记录 SQL 状态所持有的 cache 大小,如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.所有从事务来的状态都将被缓冲在 binlog 缓冲中然后在提交后一次性写入到 binlog 中,如果事务比此值大, 会使用磁盘上的临时文件来替代.此缓冲在每个连接的事务第一次更新状态时被创建.session 级别

replicate-wild-ignore-table = mysql.%
#复制时忽略数据库及表
slave_skip_errors=all
#定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句。
slave_skip_errors选项有四个可用值,分别为:off,all,ErorCode,ddl_exist_errors。
默认情况下该参数值是off,我们可以列出具体的error code,也可以选择all,mysql5.6及MySQL Cluster NDB 7.3以及后续版本增加了参数ddl_exist_errors,该参数包含一系列error code(1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)
一些error code代表的错误如下:
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1050:数据表已存在,创建数据表失败
1051:数据表不存在,删除数据表失败
1054:字段不存在,或程序文件跟数据库有冲突
1060:字段重复,导致无法插入
1061:重复键名
1068:定义了多个主键
1094:位置线程ID
1146:数据表缺失,请恢复数据库
1053:复制过程中主服务器宕机
1062:主键冲突 Duplicate entry '%s' for key %d


#*** MyISAM 相关选项 ***#
key_buffer_size = 256M
#指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。如果是以InnoDB引擎为主的DB,专用于MyISAM引擎的 key_buffer_size 可以设置较小,8MB 已足够 如果是以MyISAM引擎为主,可设置较大,但不能超过4G. 在这里,强烈建议不使用MyISAM引擎,默认都是用InnoDB引擎.注意:该参数值设置的过大反而会是服务器整体效率降低!

sort_buffer_size = 2M
#查询排序时所能使用的缓冲区大小。排序缓冲被用来处理类似 ORDER BY 以及 GROUP BY 队列所引起的排序.一个用来替代的基于磁盘的合并分类会被使用.查看 “Sort_merge_passes” 状态变量. 在排序发生时由每个线程分配 注意:该参数对应的分配内存是每连接独占!如果有 100 个连接,那么实际分配的总共排序缓冲区大小为 100 × 6 =600MB,所以,对于内存在 4GB 左右的服务器推荐设置为 6-8M。

read_buffer_size = 2M
#读查询操作所能使用的缓冲区大小。和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享!用来做 MyISAM 表全表扫描的缓冲大小.当全表扫描需要时,在对应线程中分配.

join_buffer_size = 8M
#联合查询操作所能使用的缓冲区大小,和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享!此缓冲被使用来优化全联合(full JOINs 不带索引的联合).类似的联合在极大多数情况下有非常糟糕的性能表现, 但是将此值设大能够减轻性能影响.通过 “Select_full_join”状态变量查看全联合的数量, 当全联合发生时,在每个线程中分配。

read_rnd_buffer_size = 8M
#MyISAM 以索引扫描(Random Scan)方式扫描数据的 buffer大小

bulk_insert_buffer_size = 64M
#MyISAM 使用特殊的类似树的 cache 来使得突发插入(这些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATAINFILE) 更快. 此变量限制每个进程中缓冲树的字节数.设置为 0 会关闭此优化.为了最优化不要将此值设置大于 “key_buffer_size”.当突发插入被检测到时此缓冲将被分配MyISAM 用在块插入优化中的树缓冲区的大小。注释:这是一个 per thread 的限制 ( bulk 大量).此缓冲当 MySQL 需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE到一个空表中引起重建索引时被分配.这在每个线程中被分配.所以在设置大值时需要小心.

myisam_sort_buffer_size = 64M
#MyISAM 设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE 或用 CREATE INDEX 创建索引或 ALTER TABLE 过程中排序 MyISAM 索引分配的缓冲区

myisam_max_sort_file_size = 10G
#mysql重建索引时允许使用的临时文件最大大小

myisam_repair_threads = 1
#如果该值大于 1,在 Repair by sorting 过程中并行创建MyISAM 表索引(每个索引在自己的线程内).如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们.这对于拥有多个 CPU 以及大量内存情况的用户,是一个很好的选择.

myisam_recover = 64K
#允许的 GROUP_CONCAT()函数结果的最大长度
transaction_isolation = REPEATABLE-READ # 设定默认的事务隔离级别.可用的级别如下:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ,SERIALIZABLE
1.READ UNCOMMITTED-读未提交 2.READ COMMITTE-读已提交 3.REPEATABLE READ -可重复读 4.SERIALIZABLE -串行


# *** INNODB 相关选项 ***#
skip-innodb
# 如果你的 MySQL 服务包含 InnoDB 支持但是并不打算使用的话,使用此选项会节省内存以及磁盘空间,并且加速某些部分

innodb_file_per_table = 1
# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
独立表空间优点:
1.每个表都有自已独立的表空间。
2.每个表的数据和索引都会存在自已的表空间中。
3.可以实现单表在不同的数据库中移动。
4.空间可以回收(除drop table操作处,表空不能自已回收)
缺点:
1.单表增加过大,如超过100G
结论:
共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files

innodb_status_file = 1
#启用InnoDB的status file,便于管理员查看以及监控等

innodb_open_files = 2048
# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300

innodb_additional_mem_pool_size = 100M
#设置InnoDB存储引擎用来存放数据字典信息以及一些内部数据结构的内存空间大小,所以当我们一个MySQL Instance中的数据库对象非常多的时候,是需要适当调整该参数的大小以确保所有数据都能存放在内存中提高访问效率的。

innodb_buffer_pool_size = 2G
#包括数据页、索引页、插入缓存、锁信息、自适应哈希所以、数据字典信息.InnoDB 使用一个缓冲池来保存索引和原始数据, 不像 MyISAM.这里你设置越大,你在存取表里面数据时所需要的磁盘 I/O 越少.在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的 80%,不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.注意在 32 位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,所以不要设置的太高.

innodb_write_io_threads = 4
innodb_read_io_threads = 4
# innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4
# 注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL服务,允许值的范围从 1-64

innodb_data_home_dir = /usr/local/mysql/var/
#设置此选项如果你希望 InnoDB 表空间文件被保存在其他分区.默认保存在 MySQL 的 datadir 中.

innodb_data_file_path = ibdata1:500M;ibdata2:2210M:autoextend
#InnoDB将数据保存在一个或者多个数据文件中成为表空间.如果你只有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了.其他情况下.每个设备一个文件一般都是个好的选择.你也可以配置 InnoDB 来使用裸盘分区 – 请参考手册来获取更多相关内容

innodb_file_io_threads = 4
#用来同步 IO 操作的 IO 线程的数量. 此值在 Unix 下被硬编码为 4,但是在 Windows 磁盘 I/O 可能在一个大数值下表现的更好.

innodb_thread_concurrency = 16
#在 InnoDb 核心内的允许线程数量,InnoDB 试着在 InnoDB 内保持操作系统线程的数量少于或等于这个参数给出的限制,最优值依赖于应用程序,硬件以及操作系统的调度方式.过高的值可能导致线程的互斥颠簸.默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量

innodb_flush_log_at_trx_commit = 1
#如果设置为 1 ,InnoDB 会在每次提交后刷新(fsync)事务日志到磁盘上,这提供了完整的 ACID 行为.如果你愿意对事务安全折衷, 并且你正在运行一个小的食物, 你可以设置此值到 0 或者 2 来减少由事务日志引起的磁盘 I/O
0 代表日志只大约每秒写入日志文件并且日志文件刷新到磁盘.
2 代表日志写入日志文件在每次提交后,但是日志文件只有大约每秒才会刷新到磁盘上.

innodb_log_buffer_size = 8M
#用来缓冲日志数据的缓冲区的大小.当此值快满时, InnoDB 将必须刷新数据到磁盘上.由于基本上每秒都会刷新一次,所以没有必要将此值设置的太大(甚至对于长事务而言)

innodb_log_file_size = 500M
#事物日志大小.在日志组中每个日志文件的大小,你应该设置日志文件总合大小到你缓冲池大小的5%~100%,来避免在日志文件覆写上不必要的缓冲池刷新行为.不论如何, 请注意一个大的日志文件大小会增加恢复进程所需要的时间.

innodb_log_files_in_group = 2
#在日志组中的文件总数.通常来说 2~3 是比较好的.

innodb_log_group_home_dir = /usr/local/mysql/var/
# InnoDB 的日志文件所在位置. 默认是 MySQL 的 datadir.你可以将其指定到一个独立的硬盘上或者一个 RAID1 卷上来提高其性能innodb_max_dirty_pages_pct = 90 #innodb 主线程刷新缓存池中的数据,使脏数据比例小于 90%,这是一个软限制,不被保证绝对执行.

innodb_lock_wait_timeout = 50
#InnoDB 事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB 在它自己的 锁定表中自动检测事务死锁并且回滚事务。 InnoDB 用 LOCK TABLES 语句注意到锁定设置。默认值是 50 秒

innodb_flush_method = O_DSYNC
# InnoDB 用来刷新日志的方法.表空间总是使用双重写入刷新方法.默认值是 “fdatasync”, 另一个是 “O_DSYNC”.

innodb_force_recovery=1
# 如果你发现 InnoDB 表空间损坏, 设置此值为一个非零值可能帮助你导出你的表.从1 开始并且增加此值知道你能够成功的导出表.

innodb_fast_shutdown
# 加速 InnoDB 的关闭. 这会阻止 InnoDB 在关闭时做全清除以及插入缓冲合并.这可能极大增加关机时间, 但是取而代之的是 InnoDB 可能在下次启动时做这些操作.

# *** 其他 相关选项 ***#
[mysqldump]
quick
#支持较大数据库的转储,在导出非常巨大的表时需要此项。增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或mysqld必须返回大的结果行时mysqld才会分配更多内存。该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。 如果你正是用大的BLOB值,而且未为mysqld授予为处理查询而访问足够内存的权限,也会遇到与大信息包有关的奇怪问题。如果怀疑出现了该情况,请尝试在mysqld_safe脚本开始增加ulimit -d 256000,并重启mysqld。

[mysql]
auto-rehash
#允许通过 TAB 键提示

default-character-set = utf8
#数据库字符集

connect-timeout = 3
[mysqld_safe]

open-files-limit = 8192
#增加每个进程的可打开文件数量.确认你已经将全系统限制设定的足够高!打开大量表需要将此值设大

21. RabbitMQ

21.1 前置条件

  1. 需要系统中存在 Erlang 的环境。
  2. 如果使用笔记中的远程在线方式下载,则还需要系统中存在 wget组件来用于远程http下载。
1
2
3
4
5
6
7
8
9
10
# 更新系统依赖组件库
yum update -y

# 安装 wget 组件
yum install wget -y
# 1. 下载Erlang[RPM]安装文件
wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm/download.rpm

# 2. 安装rpm包文件
rpm -ivh erlang-23.3.4.11-1.el7.x86_64.rpm

21.2 RPM方式安装

  1. 从RabbitMQ官方网站下载 rpm安装包管理文件;

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.10.0-rc.6/rabbitmq-server-3.10.0.rc.6-1.el7.noarch.rpm

1
2
3
4
5
6
7
8
9
10
11
rpm -ivh rabbitmq-server-3.10.0.rc.6-1.el7.noarch.rpm
1. 启动服务
systemctl start rabbitmq-server
2. 停止服务
systemctl stop rabbitmq-server
3. 重启服务
systemctl restart rabbitmq-server
4. 加入开机自启
systemctl enable rabbitmq-server
5. 移除开机自启
systemctl disable rabbitmq-server

21.3 二进制编译方式安装

二进制源文件手动编译安装,需要系统有gcc编译环境

1
2
3
4
5
6
7
8
9
10
11
12
1. 下载二进制源文件
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.10.1/rabbitmq-server-generic-unix-3.10.1.tar.xz
2. 解压文件
tar vf rabbitmq-server-generic-unix-3.10.1.tar.xz
3. 进入到文件
cd rabbitmq-server-generic-unix-3.10.1
4. 创建保存文件文件目录
mkdir -p /usr/local/rabbitmq
5. 编译
./configura --perfix=/usr/local/rabbitmq
make && make install
6. 使用 ln -s [源文件绝对地址] /usr/bin/[文件名] 创建文件的软链接

21.4 Docker镜像方式安装

使用Docker镜像方式部署安装,需要系统中存在Docker环境,并且能够正常运行。

因为在Docker方式部署时,笔记中采用联网方式远程下载包安装使用,所以在部署过程中请保证网络通畅。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 从Docker镜像远程仓库拉取RabbitMQ的镜像文件
docker pull rabbitmq:3.10-management

# 配置启动
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.10-management
1. 使用Docker容器时,请务必保证Docker服务正常启动并运行正常;
2. 保证操作资源的服务器系统网络正常;
3. 如若使用上述指令的默认端口映射参数,则需要确定且保证对应服务的端口为被占用,否则容器将启动失败;
5672:mq服务端口号映射
15672:mq服务web管理界面服务端口好映射
4. 如果要配置在docker服务启动后,让此mq容器自动跟随docker服务的启动而启动。
4.1 如果此时的容器已存在,则修改指定容器的参数:
docker update [容器名] --restart=always
4.2 如果此时的容器还未创建,则在启动指令后添加:
--restart=always
5. web页面默认账号密码都是:guest,并且账户支持远程ip地址访问登陆。
6. 如若mq是采用rpm包或者二进制源码编译安装,则默认账户guest只支持在本机下访问。在远程ip处访问,需要使用指令创建账户信息以及分配指定需要的权限信息。

21.5 配置文件的简单修改

如若使用的是Docker部署安装的方式,则需要将在主机上修改后的配置文件内容通过docker的文件映射功能,映射到容器服务中,才能被容器中的服务读取生效。

21.5 指令创建新用户以及权限分配


关于CentOS 7.6 的一些操作(持续不定时更新中)
https://saotolls.github.io/2023/03/22/关于CentOS-7-6-的一些操作/
作者
saotolls.china
发布于
2023年3月22日
许可协议