最近几天配置了一台阿里云服务器,系统是CentOS 8.2,数据库是MySQL8.0.21,踩了几个坑,在这里详细记录一下所有的操作
文章部分引用自:https://www.cnblogs.com/kasnti/p/11929030.html
CentOS系统版本与MySQL版本
最开始我是按照以往的安装MySQL的路子走的。
官网下载MySQL
CentOS是Red Hat下的,所以在选择MySQL版本下载的时候选择带Red Hat
的Red Hat Enterprise Linux / Oracle Linux
因为系统是CentOS 8,内核是x86内核,所以OS Version选择
选择RPM Bundle
下载
因为我这里不在CentOS上做开发,只是部署服务器,所以只选择RPM Package, MySQL Server
下载完成后通过XFTP上传到服务器。
卸载mariadb
防止冲突rpm -qa | grep mariadb
查看是否有mariadb
接着rpm -ev 包名
卸载掉所有的mariadb
具体截图什么的网上的教程基本上都有
通过yum或者rpm安装
因为yum和rpm没有mysql的包,所以需要下载。(现在说这个是不是有点晚)
启动,然后报错,找不到表,一脸懵逼。
网上找了一下,Linux下MySQL的表名是区分大小写的,WTF?
Linux系统下MySQL表名区分大小写
查看当前是否区分大小写,linux别看了,默认区分
show variables like 'lower%'
真的挺操蛋的,网上的解决方法是
lower_case_table_names =1
但是这个办法只能在你数据库没初始化之前修改,真惊喜。试过了各种网上的删文件,全都不管用,卸载重装吧。
正确且方便的配置方法
如果你已经装了MySQL
,先卸载重装
卸载MySQL
停止mysql服务
systemctl stop mysqld
查找npm下安装的所有mysql的相关文件
rpm -qa|grep mysql
使用yum卸载所有的mysql包
yum remove mysql mysql-server mysql-libs mysql-server
查看是否有没卸载的
rpm -qa|grep mysql
如果没有了,再执行下面命令查找残余目录
find -name mysql
删除残余目录,xxx是查找出来的
rm -rf xxx
再次执行,找一下有没有自己遗漏的
find -name mysql
到此MySQL卸载完成
MySQL安装
下载安装
CentOS支持dnf命令,具体自行百度
dnf install @mysql
emm,安装完成。
配置不区分大小写
先不要启动。
跳转目录/etc/my.cnf.d
,这个大部分教程都是让找my.cnf
,打开后发现里边有一条!includedir /etc/my.cnf.d
。
在/etc/my.cnf.d
下的mysql-server.cnf
下有[mysqld]
。
在最下边加上
lower_case_table_names=1
保存。
启动
Linux 服务管理两种方式service
和systemctl
systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
systemd对应的进程管理命令是systemctl
systemctl
兼容service
以下可以去看CentOS 8 安装MySQL 8.0
启动并设置开机启动
systemctl enable --now mysqld
运行mysql_secure_installation脚本,该脚本执行一些与安全性相关的操作并设置MySQL根密码
mysql_secure_installation
会让你配置一些东西
按自己需要的配置就好了
步骤如下:
-
要求你配置VALIDATE PASSWORD component(验证密码组件): 输入y ,回车进入该配置
-
选择密码验证策略等级, 我这里选择0 (low),回车
-
输入新密码两次
-
确认是否继续使用提供的密码?输入y ,回车
-
移除匿名用户? 输入y ,回车
-
不允许root远程登陆? 我这里需要远程登陆,所以输入n ,回车
-
移除test数据库? 输入y ,回车
-
重新载入权限表? 输入y ,回车
配置远程登陆
如果需要设置root账户远程登陆,上一步骤中,不允许root远程登陆?这一步需要设为n。
接下来本机登录MySQL,将root用户的host字段设为’%’,意为接受root所有IP地址的登录请求:
本机登录MySQL:
mysql -uroot -p<上面步骤中设置的密码>
回车后即可登录,接下来终端变成了mysql>
开头:
接着继续执行mysql语句,将将root用户的host
字段设为'%'
:
use mysql;
update user set host='%' where user='root';
flush privileges;
设置完成后输入exit退出mysql,回到终端shell界面,接着开启系统防火墙的3306端口:
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload