前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >centos 手动安装mysql8

centos 手动安装mysql8

作者头像
pollyduan
发布2019-11-04 15:01:35
1.5K0
发布2019-11-04 15:01:35
举报
文章被收录于专栏:云架构修炼手册

下载

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

二进制版

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

下载二进制版发行包

代码语言:javascript
复制
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/mysql-8.0.11-el7-x86_64.tar.gz

创建用户

代码语言:javascript
复制
useradd mysql

初始化

目录:

代码语言:javascript
复制
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

数据库:

代码语言:javascript
复制
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 跟初始化时是否一样。

代码语言:javascript
复制
[mysqld]
datadir=/var/lib/mysql

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

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

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

代码语言:javascript
复制
mysql -uroot -p --socket=/var/lib/mysql/mysql.sock

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

配置服务

代码语言:javascript
复制
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 跟初始化时是否一样。

初始化数据表及权限

代码语言:javascript
复制
mysql_secure_installation

编译安装

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

什么是必要?

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

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

安装依赖

代码语言:javascript
复制
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

下载源码包

代码语言:javascript
复制
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/mysql-8.0.11.tar.gz

编译

代码语言:javascript
复制
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

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

创建用户

代码语言:javascript
复制
useradd mysql

初始化

目录:

代码语言:javascript
复制
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

数据库:

代码语言:javascript
复制
mysqld --initialize --user=mysql

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

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

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

代码语言:javascript
复制
[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

重新初始化即可。

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

代码语言:javascript
复制
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 让它自适应:

代码语言:javascript
复制
-DDEFAULT_CHARSET=utf8mb4 \

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

代码语言:javascript
复制
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \

配置服务

代码语言:javascript
复制
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

初始化数据表及权限

代码语言:javascript
复制
mysql_secure_installation

编译失败了怎么办?

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

清理现场:

代码语言:javascript
复制
make clean
rm -f CMakeCache.txt

重新来过。

权限问题

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

代码语言:javascript
复制
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启动:

代码语言:javascript
复制
docker run -de MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 --name mysql mysql:8.0.11

测试:

代码语言:javascript
复制
docker exec -ti mysql mysql -uroot -p

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 下载
  • 二进制版
    • 下载二进制版发行包
      • 创建用户
        • 初始化
          • 检查配置
            • 配置服务
              • 初始化数据表及权限
              • 编译安装
                • 安装依赖
                  • 下载源码包
                    • 编译
                      • 创建用户
                        • 初始化
                          • 在这里我遇到了一个问题:
                            • 配置服务
                              • 初始化数据表及权限
                                • 编译失败了怎么办?
                                • 权限问题
                                • 彩蛋
                                相关产品与服务
                                云数据库 SQL Server
                                腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档