centos 手动安装mysql8

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

下载

官网太慢了,在清华镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/

二进制版

二进制版是官方提供的预先编译好的版本

下载二进制版发行包

wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/mysql-8.0.11-el7-x86_64.tar.gz

创建用户

useradd mysql

初始化

目录:

tar xvfz mysql-8.0.11-el7-x86_64.tar.gz
cd mysql-8.0.11-el7-x86_64

ln -s $PWD /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql

export PATH=$PATH:/usr/local/mysql/bin

mkdir -p /var/log/mariadb
chown -R mysql:mysql /var/log/mariadb

mkdir -p /var/run/mariadb
touch /var/log/mariadb/mariadb.log
chown -R mysql:mysql /var/run/mariadb

数据库:

mysqld --initialize --user=mysql
  • 注意这一行日志:
    2018-04-25T08:19:15.332554Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: dCa0tyVgN1&o

检查配置

vi /etc/my.cnf

检查一下 /etc/my.cnf 中配置的 datadir 跟初始化时是否一样。

[mysqld]
datadir=/var/lib/mysql

[client]
socket=/var/lib/mysql/mysql.sock

默认的datadir必须改成init的目录。

默认客户端是 /var/lib/mysql.sock方式,因此只能如下方式登录:

mysql -uroot -p --socket=/var/lib/mysql/mysql.sock

所以必须修改默认的客户端访问时使用自定义的sock,应用才可以访问。

配置服务

cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start

如果报错,检查一下 /etc/my.cnf 中配置的 datadir 跟初始化时是否一样。

初始化数据表及权限

mysql_secure_installation

编译安装

如无必要,不要考虑编译安装方式,因为编译很慢,而且一旦遇到依赖冲突,解决起来非常麻烦。

什么是必要?

  • 需要修改源码。
  • 需要将自己的插件编译进去。
  • 需要新版本,包管理器安装的版本太低。
  • 二进制版本没有新版,这个一般不太可能,官方一般源码和与编译版本一起发布。
  • 某些特别的linux发行版,没有对应的二进制分发包可用。

你想好了?那就开始了。。。。(准备3个小时)

安装依赖

yum install libaio -y
yum install glibc-devel.i686 glibc-devel -y
yum install gcc gcc-c++ cmake boost-devel openssl-devel ncurses-devel -y

下载源码包

wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/mysql-8.0.11.tar.gz

编译

tar xvfz mysql-8.0.11.tar.gz
cd mysql-8.0.11

cmake . \
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/include/boost \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql


# 以下过程非常缓慢
make && make install

后续的步骤和二进制差不多,只是在部分环节出现了一点问题。

创建用户

useradd mysql

初始化

目录:

chown -R mysql:mysql /usr/local/mysql

mkdir -p /var/log/mariadb
chown -R mysql:mysql /var/log/mariadb

export PATH=$PATH:/usr/local/mysql/bin

mkdir -p /var/run/mariadb
touch /var/log/mariadb/mariadb.log
chown -R mysql:mysql /var/run/mariadb

数据库:

mysqld --initialize --user=mysql

在这里我遇到了一个问题:

  • 初始化失败:COLLATION 'utf8mb4_0900_ai_ci' is not valid for CHARACTER SET 'utf8'

这个问题在二进制版没有遇到,经过分析,按照下面官网配置修改配置文件:

[mysqld]
character_set_server=latin1
collation_server=latin1_swedish_ci

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-1.html

重新初始化即可。

经过测试修改为如下也可以:

character-set-server = utf8
collation-server = utf8_general_ci

这样更接近实际情况,不过这个所谓mysql8 新特性的字符集"utf8mb4_0900_ai_ci" 为什么就报错呢?

推测 utf8mb4_0900_ai_ci 对应的字符集不是 utf8,而是 utf8mb4,因此最初使用 -DDEFAULT_CHARSET=utf8 参数编译,与mysql8默认使用 utf8mb4_0900_ai_ci 作为 collation字符集是冲突的。

  • 我最初测试的时候贱兮兮的添加了一个cmake选项:-DDEFAULT_CHARSET=utf8,他正是罪魁祸首。

因此,要么修改默认字符集为 utf8mb4 让它自适应:

-DDEFAULT_CHARSET=utf8mb4 \

要么完整的配置这两个字符集为匹配的关联字符集:

-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \

配置服务

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start

初始化数据表及权限

mysql_secure_installation

编译失败了怎么办?

首先找到原因,或者线索,安装需要的依赖,或者修改需要的环境。

清理现场:

make clean
rm -f CMakeCache.txt

重新来过。

权限问题

mysql 8 的权限管理方式改变了,以前的方式可能不是很好用了。

mysql> create role app_read;
Query OK, 0 rows affected (0.03 sec)

mysql> grant all on *.* to app_read;
Query OK, 0 rows affected (0.07 sec)

mysql> create user root@'%' identified by 'dCa0tyVgN1&o';

彩蛋

如果你只是想看一下mysql8是个什么鬼,可以用docker启动:

docker run -de MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 --name mysql mysql:8.0.11

测试:

docker exec -ti mysql mysql -uroot -p

密码 123456 ,几分钟的事,砖头扔过来。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
安全 Linux 开发者
CentOS 7安装全解析:适合初学者的指导
CentOS 7安装全解析:适合初学者的指导
|
2天前
|
关系型数据库 MySQL 数据库
龙蜥操作系统上安装MySQL:步骤详解与常见问题解决
龙蜥操作系统上安装MySQL:步骤详解与常见问题解决
|
2天前
|
关系型数据库 MySQL Linux
在Centos7中:通过Docker安装MySQL5.7(保姆级)
在Centos7中:通过Docker安装MySQL5.7(保姆级)
|
2天前
|
编解码 安全 关系型数据库
祝福CSDN的小伙伴2024年快乐!Windows7安装MySQL
祝福CSDN的小伙伴2024年快乐!Windows7安装MySQL
|
2天前
|
存储 安全 Linux
Centos停止更新?这篇博客教会你安装平替Centos的操作系统安装Anolis
Centos停止更新?这篇博客教会你安装平替Centos的操作系统安装Anolis
|
2天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
2天前
|
SQL 关系型数据库 MySQL
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
|
4天前
|
安全 关系型数据库 MySQL
CentOS 7系统加固详细方案SSH FTP MYSQL加固
CentOS 7系统加固详细方案SSH FTP MYSQL加固
|
4天前
|
关系型数据库 MySQL Linux
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
|
6月前
|
Linux
解决CentOS yum安装Mysql8提示“公钥尚未安装”或“密钥已安装,但是不适用于此软件包”的问题
解决CentOS yum安装Mysql8提示“公钥尚未安装”或“密钥已安装,但是不适用于此软件包”的问题
1669 0