基础环境准备

  1. #系统版本
  2. CentOS 7
  3. #查看系统 glibc支持的版本
  4. strings /lib64/libc.so.6 |grep ^GLIBC
  5. #添加mysql用户
  6. id mysql
  7. useradd -s /sbin/nologin -M mysql
  8. #下载wget下载工具
  9. yum -y install wget
  10. #卸载自带的MariaDB 5.5
  11. rpm -qa | grep mariadb
  12. yum -y remove mariadb-libs

1、下载安装包

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz
# 校验MD5值与下载页对比
md5sum mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz
tar -xf mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz

2、安装MySQL软件

#创建目录结构,授权
mkdir -p /data/app
mkdir -p /data/3306/data
mkdir -p /data/3306/logs
mv /root/mysql-8.0.24-linux-glibc2.12-x86_64 /data/app/mysql8024
chown -R mysql.mysql /data
ll -d /data

#添加环境变量
vim /etc/profile
export PATH=/data/app/mysql8024/bin:$PATH

#刷新环境变量配置并检验
source /etc/profile
mysql -V

#显示此信息代表MySQL软件安装完成
mysql  Ver 8.0.24 for Linux on x86_64 (MySQL Community Server - GPL)

3、初始化数据目录

初始化目的: 创建系统库

mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql8024 --datadir=/data/3306/data

#正确输出信息
2021-06-07T08:10:50.890757Z 0 [System] [MY-013169] [Server] /data/app/mysql8024/bin/mysqld (mysqld 8.0.24) initializing of server in progress as process 2032
2021-06-07T08:10:50.973628Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-06-07T08:10:58.028541Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-06-07T08:11:01.089878Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

可能遇到的报错

#数据目录存在文件
[ERROR] [MY-013236] [Server] The designated data directory /data/3306/data/ is unusable. You can remove all files that the server added to it.
解决办法:
清空数据目录,再重新初始化

初始化参数说明

--initialize-insecure: 初始化核心参数
--user=mysql: 指定mysql运行用户
--basedir=/usr/local/mysql: 指定数据库软件位置
--datadir=/data/3306/data: 指定数据存储位置

多版本初始化区别

5.7 和 8.0 版本一样,使用 $/bin/mysqld 程序进行初始化 
5.7 版本之前不一样,使用 $/scripts/mysql_install_db 脚本进行初始化

#MySQL 5.7 & 8.0 初始化方式
$/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql8024 --datadir=/data/3306/data

#MySQL 5.6 及以下版本初始化方式
$/scripts/mysql_install_db  --user=mysql  --basedir=/data/app/mysql5638  --datadir=/data/3306/data

初始化参数区别

--initialize
会生成一个12位,4种密码复杂度临时管理员密码,第一次登陆需要修改

--initialize-insecure
管理员密码为空

4、编写配置文件

cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/data/app/mysql8024
datadir=/data/3306/data
port=3306
socket=/tmp/mysql.sock
server_id=6
log_bin=/data/3306/logs/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
default_authentication_plugin=mysql_native_password

[client]
socket=/tmp/mysql.sock
EOF

5、准备启动脚本

cp -a /data/app/mysql8024/support-files/mysql.server /etc/init.d/mysqld
/etc/init.d/mysqld start
/etc/init.d/mysqld stop

6、使用systemd管理mysql

cat > /etc/systemd/system/mysql.service  <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/data/app/mysql8024/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF

#启动和开机自启mysql
systemctl enable mysql
systemctl start mysql
systemctl status mysql
systemctl list-unit-files | grep mysql

7、设置用户密码

#输入mysql命令,进入到mysql命令提示符
mysql

#设置root管理员用户密码(只能本机登录)
alter user 'root'@'localhost' identified by '123';

#创建admin用户,所有库,所有表,远程访问权限
create user 'admin'@'%' identified with mysql_native_password by '123';
grant all on *.* to 'admin'@'%';

#刷新权限表
flush privileges;

#查看用户列表
select host,user,plugin from mysql.user;

#退出
exit

#测试连接
#本地访问
mysql -uroot -p123
#远程访问
mysql -uadmin -p123 -h 192.168.10.14 -P 3306

MySQL 8.0 用户密码新特性

#MySQL 8.0 采用了新的加密插件:caching_sha2_password
部分场景下需要替换为 MySQL.8.0 以前的密码插件:mysql_native_password
例如:主从、MHA、客户端软件

#配置方法:
1. 创建用户时指定密码插件为: native
create user 'admin'@'%' identified with mysql_native_password by '123';

2. 配置文件配置默认密码插件为native
[mysqld]
default_authentication_plugin=mysql_native_password