二进制包安装MySQL8数据库

配置主机名

# 配置主机名
hostnamectl set-hostname mysql1

配置host文件

echo "192.168.0.5 mysql1" >> /etc/hosts
cat /etc/hosts

卸载主机自带的mysql软件包

# 查看旧版的mysql包
rpm -qa|grep -i mysql

# 查看mariadb包
rpm -qa|grep -i mariadb

# 卸载mariadb相关包
## -e 卸载软件包
## -v 显示过程详情
## -h 安装软件包时列出标记
## --nodeps 不检查依赖
rpm -evh mariadb-libs-5.5.68-1.el7.x86_64 --nodeps

下载解压mysql软件包

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

选择glibc2.12,才有完整版

#!/usr/bin/env bash

# mysql版本
mysql_version=8.0.32

# 下载和解压mysql压缩包
download_and_unzip_mysql() {
    # 进入解压包所在目录
    cd /usr/local/src || exit 1
    # 下载mysql压缩包
    wget -cP /usr/local/src https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-$mysql_version-linux-glibc2.12-x86_64.tar
    # 创建需要的目录
    mkdir -p /var/lib/mysql /usr/local/mysql/log /usr/local/mysql/data
    # 第一次解压
    tar -xvf mysql-$mysql_version-linux-glibc2.12-x86_64.tar && rm -rf mysql-$mysql_version-linux-glibc2.12-x86_64.tar
    # 第二次解压
    tar xvf mysql-$mysql_version-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
    # 为创建mysql目录软连接--用来兼容多版本
    ## -s 软连接
    ## -f 如果存在就覆盖符号连接
    ln -sf /usr/local/mysql-$mysql_version-linux-glibc2.12-x86_64 /usr/local/mysql

    # 创建必须的软连接--如果软连接不存在则创建
    ls /usr/lib64/libtinfo.so.5 || ls /usr/lib64/libtinfo.so.6.1 && ln -sf /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5
}

# 创建mysql用户和组,赋予目录权限
create_mysql_user_group() {
    # 创建mysql组
    groupadd mysql
    # 创建mysql用户
    useradd -r -g mysql -s /bin/false mysql
    # 修改mysql目录属主和属组
    chown -R mysql:mysql /usr/local/mysql
    chown -R mysql:mysql /var/lib/mysql
    chown -R mysql:mysql /usr/local/mysql/log
}

# 下载解压
download_and_unzip_mysql

配置$PATH

# 配置PATH
vim ~/.bashrc

# PATH路径
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
export PATH


my.cnf配置

# 服务端配置
[mysqld]
# mysql服务绑定的本机哪个IP地址
# bind-address=0.0.0.0

# 禁用 DNS 查询结果缓存,这对于高负载的 MySQL 服务器来说是很重要的,因为它可以减少 DNS 延迟和负载。
## skip-host-cache已在mysql8中弃用
# skip-host-cache
host_cache_size=0
# 禁用主机名解析,这也可以提高 MySQL 服务器的性能,因为当客户端连接到服务器时,会先进行主机名解析,而禁用它可以加速连接进程。
# 只能用IP地址检查客户端的登录,不用主机名
skip-name-resolve

# 指定mysql安装目录
basedir=/usr/local/mysql

# 数据库文件存储目录。
datadir=/var/lib/mysql

# MySQL 进程监听的 Unix 套接字文件路径。
socket=/var/run/mysqld/mysqld.sock

# 指定默认时区
default-time-zone='+8:00'
# 执行SQL语句时所应该遵守的规则
## STRICT_TRANS_TABLES:当插入数据时,如果出现字段类型不匹配、值超出范围等情况,将产生严格的警告或错误。
## NO_ZERO_IN_DATE:防止在日期或日期时间字段中使用0作为数值的填充。
## NO_ZERO_DATE:防止在日期或日期时间字段中插入'0000-00-00'的空白日期格式。
## ERROR_FOR_DIVISION_BY_ZERO:禁用除数为零的操作,并将其视为错误。
## NO_ENGINE_SUBSTITUTION:如果需要连接的存储引擎不存在或不可用,则不自动替换为其他存储引擎。
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

