Skip to content

服务器要求

建议服务器配置:4核 + 8G内存 + 5M带宽 + 100G硬盘。

TIP

为了系统运行流畅,官方建议配置尽量高一些。为了节省成本2核/4GB也是可以的;

生产环境服务器系统官方主推荐 CentOS StreamRocky Linux 两款服务器;鉴于生产环境服务器部署的专业性,官方建议由专业的运维工程师安装部署软件运行所需的一切环境,包括但不限于 秘钥登录防火墙软件生态软件版本环境部署 等。

TIP

CentOS(Community Enterprise Operating System)是基于Red Hat Enterprise Linux(RHEL)源代码构建的免费企业级Linux发行版。由于其稳定性和安全性,CentOS长期以来一直是服务器和桌面环境的首选。然而,值得注意的是,CentOS项目已于2020年底宣布其生命周期的结束,并鼓励用户迁移到CentOS Stream或Rocky Linux等替代版本。

官方以 CentOS Stream 服务器为例,出了一份软件安装部署详细教程,包括 JDKMavenNodeNginxRedisMySQL 等一系列软件软件 Linux 系统安装部署方法。特地提供给有兴趣的伙伴学习使用,此处教程仅供参考使用;

JDK软件安装

  1. 文件下载

直接 wget 下载的版本解压时会遇到 gzip 等解压失败的问题,具体原因是下载之前需要同意Oracle的安装协议,不然不能下载,但是用 wget 的方式,默认是不同意,虽然能下载下来,但是下载下来的文件会有问题,所以在Linux上解压一直失败,直接去官网下载好,然后传到服务器上,再解压就没有问题了;

# tar -xvf jdk-8u271-linux-x64.tar.gz
  1. 文件解压

将解压后的目录命名为 java 并移动到 /usr/local/ 目录,命令如下:

# mv jdk1.8.0_271/ /usr/local/java
  1. 添加环境变量
# 编辑文件
vim /etc/profile

# JAVA
JAVA_HOME=/usr/local/java
JRE_HOME=/usr/local/java/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

# 刷新环境变量
source /etc/profile
  1. 添加软连接
# ln -s /usr/local/java/bin/java /usr/bin/java
  1. 查看版本号
[root@S1 java]# java --version
java 17.0.10 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)

Maven软件安装

  1. 文件下载
# wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
  1. 文件解压

解压文件到 /usr/local/maven 目录,命令如下:

# 创建目录
mkdir /usr/local/maven
# 文件解压
# tar zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/maven/

# 或者
# tar zxvf apache-maven-3.6.3-bin.tar.gz
# mv apache-maven-3.6.3 /usr/local/maven
  1. 添加环境变量
# 编辑文件
vim /etc/profile

# maven
MAVEN_HOME=/usr/local/maven
export PATH=${MAVEN_HOME}/bin:${PATH}
 
# 刷新环境变量
source /etc/profile
 
# 查看安装版本
mvn -v

Node软件安装

  1. 文件下载
# wget https://nodejs.org/dist/v12.16.2/node-v12.16.2-linux-x64.tar.xz
  1. 文件解压
# xz -d node-v12.16.2-linux-x64.tar.xz
# tar -xf node-v12.16.2-linux-x64.tar
# mv /usr/local/src/node-v12.16.2-linux-x64 /usr/local/node
  1. 添加环境变量
# 编辑文件
vim /etc/profile

# Node
export NODE_HOME=/usr/local/node
export PATH=$PATH:$NODE_HOME/bin 
export NODE_PATH=$NODE_HOME/lib/node_modules

# 刷新环境变量
source /etc/profile
  1. 添加软连接
ln -s /usr/local/node/bin/node /usr/local/bin/node
ln -s /usr/local/node/bin/npm /usr/local/bin/npm
  1. 查看版本号
[root@S1 ~]# node -v
v12.16.2

Nginx软件安装

  1. 依赖安装
# yum -y install gcc gcc-c++  zlib zlib-devel openssl openssl-devel pcre pcre-devel libxml2 libxml2-devel
  1. 创建用户
# groupadd www
# useradd -g www www
  1. 文件下载
# wget http://nginx.org/download/nginx-1.18.0.tar.gz
  1. 文件解压
