二进制包安装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密码