centos 手动安装mysql8

下载

官网太慢了,在清华镜像站下载: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 ,几分钟的事,砖头扔过来。

上一篇:start.spring.io 访问不了怎么办?


下一篇:佛山机场安装RFID行李跟踪系统 可全流程追踪行李