MySQL 8.0 也出了有一段时间了,最新版 MySQL 8.0.23 在 2021-01-18 发布,来尝尝鲜!
系统: CentOS7 或 Ubuntu 20 (Ubuntu 只需将 yum 替换成 apt-get 即可)
数据库版本: MySQL 8.0.23
1. 安装必要依赖
yum install gcc gcc-c++ gcc-g77 make autoconf automake ncurses ncurses-devel openssl openssl-devel bison cmake cmake3 -y
!!!注意: MySQL 8.0.x 对 GCC 依赖的版本需要 5.3+,因此安装好依赖后请使用gcc --version检查一下!

若 gcc 版本低于 5.3+,可通过下述将 gcc升级到 8.0.x 版本
# 1. 安装scl源
yum install centos-release-scl scl-utils-build -y
# 2. 确认scl可用源(有对应信息即可)
yum list all --enablerepo='centos-sclo-rh' | grep "devtoolset-"
# 3. 升级 gcc
yum install devtoolset-8-toolchain -y
# 4. 将 `gcc 8.0.x` 设为默认开启版本
echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile
2. 创建对应 mysql 用户&&用户组[可选]
# 1. 创建 `mysql` 用户组
groupadd mysql
# 2. 创建 `mysql` 用户:隶属mysql组,禁止 `shell` 登录
useradd -r -g mysql -s /bin/false mysql
3.下载源码并初始化数据库
注意:
MySql 8.0.23 版本的源码包格式变为了 tar.xz,不再是 tar.gz!
下载源码前,确认自己的 glibc 版本
如果你下载的版本跟本文不一致,需自行修改下述命令中含有的版本信息


