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