Rocky9 编译安装 Nginx Mariadb Asp.net Core6 (实测 笔记)

发布时间 2023-08-09 17:21:12作者: Pofei

引用 https://www.cnblogs.com/vicowong/p/16974219.html

一、查看硬件信息

1、查看物理cpu个数、核心数量、线程数
grep 'physical id' /proc/cpuinfo | sort -u | wc -l
grep 'core id' /proc/cpuinfo | sort -u | wc -l
grep 'processor' /proc/cpuinfo | sort -u | wc -l

2、查看cpu信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

3、查看内存和硬盘
free -h && df -h

4、查看IP地址
ip addr

5、查看dns配置文件
cat /etc/resolv.conf

6、用户和用户组 列表文件
cat /etc/group
cat /etc/passwd

7、查看可以登录系统的用户
cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1

8、把 /usr/local/src 目录,转到 /data 下
mkdir -p /data
mv /usr/local/src /data
ln -s /data/src /usr/local/src

9、主机名设置、查看
hostnamectl --static set-hostname tRocky
hostname

=====================================================
bombardier 安装及使用
ln -s /usr/local/src/bombardier /bin
bombardier -c 125 -n 10000 http://localhost:5000

iftop安装及使用
dnf install epel-release
dnf install iftop
=====================================================

 

二、基础设置

1、安装基础包

dnf install vim wget lsof gcc gcc-c++ tar bzip2 firewalld openssl-devel mlocate make chrony -y

=====================================================

Rocky9 换源
cd /etc/yum.repos.d
mkdir backup
cp rocky* backup/
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/rocky*.repo
dnf makecache

=====================================================

2、配置Vim显示格式
vim /etc/vimrc,打开文件在末尾添加以下内容
set nocompatible
set number
filetype on
set history=1000
set background=dark
syntax on
set autoindent
set smartindent
set tabstop=2
set shiftwidth=2
set showmatch
set guioptions-=T
set vb t_vb=
set ruler
set nohls
set incsearch
if has("vms")
set nobackup
else
set backup
endif

:wq 保存退出
VIM格式化使用方法(打开文件后,输入以下命令,第二个G是shift+g)
gg=G

3、chrony来实现时间同步(默认不再支持ntp软件包)

设置时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

加入开启启动
systemctl enable chronyd && systemctl start chronyd

设置NTP同步时间,设置时区
timedatectl set-ntp true
timedatectl set-timezone Asia/Shanghai

查看配置文件
cat /etc/chrony.conf

查看和更改系统的时间和日期
timedatectl

修改时间
date -s 2000-01-01

同步时间
systemctl restart chronyd 
chronyc sources -v

设置定时任务,自动执行
mkdir -p /data/crond

添加以下内容 (每天 02:00同步一次,并且日志记录到 /data/crond/ntpdate.log)(或者crontab -e 打开后添加)
echo "00 02 * * * systemctl restart chronyd && chronyc sources -v 1>>/data/crond/ntpdate.log 2>&1" >> /var/spool/cron/root

4、设置网络(使用新的NetworkManager,弃用了原本的 network)

查看配置文件(不建议直接修改)
cat /etc/NetworkManager/system-connections/enp0s3.nmconnection

显示当前网络设置、当前网络连接
nmcli
nmcli d
nmcli c show

常用命令(enp0s3 为网络连接名称、c 为connection 简写 、m 为 modify 简写)

nmcli c m enp0s3 ipv4.address 192.168.0.10/24 # 修改 IP 地址和子网掩码
nmcli c m enp0s3 ipv4.gateway 192.168.0.1 # 修改默认网关
nmcli c m enp0s3 ipv4.method manual # 修改为静态配置,默认是 auto
nmcli c m enp0s3 ipv6.method disabled # 将 IPv6 禁用
nmcli c m enp0s3 connection.autoconnect yes # 开机启动
nmcli c m enp0s3 ipv4.dns 8.8.8.8 # 修改 DNS
nmcli c m enp0s3 +ipv4.dns 8.8.8.8 # (+号,表示添加DNS)
nmcli c m enp0s3 -ipv4.dns 8.8.8.8 # (-号,表示删除 DNS)

nmcli connection add type ethernet ifname enp0s3 # 新建网络连接
nmcli c delete enp0s3 # 删除网络连接
nmcli c reload # 重新载入一下配置文件
nmcli c down enp0s3 # 停止网络连接
nmcli c up enp0s3 # 启用网络连接

5、设置PUTTY远程登录时,不使用密码,使用密钥文件登录

