Centos7安装mysql8.0排坑指南

编程

最近在centos上尝试安装mysql 8.0  坑是真特喵的多,满满的都是泪阿。

本文很大一部分参考了CentOS 7 安装并配置 MySQL 5.6

并根据mysql 8.0的实际情况做了修改和增补,增加了一些对错误的解决。

一. 添加MySQL Yum存储库

将MySQL Yum存储库添加到系统的存储库列表中。这是一次性操作,可以通过安装MySQL提供的RPM来执行。跟着下面步骤:

1.到MySQL官网下载MySQL Yum存储库(https://dev.mysql.com/downloads/repo/yum/)

2.选择并找到适合于centos7的mysql8.0链接(类似https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm),通过wget下载到服务。

3. 进入到 rpm 包所在的目录,使用以下命令安装下载的发行包,比如下载rpm包为mysql80-community-release-el7-3.noarch.rpm

sudo yum localinstall mysql80-community-release-el7-3.noarch.rpm

二. 安装MySQL

通过以下命令安装MySQL:

sudo yum install mysql-community-server

 这将安装MySQL server(mysql-community-server)的包以及运行服务器所需组件的包,包括client(mysql-community-client)的包,客户端和服务器的常见错误消息和字符集(mysql-community-common)以及共享客户端库(mysql-community-libs) 。

三. 启动和配置MySQL数据库

systemctl start mysqld

我的服务器内存过小,在这一步报错了:

Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

通过

cat /var/log/mysqld.log

查看mysql错误日志,发现提示:

2020-07-21T10:54:45.791918Z 0 [ERROR] [MY-012681] [InnoDB] mmap(137363456 bytes) failed; errno 12
2020-07-21T10:54:45.792098Z 1 [ERROR] [MY-012956] [InnoDB] Cannot allocate memory for the buffer p

又通过free -me查看内存,发现内存不足,于是升级了服务器。

之后又报错:

Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

再次查看错误日志,发现提示:

2020-07-21T13:22:34.442246Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2020-07-21T13:22:34.442279Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.

特喵的什么鬼,检查配置文件(vi /etc/my.cn),将里面datadir=/var/lib/mysql改为:

datadir=/var/lib/mysql/data

又新建了/var/lib/mysql/data目录,启动mysql,这回终于可以了,真的是一步一坑!

systemctl start mysqld

这回成功了。

 

不过这坑还没完呢!!!mysql8改动太多了!

 

四、登录连接MySQL

mysql -u root -p

刚装完,密码为空,提示密码时直接回车即可,如果提示下面的

ERROR 1045 (28000): Access denied for user "root"@"localhost" (using password: NO)

使用 --skip-grant-tables 参数。

进到mysql提示符。首先修改root用户密码,方式如下,和之前版本的mysql不同:

alter user "root"@"localhost" identified by "password";

注意password的格式,mysql8要求至少8位,至少一位数字,至少一位字母,还有一个特殊字符,否则就报错。这又是一个坑。

使用

flush privileges;

让密码生效。

下一步是让root用户不在本地也可以登录(方便使用mysql客户端连接3306端口管理mysql),mysql8之中下面类似这条命令已经无效:

grant all privileges on test.* to root@"%" identified "123456";

提示:

RROR 1064(4200): you have an error in you SQL syntax; **near "identified "123456"" at line 1

mysql8规定,分配权限不能带密码。于是使用下面这条命令:

grant all privileges on test.* to root@"%"

又特喵的报错:

You are not allowed to create a user with GRANT;

产生用户不能授权的原因是mysql 数据库中user 表中的特定用户(root) 的host 的属性值为localhost.

解决方法:

# 使用mysql 数据库

mysql > use mysql;

# 特定用户的host 修改

mysql > update user set host="%" where user="root";

# 指定用户的授权

mysql > grant all privileges on test.* to root@"%"

至此,坑基本都绕过去了。

通过客户端使用用户名和密码连接服务器的3360端口(还得看看centos的iptable以及服务器安全组设置,是否开放了3306端口),可以正常连接,ok,mysql安装配置成功!

 

以上是 Centos7安装mysql8.0排坑指南 的全部内容, 来源链接: utcz.com/z/518571.html

回到顶部