# 事务隔离级别设为读已提交
## mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
transaction_isolation=READ-COMMITTED

# 最大连接数
max_connections=400

# 最大错误连接数
max_connect_errors=1000

# TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
explicit_defaults_for_timestamp=true
# SQL数据包发送的大小,如果有BLOB(二进制大对象)建议修改成1G
## BLOB用来存图像、音频和视频等文件
; max_allowed_packet=1G

# 指定安全文件目录,只有在该目录下的文件才可被导入/导出。
secure-file-priv=/var/lib/mysql-files

# 指定运行 MySQL 进程的用户身份。
user=mysql

# MySql8不用配置
# 防止 MySQL 软链接攻击。
symbolic-links=0

# 指定MySQL服务进程ID文件的路径
pid-file=/var/run/mysqld/mysqld.pid

# 服务端指定字符集
character-set-server=utf8mb4
# 服务端使用的字符序
# https://www.cnblogs.com/chyingp/p/mysql-character-set-collation.html
collation-server=utf8mb4_uncode_cli

# 创建新表时使用的默认存储引擎
## https://www.runoob.com/w3cnote/mysql-different-nnodb-myisam.html
default-storage-engine=INNODB

# 指定InnoDB缓冲池大小,单位为字节
innodb_buffer_pool_size=200M
# 指定单个MySQL包的最大大小,单位为字节
max_allowed_packet=16M

# 指定是否启用严格模式下的时间戳
explicit_defaults_for_timestamp=1

# 指定日志输出方式,可以为FILE、TABLE等。
log-output=FILE
# 指定是否启用常规查询日志。
general_log=0
# 指定常规查询日志文件的路径
general_log_file=/var/log/general.err

# 指定是否启用慢查询日志:ON开启
show_query_log=ON
# 指定慢查询日志文件的路径
show_query_log_file=/var/log/query.err
# 指定慢查询的最小时间
long_query_time=10

# 错误日志路径
log-error=/var/log/mysqld.log

# 使用旧版mysql5的密码认证插件,支持简单密码
default-authentication-plugin=mysql_nativa_password

# 初始化连接时的字符集
#init_connect='SET NAMES utf8mb4'

# 指定客户端握手字符集
character-set-client-handshake=FALSE

# 指定是否启用符号链接,建议禁用符号链接以防止各种安全风险
symbolic-links=0

# 对其他远程连接的mysql客户端的配置
[mysql]
# 远程连接的客户端指定字符集
default-character-set=utf8mb4

# 对localhost的mysql客户端的配置
[client]
# 客户端连接 MySQL 的套接字文件路径。
socket=/var/run/mysqld/mysqld.sock
# 指定MySQL客户端使用的字符集
default-character-set=utf8mb4
# 导入其他配置文件。
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

MySQL数据库初始化

# MySQL数据库初始化
## --initialize 初始化MySQL服务器的数据目录。
### 它会创建必要的系统表来管理数据库,并设置初始授权表。
## --user=mysql 指定mysql用户运行
### 不指定--user,将以当前用户执行,数据文件会有属主权限问题
## --console:将日志信息输出到控制台。
mysqld --initalize --user=mysql

# 查看默认密码
grep 'temporary password' /var/log/mysqld.log

手动开启和关机mysqld

# 启动mysqld
## mysqld_safe会在启动mysqld之前检查配置文件,并根据需要重新启动该服务,以确保它在遇到故障时可以恢复。
mysqld_safe -defaults-file=/etc/my.cnf