服务器上创建目录
mkdir -p /root/.ssh

在"客户机"生成对称密钥,把客户机上的公钥复制到服务器(公钥文件:id_rsa.pub)
[root@centos ~] ssh-keygen -m PEM -t rsa -b 4096
根据提示操作,生成公钥
上传到服务器指定目录(*** 或使用软件远程复制id_rsa.pub到服务器/root/.ssh中。)
scp id_rsa.pub root@192.168.1.10/root/.ssh

查看服务器上,公钥是否已经存在
cd /root/.ssh
ll
-rw-r--r-- 1 root root 394 12月 5 09:33 id_rsa.pub

导入密钥到authorized_keys
cat id_rsa.pub >> authorized_keys

ll /root/.ssh
-rw-r--r-- 1 root root 394 12月 5 09:37 authorized_keys
-rw-r--r-- 1 root root 394 12月 5 09:33 id_rsa.pub

导入后,删除公钥文件
rm id_rsa.pub

设置目录和文件读取权限
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

设置sshd配置文件
vim /etc/ssh/sshd_config
找到GSSAPICleanupCredentials,并且修改为以下内容
GSSAPICleanupCredentials yes
:wq 保存退出

重启sshd服务,让其生效
systemctl restart sshd


客户端设置PUTTY,进行远程登录
打开软件 PuTTYgen
点击load 选择之前客户机生成私钥文件id_rsa, 点击save private key 生成 pKey.ppk文件
打开软件 PuTTY
点击Session,在HostName(or IP address)输入服务器地址
点击Connection下的DATA,在Auto-login username中输入登录账号(当前账号为root)
点击Connection下的SSH下的Auth,点击Browse 选择之前生成 pKeyppk文件
点击Session,在Saved Sessions中,输入需要保存的Session名称,点击保存

设置完成后,即可以远程连接到服务器
打开软件 PuTTY
点击Session,在"Default Settings"下,找到之前已经保存的Session,双击打开连接
如果显示 Authenticating with public key "xxxxx-xxxx"时,即表未成功

设置新用户,并且使用密码和证书双重认证远程登录。同时禁止root远程登录 (如不需要,可忽略)
 root登录后,修改root密码 (安全建议:密码为15位,大小字母+数字+特殊字符)
passwd

添加新用户,并且设置密码
adduser vicowong
passwd vicowong

创建目录,复制密钥相关文件到用户目录,并且设置权限
mkdir /home/vicowong/.ssh -p
cp /root/.ssh/authorized_keys /home/vicowong/.ssh
chmod 700 /home/vicowong/.ssh
chmod 600 /home/vicowong/.ssh/authorized_keys
chown vicowong:vicowong /home/vicowong/.ssh -R

设置防火墙,设置远程连接端口(这里是26322)
systemctl enable firewalld && systemctl start firewalld
firewall-cmd --zone=public --add-port=26322/tcp --permanent
firewall-cmd --reload && firewall-cmd --list-ports

安装semanage(用于设置selinux策略)
dnf install policycoreutils-python-utils

查看当前 selinux 是否启用 即 Enforcing 状态 (否则有可能设置 selinux 策略不成功)
getenforce

查看当前 selinux 关于远程ssh连接端口的设置
semanage port -l | grep ssh
ssh_port_t tcp 22
添加新端口
semanage port -a -t ssh_port_t -p tcp 26322

--------------------------------------------------------------------------------------------
移除端口
semanage port -d -t ssh_port_t -p tcp 26322
-------------------------------------------------------------------------------------------
设置sshd配置文件
vim /etc/ssh/sshd_config
找到以下内容,并且进行修改
Port 26322
Protocol 2
ServerKeyBits 1024
PermitRootLogin no
AllowUsers vicowong
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitEmptyPasswords no
PasswordAuthentication yes
AuthenticationMethods publickey,password
X11Forwarding no
MaxStartups 10:30:60
:wq 保存退出

# AuthorizedKeysFile
# PasswordAuthentication
# X11Forwarding

以上三个搜索,查看是否有重复设置


重启sshd服务,让其生效
systemctl restart sshd


使用新用户登录(重新打开一个新终端,原来的终端先不关,避免因设置不当导致没法连接远程)
打开软件 PuTTY,点击之前保存的Sessions,点击Load读取之前的配置
在Port框输入端口(当前账号为26322)
点击Connection下的DATA,在Auto-login username中输入登录账号(当前账号为vicowong)
点击Session 点击Save。保存当前修改。
点击Open,打开终端。