3.1 下载并解压源码包
# 下载
cd /tmp && wget -c https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.23-linux-glibc2.17-x86_64-minimal.tar.xz
# 解压
tar xvf mysql-8.0.23-linux-glibc2.17-x86_64-minimal.tar.xz
3.2 创建 mysql 的 basedir 、 data 、 logs 目录
mkdir -p /apps/mysql # basedir 目录:放置 mysql 安装信息
mkdir -p /apps/mysql/conf/my.cnf.d # basedir 目录:放置 mysql 配置信息
mkdir -p /data/mysql # data 目录:放置 mysql 磁盘存储信息
mkdir -p /data/logs/mysql # logs 目录:放置 mysql_error.log、mysql_slow.log、mysql_binlog 等日志信息
3.3 为上述目录赋权
chown -R mysql:mysql /apps/mysql /data/mysql /data/logs/mysql
chmod 0750 -R /apps/mysql /data/mysql /data/logs/mysql
4.初始化数据信息:会生成 root@localhost 的密码,注意记录!
注意: MySQL 8.0.X 版本的初始化已经弃用了 mysql_install_db 脚本,而是通过 mysqld --initialize 或 mysqld --initialize-insecure 的方式进行初始化安装!
mv /tmp/mysql-8.0.23-linux-glibc2.17-x86_64-minimal/* /apps/mysql/
# 初始化数据库(如下图,初始密码:DtNquE8Yn-kX)
/apps/mysql/bin/mysqld --initialize --user=mysql --basedir=/apps/mysql --datadir=/data/mysql
# 为 mysql 生成 `SSL/RSA` 证书信息
/apps/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql/
5. 启动服务并设置开启自动启动服务
5.1 编辑 /etc/my.cnf 配置文件
[client]
port=3306 # 指定端口
socket=/data/mysql/mysql.sock # 指定 mysql 客户端的 sock 文件路径
[mysqld]
basedir=/apps/mysql # 指定 mysql 的安装路径
datadir=/data/mysql # 指定mysql 的 data 路径
socket=/data/mysql/mysql.sock # 指定 mysqld 生成的 sock 文件路径
[mysqld_safe]
log-error=/data/logs/mysql/error.log # 指定 mysql 的错误日志
pid-file=/data/mysql/mysqld.pid # 指定 mysql.pid 文件路径
#
# 自定义包含用户 mysql 配置文件夹
#
!includedir /apps/mysql/conf/my.cnf.d
注意: [client] 下的 socket 配置和 [mysqld] 下的 socket 配置,两者一定要一样!否则,可能在 mysqld 服务启动后, mysql 一直连接不上并报错: ERROR 2020 (HY000) : Can’t connect to local MySQL Server through socket ‘/tmp/mysql.socket’ (111)

XX mysql836自定义安装参考
[root@ecs-73434081 mysql836]#
[root@ecs-73434081 mysql836]# pwd
/usr/zcService/soft/mysql836
[root@ecs-73434081 mysql836]# ll -h
total 457M
drwxr-x--- 2 mysql mysql 4.0K Dec 13 2023 bin
drwxr-x--- 3 mysql mysql 4.0K May 31 17:44 conf
drwxr-x--- 9 mysql mysql 4.0K Jun 26 15:20 data
drwxr-x--- 2 mysql mysql 4.0K Dec 13 2023 docs
drwxr-x--- 3 mysql mysql 4.0K Dec 13 2023 include
drwxr-x--- 6 mysql mysql 4.0K Dec 13 2023 lib
-rwxr-x--- 1 mysql mysql 273K Dec 13 2023 LICENSE
drwxr-x--- 2 mysql mysql 4.0K May 31 18:00 logs
drwxr-x--- 4 mysql mysql 4.0K Dec 13 2023 man
-rwxr-x--- 1 mysql mysql 439M Dec 13 2023 mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
-rwxr-x--- 1 mysql mysql 18M Dec 13 2023 mysql-router-8.0.36-linux-glibc2.28-x86_64.tar.xz
-rwxr-x--- 1 mysql mysql 666 Dec 13 2023 README
drwxr-x--- 28 mysql mysql 4.0K Dec 13 2023 share
drwxr-x--- 2 mysql mysql 4.0K May 31 18:30 support-files
[root@ecs-73434081 mysql836]#
[root@ecs-73434081 etc]# cat my.cnf
[client] #客户端设置,即客户端默认的连接参数
# 设置mysql客户端连接服务端时默认使用的端口
port=6612
socket=/usr/zcService/soft/mysql836/data/mysql.sock # 指定 mysql 客户端的 sock 文件路径
#默认编码
default-character-set = utf8mb4
[mysql] #客户端设置
#MySQL 提示符配置
#用户名@主机名+mysql版本号+数据库名
prompt=\\u@\\h \\v [\\d]>\\_
# 设置mysql客户端默认字符集
default-character-set = utf8mb4
[mysqld] #服务端基本设置
# 默认连接端口
port=6612
# MySQL安装根目录的路径
basedir=/usr/zcService/soft/mysql836
# MySQL服务器数据目录的路径
datadir=/usr/zcService/soft/mysql836/data
socket=/usr/zcService/soft/mysql836/data/mysql.sock # 指定 mysql 客户端的 sock 文件路径
#sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
#服务端默认编码
character_set_server = utf8mb4
#在创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 配置时区
default-time_zone='+8:00'
#mysql会先把表名转为小写,再执行操作 忽略大小写
lower_case_table_names = 1
sql_mode= 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
[mysqld_safe]
log-error=/usr/zcService/soft/mysql836/logs/error.log # 指定 mysql 的错误日志
pid-file=/usr/zcService/soft/mysql836/data/mysqld.pid # 指定 mysql.pid 文件路径
#
# 自定义包含用户 mysql 配置文件夹
#
!includedir /usr/zcService/soft/mysql836/conf/my.cnf.d
5.2创建对应的 log 文件
MySQL 竟然不会自动创建配置文件中的 log 文件,这个操作真是非常奇怪
# 创建文件
touch /data/logs/mysql/error.log /data/mysql/mysqld.pid
# 赋权
chown mysql:mysql /data/logs/mysql/error.log
5.3 使用 mysqld_safe 启动服务
/apps/mysql/bin/mysqld_safe --user=mysql &
问题:mysqld 与 mysqld_safe 的区别?
在看MySQL 8.0官方安装介绍文档的时候,看到文档中启动 mysqld 的服务是通过 mysqld_safe 来启动的,
当时觉得很奇怪: mysqld 与 mysqld_safe 的有什么区别呢?查了一下资料后,
总结就是: mysqld_safe 脚本会在启动 MySQL 服务器后继续监控其运行情况,并在 mysqld 死机时重新启动它,而 mysqld 则不会监控自动重启,
因此:直接运行 mysqld 启动 MySQL 服务的方法很少见,更加推荐 mysqld_safe 的方式来启动服务!
mysqld_safe通常做如下事情:
检查系统和选项。
检查 MyISAM 表。
保持 MySQL 服务器窗口。
启动并监视 mysqld,如果因错误终止则重启。
将 mysqld 的错误消息发送到 error.log 文件。
将 mysqld_safe 的屏幕输出发送到数据目录中的 host_name.safe 文件
6. 登录服务并设置允许远程连接
6.1通过 mysql 客户端连接登录,输入初始密码后,若成功及表示安装已经初步成功!
/apps/mysql/bin/mysql -u root -p
6.2 修改 root@localhost 的初始化密码且 root 密码永不过期
ALTER USER 'root'@'localhost' IDENTIFIED BY 'testmysql8' PASSWORD EXPIRE NEVER;
必须先修改初始密码,后续才能执行指令,否则会报错:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

6.3 设置允许用户远程登录
初步安装成功后,默认所有的用户都是只允许从 localhost 连到本机 MySQL 服务上的,非本机连接服务会报错:Host is not allowed to connect to this MySQL server"
方式一:直接修改 root 用户的 host 信息
# 更改 `root` 用户 `host` 为不限制
update mysql.user set host = '%' where user = 'root';
# 刷新当前mysql链接服务权限
flush privileges;
方式二:(推荐)新增一个不限制 host 连接的 root 用户(MySQL用户管理)
# 创建不受限制的用户 `root`@'%'
CREATE USER 'root'@'%' IDENTIFIED BY 'root';
# 授予用户所有权限
GRANT ALL ON *.* TO 'root'@'%';
# 刷新当前mysql链接服务权限
flush privileges;
7. 设置 mysql 系统变量及设置服务开机启动
# 设置 `mysql` 系统变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
# 重新加载当前进程 peofile
source /etc/profile
# 将 `mysql.server` 复制到系统初始化服务目录:即将其设置为系统服务,后续就可以通过 `service mysql start/stop/restart` 管理服务
cp /apps/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql
# 赋予其可执行权限
chmod +x /etc/rc.d/init.d/mysql
# vim /etc/rc.d/init.d/mysql,设置 mysql basedir 和 mysql datadir
basedir=/usr/local/mysql
datadir=/data/mysql
# 设置开机启动
chkconfig mysql on
XX mysql836自定义安装参考
[root@ecs-73434081 init.d]# pwd
/etc/rc.d/init.d
[root@ecs-73434081 init.d]# vim mysql

3066



被折叠的 条评论
为什么被折叠?