# 关闭MySQL服务器
## mysqladmin:该命令用于对 MySQL 服务器执行管理操作。
## -uroot:此选项指定将用于连接到 MySQL 服务器的用户名。 在这种情况下,用户名是 "root"。
## -p:此选项告诉 MySQL 提示输入密码。 您需要输入正确的密码才能继续。
## shutdown:这是告诉 MySQL 执行关闭服务器的命令。
## -S 使用给定的socket文件 (/var/lib/mysql/mysql.sock)来连接服务器

mysqladmin -uroot -p shutdown -S /var/lib/mysql/mysql.sock

创建服务文件

[Unit]
Description=MySQL server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
# 这个选项指定服务应该在哪个目标之后启动。这里指定服务需要在网络在线之后才能启动。
After=network-online.target 
# 这个选项指定服务所需的其他单元。这里指定了服务需要在网络在线之后启动。
Wants=network-online.target 
# 这个选项指定了服务应该在哪个目标之后启动。这里指定服务需要在syslog目标之后启动。
After=syslog.target 

[Service]
# 指定服务类型为“notify”,即当服务准备好接收请求时,它会通过向Systemd发送通知来告知其准备就绪。
Type=notify
# 指定服务运行时的用户身份
User=mysql
# 指定服务运行时的组
Group=mysql
# 这个选项禁用了Systemd对mysqld服务进行操作的超时逻辑。
TimeoutSec=0 
# 这个选项指定只有在启动服务时才应该以root身份运行任何脚本。
PermissionsStartOnly=true 
# 这个选项定义了服务启动前应该执行的脚本。
ExecStartPre=/usr/bin/mysqld_pre_systemd 
# 服务启动的命令
## $MYSQLD_OPTS是一个环境变量,可以在服务配置文件中设置。
# ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS
# 这个选项指定了服务需要读取的环境变量文件
## 如果找不到该文件,则忽略此选项。
EnvironmentFile=-/etc/sysconfig/mysql
# 设置服务进程可以打开的最大文件数
LimitNOFILE=65535
# 设置服务进程可以打开的最大连接数
LimitNPROC=65535
# 当服务异常退出时,Systemd应该如何重启服务。
Restart=on-failure
# 指定哪些退出状态码时,Systemd不重新启动服务。
RestartPreventExitStatus=1
# 这个选项设置MYSQLD_PARENT_PID环境变量,并将其值设置为1。这个变量对于服务重启很重要。
Environment=MYSQLD_PARENT_PID=1
# 指定是否为服务创建私有临时文件系统。这里指定为false,表示在共享的tmp目录中创建服务的临时文件。
PrivateTmp=false

[Install]
# 这个选项定义了服务应该安装到哪个目标中,以使其成为多用户模式的一部分。
WantedBy=multi-user.target

设置mysql开机自启

# 重载服务
systemctl daemon-reload

# 设置mysql服务开机自启
systemctl enable --now mysqld

# 查看服务
systemctl status mysqld

修改初始化密码

 -- 以初始化密码登录mysql
mysql -uroot -p

-- 进入mysql库
use mysql;

-- 修改密码
-- IDENTIFIED BY 关键字用于指定用户的密码
-- IDENTIFIED WITH 指定密码插件
-- mysql_native_password 使用旧版密码认证,支持简单密码
alter user 'root'@'localhost' identfiled with mysql_native_password by '新密码';

-- 应用配置--将内存中的配置写入磁盘
flush privileges;

配置远程登录

-- 进入mysql库
use msyql;

-- 查看mysql中root用户的权限
select host,user from user where user='root';

在这里插入图片描述

-- 为用户设置远程登录密码
create user 'root'@'%' identified with mysql_native_password by '新密码';

-- 为远程用户授予所有权限
grant all privileges on *.* to 'root'@'%' with grant option;

-- 应用配置--将内存中的配置写入磁盘
flush privileges;

远程登录测试

在这里插入图片描述

# 远程登录测试
mysql -uroot -h 192.167.0.5 -p密码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值