设置后,必须远程将进行密码和证书双重认证。
远程登录会以vicowong这个账号进行登录。安装维护需要root权限时,可以使用su实现
su root


=================================================================================

编译 升级 gcc
cd /usr/local/src/
wget http://mirrors.concertpass.com/gcc/releases/gcc-12.2.0/gcc-12.2.0.tar.gz
tar zvxf gcc-12.2.0.tar.gz && cd gcc-12.2.0/
./contrib/download_prerequisites && ldconfig
mkdir gcc-build && cd gcc-build
../configure --enable-languages=c,c++ --disable-multilib --enable-checking=release --prefix=/opt/gcc
make -j8
make install
echo '/opt/gcc/lib64' > /etc/ld.so.conf.d/local-lib64.conf
ldconfig -v
mv /usr/bin/gcc /usr/bin/gcc.bak
mv /usr/bin/g++ /usr/bin/g++.bak
ln -s /opt/gcc/bin/gcc /usr/bin/gcc
ln -s /opt/gcc/bin/g++ /usr/bin/g++
update-alternatives --install /usr/bin/gcc gcc /opt/gcc/bin/gcc 999
gcc --version
shutdown -r now

编译 升级 内核
yum -y install gcc gcc-c++ make autoconf automake libtool ncurses-devel flex bison openssl openssl-devel bc elfutils-libelf-devel zlib zlib-devel pcre pcre-devel
cd /usr/local/src/
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.82.tar.xz
tar vxf linux-5.15.82.tar.xz && cd linux-5.15.82/
cp /boot/config-5.14.0-162.6.1.el9_1.x86_64 .config
=======================================================================
vim .config
在.config文件中找到CONFIG_SYSTEM_TRUSTED_KEYS,CONFIG_DEBUG_INFO_BTF这两行,并将这两行注释。
=======================================================================
make menuconfig
make -j8
make modules
make modules_install
make install

grubby --info=ALL | grep ^kernel
grubby --default-kernel
grubby --set-default=/boot/vmlinuz-5.16.2
grubby --remove-kernel /boot/vmlinuz-4.18.0-348.el8.0.2.x86_64

rpm -qa | grep kernel
yum remove kernel-core-4.18.0 kernel-devel-4.18.0 kernel-tools-libs-4.18.0 kernel-headers-4.18.0

删除内核,会删除gcc环境,重新安装GCC
yum installgcc gcc-c++ -y

 

三、共用工具包
1、安装jemalloc(需要 bzip2 库解压)
cd /usr/local/src/
wget https://github.com/jemalloc/jemalloc/releases/download/5.3.0/jemalloc-5.3.0.tar.bz2
tar xjf jemalloc-5.3.0.tar.bz2 && cd jemalloc-5.3.0
./configure && make && make install
echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig -v
find / -name jemalloc

2、编译 升级 zlib
cd /usr/local/src/
wget http://zlib.net/zlib-1.2.13.tar.gz
tar zvxf zlib-1.2.13.tar.gz && cd zlib-1.2.13
./configure && make && make install
ldconfig -v
find / -name libz.so.1.2.13
ll /usr/local/lib

3、编译 openssl3
find / -name openssl

编译时需要用到 Perl 的 Text::Template 模块和IPC::Cmd 模块
yum -y install perl-CPAN
cpan -i Text::Template
cpan -i IPC::Cmd

cd /usr/local/src
wget https://www.openssl.org/source/openssl-3.0.7.tar.gz
tar zvxf openssl-3.0.7.tar.gz && cd openssl-3.0.7
"--prefix=/usr"头文件和库文件路径,"--openssldir=/usr"证书等文件路径:
./config shared zlib --prefix=/opt/openssl3 --openssldir=/opt/openssl3
make update && make && make install

rm -rf /usr/bin/openssl
rm -rf /usr/include/openssl
ln -s /opt/openssl3/bin/openssl /usr/bin/openssl
ln -s /opt/openssl3/include/openssl /usr/include/openssl

rm -rf /usr/lib64/libssl.so
rm -rf /usr/lib/libssl.so
ln -s /opt/openssl3/lib64/libssl.so /usr/lib64/libssl.so
ln -s /opt/openssl3/lib64/libssl.so /usr/lib/libssl.so

rm -rf /usr/lib64/libssl.so.3
rm -rf /usr/lib/libssl.so.3
ln -s /opt/openssl3/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /opt/openssl3/lib64/libssl.so.3 /usr/lib/libssl.so.3