# tar -xvf nginx-1.18.0.tar.gz
# cd nginx-1.18.0
  1. 编译安装
# 编译
./configure --user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--without-http-cache \
--with-http_ssl_module \
--with-http_gzip_static_module

# 安装
# make && make install
  1. 编写脚本

每次启动服务都要找到 nginx 的启动目录,这样无疑很麻烦,以下编写脚本使得任何路径下都可以执行 nginx 的启动、停止、重启的脚本;

  • 编写脚本
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
config:      /usr/local/nginx/conf/nginx.conf
pidfile:     /usr/local/nginx/logs/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
 
lockfile=/var/lock/subsys/nginx
 
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
 
restart() {
    configtest || return $?
    stop
    start
}
 
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
  • 设置权限
# chmod +x /etc/init.d/nginx
  • 开机启动
# chkconfig nginx on
  • 使用说明
# service nginx start 
# service nginx stop 
# service nginx restart 
# service nginx reload 
# /etc/init.d/nginx start 
# /etc/init.d/nginx stop 
# /etc/init.d/nginx restart 
# /etc/init.d/nginx reload

特别说明:

如果无法启动可以使用指定nginx.conf配置文件启动,命令如下:

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

设置软连接:ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

  1. 文件配置
#user  nobody;
user  www www;
worker_processes  4;

