服务器要求
建议服务器配置:4核 + 8G内存 + 5M带宽 + 100G硬盘。
TIP
为了系统运行流畅,官方建议配置尽量高一些。为了节省成本2核/4GB也是可以的;
生产环境服务器系统官方主推荐 CentOS Stream
、Rocky Linux
两款服务器;鉴于生产环境服务器部署的专业性,官方建议由专业的运维工程师安装部署软件运行所需的一切环境,包括但不限于 秘钥登录
、防火墙
、软件生态
、软件版本
、环境部署
等。
TIP
CentOS(Community Enterprise Operating System)是基于Red Hat Enterprise Linux(RHEL)源代码构建的免费企业级Linux发行版。由于其稳定性和安全性,CentOS长期以来一直是服务器和桌面环境的首选。然而,值得注意的是,CentOS项目已于2020年底宣布其生命周期的结束,并鼓励用户迁移到CentOS Stream或Rocky Linux等替代版本。
官方以 CentOS Stream
服务器为例,出了一份软件安装部署详细教程,包括 JDK
、Maven
、Node
、Nginx
、Redis
、MySQL
等一系列软件软件 Linux
系统安装部署方法。特地提供给有兴趣的伙伴学习使用,此处教程仅供参考使用;
JDK软件安装
- 文件下载
直接 wget
下载的版本解压时会遇到 gzip
等解压失败的问题,具体原因是下载之前需要同意Oracle的安装协议,不然不能下载,但是用 wget
的方式,默认是不同意,虽然能下载下来,但是下载下来的文件会有问题,所以在Linux上解压一直失败,直接去官网下载好,然后传到服务器上,再解压就没有问题了;
# tar -xvf jdk-8u271-linux-x64.tar.gz
- 文件解压
将解压后的目录命名为 java
并移动到 /usr/local/
目录,命令如下:
# mv jdk1.8.0_271/ /usr/local/java
- 添加环境变量
# 编辑文件
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
- 添加软连接
# ln -s /usr/local/java/bin/java /usr/bin/java
- 查看版本号
[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软件安装
- 文件下载
# wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
- 文件解压
解压文件到 /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
- 添加环境变量
# 编辑文件
vim /etc/profile
# maven
MAVEN_HOME=/usr/local/maven
export PATH=${MAVEN_HOME}/bin:${PATH}
# 刷新环境变量
source /etc/profile
# 查看安装版本
mvn -v
Node软件安装
- 文件下载
# wget https://nodejs.org/dist/v12.16.2/node-v12.16.2-linux-x64.tar.xz
- 文件解压
# 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
- 添加环境变量
# 编辑文件
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
- 添加软连接
ln -s /usr/local/node/bin/node /usr/local/bin/node
ln -s /usr/local/node/bin/npm /usr/local/bin/npm
- 查看版本号
[root@S1 ~]# node -v
v12.16.2
Nginx软件安装
- 依赖安装
# yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel libxml2 libxml2-devel
- 创建用户
# groupadd www
# useradd -g www www
- 文件下载
# wget http://nginx.org/download/nginx-1.18.0.tar.gz
- 文件解压
# tar -xvf nginx-1.18.0.tar.gz
# cd nginx-1.18.0
- 编译安装
# 编译
./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
- 编写脚本
每次启动服务都要找到 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
- 文件配置
#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软件安装
- 依赖安装
# yum -y install gcc gcc-c++ kernel-devel
- 文件下载
# wget http://download.redis.io/releases/redis-6.0.9.tar.gz
- 文件解压
# tar -xzf redis-6.0.9.tar.gz
# cd redis-6.0.9
- 编译安装
# 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
- 文件配置
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
- 添加环境变量
# 编辑文件
vim /etc/profile
# Redis
export PATH="$PATH:/usr/local/redis/bin"
# 刷新环境变量
source /etc/profile
- 启动脚本
- 编写脚本
#!/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
- 启动服务
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源码安装
- 依赖安装
# yum install cmake ncurses ncurses-devel bison bison-devel libtirpc-devel libarchive
- 安装
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
- 创建用户
按照标准需要给 mysql
创建所属用户和用户组
- 创建群组
# groupadd mysql
- 创建一个用户,不允许登陆和不创主目录
# useradd -s /sbin/nologin -g mysql -M mysql
- 检查创建用户
# tail -1 /etc/passwd
- 添加目录
# 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
- 编译安装
- 下载文件
# 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
- 查看版本号
[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二进制安装
- 文件下载
去 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
选择版本入下图所示:
- 软件安装
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)
- 文件配置
编辑配置文件 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
- 启动服务
- 初次启动
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;