rm -rf /usr/lib64/libcrypto.so
rm -rf /usr/lib/libcrypto.so
ln -s /opt/openssl3/lib64/libcrypto.so /usr/lib64/libcrypto.so
ln -s /opt/openssl3/lib64/libcrypto.so /usr/lib/libcrypto.so

ln -s /opt/openssl3/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3

# 根据需要引入库
export LD_LIBRARY_PATH=/opt/openssl3/lib64:$LD_LIBRARY_PATH

ldconfig -v | grep ssl
openssl version -a
openssl ciphers -v

4、编译 openssh
yum install zlib* pam*
cd /usr/local/src/
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.1p1.tar.gz
tar zvxf openssh-9.1p1.tar.gz && cd openssh-9.1p1/
./configure --with-zlib --with-md5-passwords --with-pam --without-openssl-header-check
make && make install
ssh -V
OpenSSH_9.1p1, OpenSSL 3.0.1 14 Dec 2021


四、安装nginx

1、安装pcre2
dnf install pcre2*

========================================================================

编译安装pcre2
cd /usr/local/src
wget https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.41/pcre2-10.41.tar.gz
tar zvxf pcre2-10.41.tar.gz && cd pcre2-10.41
./configure && make && make install

========================================================================
pcre2-config --version

2、创建用户及用户组
groupadd www
useradd -g www www -s /sbin/nologin -M
mkdir -p /data/www/web
chmod +w /data/www/web
chown -R www:www /data/www/web

3、编译nginx
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar zvxf nginx-1.22.1.tar.gz && cd nginx-1.22.1

vim src/core/nginx.h
#define nginx_version 1000000
#define NGINX_VERSION "1.0.0"
#define NGINX_VER   "IIS"

./configure --prefix=/opt/nginx \
--user=www \
--group=www \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-ld-opt="-ljemalloc" \
--with-http_v2_module \
--with-pcre \
--with-zlib=/usr/local/src/zlib-1.2.13 \
--with-openssl

make && make install

4、配置nginx
vim /opt/nginx/conf/nginx.conf
user www www;
worker_processes auto;
error_log logs/error.log crit;
pid logs/nginx.pid;

events {
use epoll;
worker_connections 1024;
}