error_log  /data/logs/nginx/error.log;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
pid     /usr/local/nginx/logs/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    client_max_body_size 100M;
    server_names_hash_max_size  512;
    server_names_hash_bucket_size  96;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

        #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   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  /usr/local/nginx/html$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;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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

	# 项目配置文件统一放vhosts目录,此目录需要自行创建
    include vhosts/*.conf;
}

Redis软件安装

  1. 依赖安装
# yum -y install gcc gcc-c++ kernel-devel
  1. 文件下载
# wget http://download.redis.io/releases/redis-6.0.9.tar.gz
  1. 文件解压
# tar -xzf redis-6.0.9.tar.gz
# cd redis-6.0.9
  1. 编译安装
# make // 编译
# make install PREFIX=/usr/local/redis // 安装至指定位置
# mkdir /usr/local/redis/etc/
# cp redis.conf /usr/local/redis/etc/
# cd /usr/local/redis/bin/
# cp redis-benchmark redis-cli redis-server /usr/bin/

编译安装时,如果出现以下错误:

make时报错 make[1]: *** [server.o] Error 1…make: *** [install] Error 2

因为 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
# echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
# gcc -v // 查看版本号

再次 make 编译时就正常了;

温馨提示

编译通过之后控制台会提示 Hint: It's a good idea to run 'make test' ,可以执行 make test 以验证是否成功;

make test 时如遇以下错误则需安装高版本的 tcl 软件支持:

[root@S1 redis-6.0.9]# make test
cd src && make test
make[1]: Entering directory `/usr/local/src/redis-6.0.9/src'
You need tcl 8.5 or newer in order to run the Redis test
make[1]: *** [test] Error 1
make[1]: Leaving directory `/usr/local/src/redis-6.0.9/src'
make: *** [test] Error 2

安装依赖 tcl8.5 或更高版本以支持 Redis 的正常编译安装,安装步骤如下:

# wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz  
# tar xzvf tcl8.6.1-src.tar.gz  -C /usr/local/  
# cd  /usr/local/tcl8.6.1/unix/  
# ./configure  
# make  
# make install
  1. 文件配置
vim /usr/local/redis/etc/redis.conf

# 修改一下配置
# redis以守护进程的方式运行
# no表示不以守护进程的方式运行(会占用一个终端)  
daemonize yes

# 客户端闲置多长时间后断开连接,默认为0关闭此功能                                      
timeout 300

# 设置redis日志级别,默认级别:notice                    
loglevel verbose

# 设置日志文件的输出方式,如果以守护进程的方式运行redis 默认:"" 
# 并且日志输出设置为stdout,那么日志信息就输出到/dev/null里面去了 
logfile stdout
# 设置密码授权
requirepass <设置密码>
# 监听ip
bind 127.0.0.1
  1. 添加环境变量
# 编辑文件
vim /etc/profile

# Redis
export PATH="$PATH:/usr/local/redis/bin"

# 刷新环境变量
source /etc/profile
  1. 启动脚本
  • 编写脚本
#!/bin/bash
#chkconfig: 2345 80 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
REDIS_CLI=/usr/local/redis/bin/redis-cli
   
PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis/etc/redis.conf"
   
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ] 
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $REDIS_CLI -p $REDISPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac
  • 设置开机启动
# 复制脚本文件到init.d目录下
cp redis /etc/init.d/

# 给脚本增加运行权限
chmod +x /etc/init.d/redis

# 查看服务列表
chkconfig --list

# 添加服务
chkconfig --add redis

# 配置启动级别
chkconfig --level 2345 redis on
  1. 启动服务
systemctl start redis   #或者 /etc/init.d/redis start  
systemctl stop redis   #或者 /etc/init.d/redis stop

# 查看redis进程
ps -el|grep redis

# 端口查看
netstat -an|grep 6379

MySQL源码安装

  1. 依赖安装
# yum install cmake ncurses ncurses-devel bison bison-devel libtirpc-devel libarchive
  1. 安装 boost 依赖
# wget https://jaist.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
# tar -xvf boost_1_59_0.tar.gz
# mv boost_1_59_0 /usr/local/boost
  1. 创建用户

按照标准需要给 mysql 创建所属用户和用户组

  • 创建群组
# groupadd mysql
  • 创建一个用户,不允许登陆和不创主目录
# useradd -s /sbin/nologin -g mysql -M mysql
  • 检查创建用户
# tail -1 /etc/passwd
  1. 添加目录
# mkdir -p /usr/local/mysql
# mkdir -p /usr/local/mysql/data
# mkdir -p /usr/local/mysql/etc
# mkdir -p /usr/local/mysql/logs
# mkdir -p /var/lib/mysql
  1. 编译安装
  • 下载文件
# wget http://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.35.tar.gz
  • 解压文件
# tar -xvf mysql-5.7.35.tar.gz
# cd mysql-5.7.35
  • 源码编译
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1

1G小内存编译无法通过解决方案:

云主机是1G内存的,编译到45%的时候会报错,因为内存不足
编译 sql.dir 比较消耗内存,正常服务器一般不会配置1G内存,都会够用
处理方法,自己设置虚拟内存,我的云主机是1G的内存,所以我配置2G的虚拟内存
创建一个 2G 的虚拟文件
sudo dd if=/dev/zero of=/swapfile bs=1k count=2048000
创建swap文件
sudo mkswap /swapfile
激活
sudo swapon /swapfile
查看是否配置成功
sudo swapon -s
free -m
如果需要下次开机自动执行,将配置配置到fstab中,此处只是为了编译临时配置,就不添加了

如果配置执行遇到以下报错:

# cmake -version
# cmake: symbol lookup error: cmake: undefined symbol: archive_write_add_filter_zstd

则需安装依赖:

# yum install -y libarchive

如遇以下错误提示:

Package 'libtirpc', required by 'virtual:world', not found

则需安装依赖:

# yum install -y libtirpc-devel

cmake 时遇以下错误提示:

CMake Error at rapid/plugin/group_replication/rpcgen.cmake:100 (MESSAGE)

则需安装依赖软件 rpcsvc-proto-1.4.1.tar.xz , 具体安装方法如下:

# wget https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4.1/rpcsvc-proto-1.4.1.tar.xz
# xz -d rpcsvc-proto-1.4.1.tar.xz
# tar -xvf rpcsvc-proto-1.4.1.tar
# cd rpcsvc-proto-1.4.1
# ./configure
# make
# make install
  • 编译安装
# make -j `grep processor /proc/cpuinfo | wc -l`  #编译很消耗系统资源,小内存可能编译通不过
# make install
  • 开机启动
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chmod +x /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on
  • 创建配置文件
# vim /etc/my.cnf

my.cnf 文件内容,应根据实际情况修改,文件内容如下:

cat > /etc/my.cnf << EOF
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8mb4
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = 1
init-connect = 'SET NAMES utf8mb4'
character-set-server = utf8mb4
#skip-name-resolve
#skip-networking
back_log = 300
max_connections = 1000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 4M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 8M
key_buffer_size = 4M
thread_cache_size = 8
query_cache_type = 1
query_cache_size = 8M
query_cache_limit = 2M
ft_min_word_len = 4
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30
log_error = /usr/local/mysql/logs/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /usr/local/mysql/logs/mysql-slow.log
performance_schema = 0
explicit_defaults_for_timestamp
#lower_case_table_names = 1
skip-external-locking
default_storage_engine = InnoDB
#default-storage-engine = MyISAM
innodb_file_per_table = 1
innodb_open_files = 500
innodb_buffer_pool_size = 64M
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 0
innodb_purge_threads = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 32M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
bulk_insert_buffer_size = 8M
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
interactive_timeout = 28800
wait_timeout = 28800
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
EOF
  • 添加环境变量:
# 编辑文件
vim /etc/profile

# MYSQL
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH

# 刷新环境变量
source /etc/profile
  • 查看版本号
java
[root@S1 ~]# mysql --version
mysql  Ver 14.14 Distrib 5.7.35, for Linux (x86_64) using  EditLine wrapper
  • 修改目录权限:
# cd /usr/local/mysql
# chown -R mysql:mysql /usr/local/mysql
# chown -R mysql:mysql /usr/local/mysql/data
# chown -R mysql:mysql /var/lib/mysql
  • 初始化数据库

初始化数据库,注意保存好 root 用户的密码,如果不想生成随机密码,使用 --initialize-insecure 参数代替 --initialize 参数进行初始化即可。

# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  • 启动服务
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chmod +x /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on
# chkconfig --list mysqld
# service mysqld start
  • 修改密码
# mysql -uroot -p
# ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
  • 设置访问权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '你的密码' WITH GRANT OPTION; 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'c65mini.localdomain' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
  • 开放权限

MySQL设置某一用户只对一个数据库拥有所有权限;

# 进入数据库
use mysql;

# 创建新用户
create user 用户名 identified by '密码';

# 设置权限
grant all on 数据库名.* to 用户名;

# 刷新权限
flush privileges;

创建一个用户,指定一个数据库,表读写权限

1.远程登录mysql
mysql -h ip -u root -p 密码

2.创建用户
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”;

例1:增加一个test1用户,密码为123456,可以在任何主机上登录,并对所有数据库有查询,增加,修改和删除的功能。需要在mysql的root用户下进行
mysql>grant select,insert,update,delete on *.* to test1@”%” identified by “123456″;
mysql>flush privileges;
例2:增加一个test2用户,密码为123456,只能在192.168.2.12上登录,并对数据库student有查询,增加,修改和删除的功能。需要在mysql的root用户下进行
mysql>grant select,insert,update,delete on student.* to test2@192.168.2.12 identified by “123456″;
mysql>flush privileges;
例3:授权用户test3拥有数据库student的所有权限
mysql>grant all privileges on student.* to test3@localhost identified by ’123456′;
mysql>flush privileges;

3.修改用户密码
mysql>update mysql.user set password=password(’123456′) where User=’test1′ and Host=’localhost’;
mysql>flush privileges;

4.删除用户
mysql>delete from user where user=’test2′ and host=’localhost’;
mysql>flush privileges;

5.删除数据库和删除表
mysql>drop database 数据库名;
mysql>drop table 表名;

6.删除账户及权限
drop user 用户名@’%’
drop user 用户名@localhost

grant 详细解析如下:

MySQL 赋予用户权限命令的简单格式可概括为:
grant 权限 on 数据库对象 to 用户
一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。
grant select on testdb.* to common_user@’%’
grant insert on testdb.* to common_user@’%’
grant update on testdb.* to common_user@’%’
grant delete on testdb.* to common_user@’%’
或者,用一条 MySQL 命令来替代:
grant select, insert, update, delete on testdb.* to common_user@’%’

TIP

软件产品本身支持 MySQL5.7 和 MySQL8 数据库存储,官方推荐使用MySQL8数据库;

MySQL二进制安装

  1. 文件下载

去​ ​MySQL 官网地址 下载​所需软件包:

mysql-community-common-8.0.28-1.el8.x86_64.rpm
mysql-community-libs-8.0.28-1.el8.x86_64.rpm
mysql-community-client-plugins-8.0.28-1.el8.x86_64.rpm
mysql-community-client-8.0.28-1.el8.x86_64.rpm
mysql-community-icu-data-files-8.0.28-1.el8.x86_64.rpm
mysql-community-server-8.0.28-1.el8.x86_64.rpm

选择版本入下图所示:

软件安装

  1. 软件安装
rpm -ivh mysql-community-common-8.0.28-1.el8.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.28-1.el8.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.28-1.el8.x86_64.rpm
rpm -ivh mysql-community-client-8.0.28-1.el8.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.28-1.el8.x86_64.rpm
rpm -ivh mysql-community-server-8.0.28-1.el8.x86_64.rpm

安装完成后 可以查看经安装的组件:

[root@S1 ~]$ rpm -qa | grep mysql
mysql-community-server-8.0.28-1.el8.x86_64
mysql-community-libs-8.0.28-1.el8.x86_64
mysql-community-client-8.0.28-1.el8.x86_64
mysql-community-common-8.0.28-1.el8.x86_64
mysql-community-icu-data-files-8.0.28-1.el8.x86_64
mysql-community-client-plugins-8.0.28-1.el8.x86_64
[root@HARD-201 ~]$

?> 切记一定要按照以上顺序安装,因为软件之间存在依赖关系;

查看 MySQL 版本信息,输出如下版本信息表示安装成功:

[root@S1 ~]$ mysql --version
mysql  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
  1. 文件配置

编辑配置文件 vim /etc/my.cnf 根据自己需求配置参数:

[mysqld]
# 数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4

# 数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci

# 设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'

# 是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1

max_allowed_packet = 128M

explicit_defaults_for_timestamp = true
  1. 启动服务
  • 初次启动 mysqld,会自动进行初始化工作
[root@S1 ~]# systemctl start mysqld
[root@S1 ~]$ ps -ef|grep mysqld
mysql     211017       1  0 Jul25 ?        00:01:33 /usr/sbin/mysqld
th        226433  226398  0 10:52 pts/2    00:00:00 grep --color=auto mysqld
  • 初始化后会产生临时密码,查询指令如下
[root@S1 ~]# cat /var/log/mysqld.log | grep password
2022-03-12T07:56:19.676994Z 1 [Note] A temporary password is generated for root@S1: wfh*a?K7f5%l
2022-03-12T07:56:37.331107Z 0 [Note] Shutting down plugin 'validate_password'
2022-03-12T07:56:39.045346Z 0 [Note] Shutting down plugin 'sha256_password'
2022-03-12T07:56:39.045349Z 0 [Note] Shutting down plugin 'mysql_native_password'
2022-03-12T08:01:54.959367Z 0 [Note] Shutting down plugin 'validate_password'
2022-03-12T08:01:55.973374Z 0 [Note] Shutting down plugin 'sha256_password'
2022-03-12T08:01:55.973381Z 0 [Note] Shutting down plugin 'mysql_native_password'
  • 登录 MySQL 服务
# mysql -uroot -p
# 查看端口号
# show global variables like 'port';

修改 MySQL 端口号:

# vi /etc/my.cnf
# 设置端口号3307
[mysqld]
port = 3307

TIP

输入产生的临时密码即可登录。

  • 修改 MySQL 密码

由于MySQL有密码验证组件,若希望设置简单的密码,需要修改服务验证条件,可设置的验证条件如下所示:

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password.check_user_name    | ON    |
| validate_password.dictionary_file    |       |
| validate_password.length             | 8     |
| validate_password.mixed_case_count   | 1     |
| validate_password.number_count       | 1     |
| validate_password.policy             | MEDIUM|
| validate_password.special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

设置验证条件和修改密码入下所示:

# 密码检查等级,0/LOW、1/MEDIUM、2/STRONG
set global validate_password.policy=0;
# 密码的最短长度
set global validate_password.length=6;
# 密码至少要包含的小写字母个数和大写字母个数
set validate_password.mixed_case_count=0;
# 设置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your password';
  • 初始化 MySQL
# mysqld --initialize --user=mysql
  • 修改远程登录权限
USE mysql;
UPDATE mysql.user SET host = '%' WHERE user = 'root';
flush privileges;
SELECT host, user FROM user;

create user 'root'@'%' identified with mysql_native_password by '你的密码';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;

小蚂蚁云团队 · 提供技术支持