http {
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;

include mime.types;
default_type application/octet-stream;

sendfile on;
keepalive_timeout 65;

include /opt/nginx/conf/vhosts/*.conf;
}

mkdir -p /opt/nginx/conf/vhosts
vim /opt/nginx/conf/vhosts/web.conf

server {
listen 80;
server_name localhost;
set $root /data/www/web;
root $root;

location / {
index index.html index.htm;
}
}

5、编写首页
vim /data/www/web/index.html
<html>
<head><title>nginx index.html</title></head>
<body>
<h1>index.html</h1>
</body>
</html>

6、nginx 启用服务
vim /etc/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf -t
ExecStart=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

systemctl enable nginx.service
systemctl list-unit-files|grep enabled|grep nginx
systemctl start nginx.service

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload && firewall-cmd --list-ports

查看nginx版本
/opt/nginx/sbin/nginx -V
ps -ef|grep nginx
lsof -n | grep jemalloc


五、安装 dotnet core6
-------------------------------------------------
删除 dotnet-sdk-6.0
dnf remove dotnet-sdk-6.0
rm -rf /usr/share/dotnet
rm -rf /usr/bin/dotnet
rm -rf /etc/yum.repos.d/microsoft-prod.repo
dnf clean all
dnf upgrade
shutdown -r now
dnf install dotnet-sdk-6.0
-------------------------------------------------

1、安装 dotnet-sdk-6.0
dnf install dotnet-sdk-6.0
dotnet --info

2、网站文件 (假设有一个 asp.net core mvc项目 netcore6)
mkdir -p /data/www/netcore6
试运行。(复制编译好的代码到 /data/www/netcore6)
dotnet netcore6.dll

3、修改nginx、以支持core6网站
vim /opt/nginx/conf/vhosts/web.conf

server {
listen 80;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Cookie $http_cookie;
}
}

systemctl restart nginx
systemctl status nginx

4、安装 python3-setuptools
yum install python-setuptools unzip -y

5、安装 Supervisor (低于 3.3.3 会有安全漏洞)
cd /usr/local/src
wget https://files.pythonhosted.org/packages/b3/41/2806c3c66b3e4a847843821bc0db447a58b7a9b0c39a49b354f287569130/supervisor-4.2.4.tar.gz
tar zvxf supervisor-4.2.0.tar.gz && cd supervisor-4.2.0
python setup.py install
find / -name supervisor

配置Supervisor
mkdir -p /etc/supervisor/conf.d
echo_supervisord_conf > /etc/supervisor/supervisord.conf

vim /etc/supervisor/supervisord.conf

查找
;[include]
;files = relative/directory/*.ini

修改为
[include]
files=conf.d/*.conf

查找 [unix_http_server] 下账号和密码设置,设置密码 (使用 supervisorctl 强制输入密码,增强安全性)
username=supervisor_user
password=supervisor_userpwd

:wq 保存退出

6、配置 Core6 项目开机自动启动
vim /etc/supervisor/conf.d/netcore6.conf
输入以下内容

[program:netcore6]
command=dotnet netcore6.dll --urls="http://[*]:5000"; 运行的命令
directory=/data/www/netcore6/ ; 命令执行目录
autorestart=true ; 自动重启
stderr_logfile=/var/log/netcore6.err.log ; 错误日志
stdout_logfile=/var/log/netcore6.out.log ; 输出日志
environment=ASPNETCORE_ENVIRONMENT=Production ; 环境变量
user=www ; 进程执行的用户身份
stopsignal=INT

:wq 保存退出

7、Supervisor 启用服务
vim /etc/systemd/system/supervisord.service

[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=supervisord -c /etc/supervisor/supervisord.conf
ExecStop=supervisorctl shutdown
ExecReload=supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

:wq 保存退出

systemctl enable supervisord && systemctl restart supervisord && systemctl status supervisord

查看supervisor运行状态
supervisorctl status

8、安装libgdiplus组件,支持 core 图片生成
dnf install automake autoconf libtool glib2-devel cairo-devel libjpeg* libtiff*

cd /usr/local/src
wget https://github.com/mono/libgdiplus/archive/6.0.5.tar.gz
tar zvxf libgdiplus-6.0.5.tar.gz && cd libgdiplus-6.0.5
./autogen.sh && make && make install
ln -s /usr/local/lib/libgdiplus.so /usr/lib64/gdiplus.dll 

ln -s /usr/local/lib/libgdiplus.so /usr/libgdiplus.so

9、安装字体
dnf install mkfontscale fontconfig -y

//假设把windows下font目录的相应字体上传到服务器 /usr/local/src/TrueType
mkdir -p /usr/share/fonts/chinese
cd /usr/share/fonts/chinese
cp /usr/local/src/TrueType/* ./
mkfontscale && mkfontdir && fc-cache -fv
fc-list | grep times.ttf
fc-list :lang=zh

shutdown -r now


六、安装redis

1、安装依赖包
dnf install tcl -y

2、编译安装redis
cd /usr/local/src
wget http://download.redis.io/releases/redis-stable.tar.gz
tar zvxf redis-stable.tar.gz && cd redis-stable/
make && make PREFIX=/opt/redis install

3、创建用户及用户组
groupadd redis
useradd -g redis redis -s /sbin/nologin -M
mkdir -p /opt/redis/logs
cp redis.conf /opt/redis
ll /opt/redis
chown -R redis:redis /opt/redis

4、配置 redis
vim /opt/redis/redis.conf
找到相关的行,修改

#bind 127.0.0.1
protected-mode no
requirepass redispwd
daemonize no
supervised no
pidfile /opt/redis/redis_6379.pid
logfile /opt/redis/redis_6379.log
dir /opt/redis

5、redis 启用服务
vim /usr/lib/systemd/system/redis.service

[Unit]
Description=Redis Server
After=network.target

[Service]
Type=simple
PIDFile=/opt/redis/redis_6379.pid
ExecStart=/opt/redis/bin/redis-server /opt/redis/redis.conf
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=on-failure
User=redis

[Install]
WantedBy=multi-user.target

systemctl enable redis && systemctl daemon-reload && systemctl start redis

6、打开使用端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload && firewall-cmd --list-ports

**************************************************************************************************
指定IP可以访问
[root@centos ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.25" port protocol="tcp" port="6379" accept"

显示所有规则
[root@centos ~]# firewall-cmd --reload && firewall-cmd --list-all

移除指定IP可以访问
[root@centos ~]# firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.25" port protocol="tcp" port="6379" accept"

**************************************************************************************************

7、查看当前版本
/opt/redis/bin/redis-server -v
/opt/redis/bin/redis-cli -v

8、安装完成后,打开客户端
[root@centos ~]# /opt/redis/bin/redis-cli -h 127.0.0.1 -p 6379

输入以下命令,测试写入及读取
127.0.0.1:6379 > auth redispwd
127.0.0.1:6379 > set name abc123
127.0.0.1:6379 > get name
退出
127.0.0.1:6379 >quit


七、安装 mariadb 数据库

===================================================================

dnf 安装方式:
dnf install mariadb-server
systemctl enable mariadb && systemctl restart mariadb && systemctl status mariadb
mysql_secure_installation

mkdir /data/mysql
chown -R mysql:mysql /data/mysql
cp -a /var/lib/mysql /data/mysql

vim /etc/my.cnf.d/mariadb-server.cnf

[mysqld]
datadir=/data/mysql/mysql
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
ssl
max_connections=1000

保存

systemctl restart mariadb && systemctl status mariadb

===================================================================

编译安装 mariadb

1、创建用户及用户组
groupadd mysql
useradd -g mysql mysql -s /sbin/nologin -M
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql

2、安装依赖包
dnf install cmake pcre2* bison* ncurses*
3、编译安装
cd /usr/local/src
wget https://mirrors.aliyun.com/mariadb//mariadb-10.9.4/source/mariadb-10.9.4.tar.gz
tar zxvf mariadb-10.9.4.tar.gz && cd mariadb-10.9.4
cmake . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" \
-DCMAKE_INSTALL_PREFIX=/opt/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_USER=mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DINSTALL_DOCDIR=share/doc/mariadb \
-DINSTALL_DOCREADMEDIR=share/doc/mariadb \
-DINSTALL_MANDIR=share/man \
-DINSTALL_MYSQLSHAREDIR=share/mysql \
-DINSTALL_MYSQLTESTDIR=share/mysql/test \
-DINSTALL_PLUGINDIR=lib/mysql/plugin \
-DINSTALL_SBINDIR=sbin \
-DINSTALL_SCRIPTDIR=bin \
-DINSTALL_SQLBENCHDIR=share/mysql/bench \
-DINSTALL_SUPPORTFILESDIR=share/mysql \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DWITH_EXTRA_CHARSETS=complex \
-DWITH_EMBEDDED_SERVER=ON \
-DWITH_SAFEMALLOC=OFF \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITHOUT_TOKUDB=1 \

make -j 16 && make install

4、创建相关软连接
ln -s /opt/mysql/lib/lib* /usr/lib/
ln -s /opt/mysql/bin/mysql /bin
ln -s /opt/mysql/bin/mysqldump /bin
ln -s /opt/mysql/bin/mysqlbinlog /bin
find / -name mysql

mkdir /auth_pam_tool_dir
touch /auth_pam_tool_dir/auth_pam_tool
chown -R mysql:mysql /auth_pam_tool_dir
chmod -R 0770 /auth_pam_tool_dir
touch /var/log/mariadb.log
chown mysql:mysql /var/log/mariadb.log

5、配置mariadb
vim /etc/my.cnf

[client]
port = 3306
default-character-set = utf8mb4
socket = /tmp/mysql.sock

[mysqld]
port = 3306
datadir = /data/mysql
max_connections=1000
character-set-server = utf8mb4
socket = /tmp/mysql.sock
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M

skip-external-locking

log-bin=mysql-bin
binlog_format=mixed
server-id = 1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout 

6、初始数据库
cd /opt/mysql/
./bin/mysql_install_db --basedir=/opt/mysql --datadir=/data/mysql --user=mysql --defaults-file=/etc/my.cnf
./bin/mysqld_safe --datadir=/data/mysql
./bin/mysql_secure_installation

7、mariadb 启用服务
vim /etc/systemd/system/mysqld.service

[Unit]
Description=MySQL Community Server
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target
Alias=mysql.service

[Service]
User=mysql
Group=mysql
LimitNOFILE=65535
LimitNPROC=65535

# Execute pre and post scripts as root
PermissionsStartOnly=true

# Needed to create system tables etc.

# Start main service
ExecStart=/opt/mysql/bin/mysqld_safe

# Don't signal startup success before a ping works

# Give up if ping don't get an answer
TimeoutSec=30

Restart=always
PrivateTmp=false

8、重启用户,查看进程、打开端口
systemctl enable mysqld
systemctl restart mysqld && systemctl status mysqld

ps -ef|grep mysqld
lsof -n | grep jemalloc

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload && firewall-cmd --list-ports

9、客户端口登录(默认不验证密码)
mysql -u root -p

MariaDB [(none)]> status;
MariaDB [(none)]> show engines;
MariaDB [(none)]> show variables like '%ssl%';

10、增加授权用户(必须验证密码才能登录)
增加远程访问用户,
root是用户名,%是主机名或IP地址,这里的%代表任意主机或IP地址,也可指定唯一的IP地址
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

解决本地账号,没需密码就可以登录问题
仅保留mysql.global_priv表(旧版mysql.user )下的 mariadb.sys@localhost 和 root@% 这两个用户对应的记录,其它记录删除

MariaDB [(none)]> select user,host from mysql.global_priv;
MariaDB [(none)]> select user,host from mysql.user;
MariaDB [(none)]> DROP USER root@'localhost';
MariaDB [(none)]> DROP USER mysql@'localhost';
MariaDB [(none)]> select user,host from mysql.proxies_priv;

MariaDB [(none)]> exit;

11、清除日志
cat /dev/null > ~/.mysql_history

===================================================================

配置MariaDB慢查询
touch /data/mysql/slow_query_log.log
chown mysql:mysql /data/mysql/slow_query_log.log

在[mysqld]标签下添加如下内容
slow_query_log=on
slow_query_log_file=/data/mysql/slow_query_log.log
long_query_time=2

配置MariaDB禁用dns解析

skip-name-resolve

===================================================================

 

八、Mariadb更多设置 (设置客户端必须使用证书连接Mariadb)

1、创建保存证书目录

mkdir /data/ca -p
cd /data/ca
===================================================================
ca-cert.pem: CA 证书, 用于生成服务器端/客户端的数字证书.
ca-key.pem: CA 私钥, 用于生成服务器端/客户端的数字证书.
server-key.pem: 服务器端的 RSA 私钥
server-req.pem: 服务器端的证书请求文件, 用于生成服务器端的数字证书.
server-cert.pem: 服务器端的数字证书.
client-key.pem: 客户端的 RSA 私钥
client-req.pem: 客户端的证书请求文件, 用于生成客户端的数字证书.
client-cert.pem: 客户端的数字证书.
===================================================================

2、生成CA证书
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem

查看证书 (主要是Issuer和Subject部分的内容)
openssl x509 -in ca-cert.pem -noout -text
Issuer: C = aa, ST = a, L = a, O = a, OU = a, CN = a
Subject: C = aa, ST = a, L = a, O = a, OU = a, CN = a

3、生成服务器端密钥,并用第一步生成的CA签发服务器证书
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

查看证书 (主要是Issuer和Subject部分的内容)
openssl x509 -in server-cert.pem -noout -text
Issuer: C = aa, ST = a, L = a, O = a, OU = a, CN = a
Subject: C = bb, ST = b, L = b, O = b, OU = b, CN = b

验证证书
openssl verify -CAfile ca-cert.pem server-cert.pem

4、让mariadb 支持 SSL
授权证书权限
chown mysql:mysql /data/ca -R

5、在配置文件的[mysqld]之后添加:
vim /etc/my.cnf

ssl
ssl-ca=/data/ca/ca-cert.pem
ssl-cert=/data/ca/server-cert.pem
ssl-key=/data/ca/server-key.pem
ssl_cipher= DHE-RSA-AES256-SHA

6、重启服务后连接Mariadb
systemctl restart mysqld

7、登录并查看是否支持 SSL
mysql -u root -p
MariaDB [(none)]> show variables like '%ssl%';
+---------------------+---------------------------+
| Variable_name | Value |
+---------------------+---------------------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /data/ca/ca-cert.pem |
| ssl_capath | |
| ssl_cert | /data/ca/server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | /data/ca/server-key.pem |
| version_ssl_library | OpenSSL 3.0.1 14 Dec 2021 |
+---------------------+---------------------------+

8、生成客户端密钥并使用第一步的CA签发客户端证书:
注意:生成证书时,确保服务器证书和客户端证书的Common Name一致

openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

查看证书 (主要是Issuer和Subject部分的内容)
openssl x509 -in client-cert.pem -noout -text
Issuer: C = aa, ST = a, L = a, O = a, OU = a, CN = a
Subject: C = bb, ST = b, L = b, O = b, OU = b, CN = c

验证证书
openssl verify -CAfile ca-cert.pem client-cert.pem

9、设置服务器,指定账号必须使用SSL连接
添加一个强制SSL链接的Mariadb(MySql)用户示例:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'ss'@'%' IDENTIFIED BY '112233' require ssl;
MariaDB [(none)]> FLUSH PRIVILEGES;


10、客户端指定使用证书链接Mariadb
mysql -u ss -p --ssl-ca=/data/ca/ca-cert.pem --ssl-cert=/data/ca/client-cert.pem --ssl-key=/data/ca/client-key.pem --ssl-cipher=AES128-SHA

11、客户端查看是否使用SSL
MariaDB [(none)]> status;
--------------
mysql Ver 15.1 Distrib 10.9.4-MariaDB, for Linux (x86_64) using readline 5.1
Connection id: 7
Current database:
Current user: ss@localhost
SSL: Cipher in use is TLS_AES_256_GCM_SHA384
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 10.9.4-MariaDB-log Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /tmp/mysql.sock
Uptime: 18 min 43 sec

九、Mariadb更多设置 (数据备份与恢复)

1、导出当前数据库的所有db,到一个文件中
mysqldump -u root -p --all-databases > /data/AllMysql.dump

2、导入数据
mysql -uroot -p < /data/AllMysql.dump
mysql -u root -p
> source /data/AllMysql.dump

===================================================================

1、--all-databases , -A
含义:导出全部数据库。
mysqldump -uroot -p --all-databases

2、--all-tablespaces , -Y
含义:导出全部表空间。
mysqldump -uroot -p --all-databases --all-tablespaces

3、--no-tablespaces , -y
含义:不导出任何表空间信息。
mysqldump -uroot -p --all-databases --no-tablespaces

4、--add-drop-database
含义:每个数据库创建之前添加drop数据库语句。
mysqldump -uroot -p --all-databases --add-drop-database

5、--add-drop-table
含义:每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)
mysqldump -uroot -p --all-databases (默认添加drop语句)
mysqldump -uroot -p --all-databases –skip-add-drop-table (取消drop语句)

6、--add-locks
含义:在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)
mysqldump -uroot -p --all-databases (默认添加LOCK语句)
mysqldump -uroot -p --all-databases –skip-add-locks (取消LOCK语句)

7、--create-options, -a
含义:在CREATE TABLE语句中包括所有MySQL特性选项。(默认为打开状态)
mysqldump -uroot -p --all-databases

8、--databases, -B
含义:导出几个数据库。参数后面所有名字参量都被看作数据库名。
mysqldump -uroot -p --databases test mysql

9、--default-character-set
含义:设置默认字符集,默认值为utf8
mysqldump -uroot -p --all-databases --default-character-set=utf8

10、--events, -E
含义:导出事件。
mysqldump -uroot -p --all-databases --events

11、--flush-logs -F
含义:开始导出之前刷新日志。请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。
除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。
因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。
mysqldump -uroot -p --all-databases --flush-logs

12、--flush-privileges
含义:在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。
mysqldump -uroot -p --all-databases --flush-privileges

13、--help
含义:显示帮助信息并退出。
mysqldump --help

14、--host, -h
含义:需要导出的主机信息
mysqldump -uroot -p --host=localhost --all-databases

15、--ignore-table
含义:不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……
mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user

16、--lock-all-tables, -x
含义:提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。
mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables

17、--no-create-db, -n
含义:只导出数据,而不添加CREATE DATABASE 语句。
mysqldump -uroot -p --host=localhost --all-databases --no-create-db

18、--no-create-info, -t
含义:只导出数据,而不添加CREATE TABLE 语句。
mysqldump -uroot -p --host=localhost --all-databases --no-create-info

19、--no-data, -d
含义:不导出任何数据,只导出数据库表结构。
mysqldump -uroot -p --host=localhost --all-databases --no-data

20、--password, -p
含义:连接数据库密码

21、--port, -P
含义:连接数据库端口号

22、--routines, -R
含义:导出存储过程以及自定义函数。
mysqldump -uroot -p --host=localhost --all-databases --routines

23、--tables
含义:覆盖--databases (-B)参数,指定需要导出的表名,在后面的版本会使用table取代tables。
mysqldump -uroot -p --host=localhost --databases test --tables test

24、--triggers
含义:导出触发器。该选项默认启用,用--skip-triggers禁用它。
mysqldump -uroot -p --host=localhost --all-databases --triggers

25、--user, -u
含义:指定连接的用户名。

26、--version, -V
含义:输出mysqldump版本信息并退出

27、--where, -w
含义:只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。
mysqldump -uroot -p --host=localhost --all-databases --where=” user=’root’”

28、--xml, -X
含义:导出XML格式.
mysqldump -uroot -p --host=localhost --all-databases --xml

===================================================================