今天我想试试在自己买的vultr服务器中装一下mysql 8.0,踩了不少坑,特此写下来。
首先看一下我的服务器配置:
- CPU:1 vCore
- RAM:1024 MB
- Storage:25 GB SSD
- OS:CentOS 7 x64
每月花费$5,综合性价算是比较高的,平时没事玩玩,因为站点在国外,科学上网什么的也不是事儿,反正对我来说够了,如果有钱可以选择选择更好的配置,它是按照用多少扣多少,不想使用就把你的实例删了,就不会扣费了。
开始之前,先介绍我遇到的坑:
- mysql8 的密码强制设置
- mysql8 的用户权限管理
- mysql8 中有关mysql_install_db文件
- centos7下没有iptables问题
正文(安装):
网上有许多关于linux下安装mysql8的教程,我大致看看一下,也尝试了一下,但都有需要用mysql_install_db初始化数据库,然而我在官网下载的安装包中并没有这个文件,甚至我用find命令都找不到,我想可能是官方将其删除,或者。。。我什么地方没做好??
下图为我最初选择的版本(黄色选中):
我换了几个版本(都是8以上),然鹅都没有mysql_install_db,这就难受了啊!
于是我换另一种方式,采用rpm的方式,简单是简单,但是好像把我不需要的组件也安装了,表示内存危机啊!我最后会给我参考的文档地址,大家可以看看。
- 下载MySQL yum源(MySQL8.0.11)
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
- 安装yum源
yum localinstall mysql80-community-release-el7-1.noarch.rpm
- 更新yum源
yum clean all
yum makecache
- 创建Mysql账户
groupadd mysql
useradd -g mysql mysql
- 开始安装MySQL
yum install mysql-community-server
- 启动MySQL
systemctl start mysqld
- 查看初始化密码
cat /var/log/mysqld.log | grep password
- 登录MySQL
mysql -u root -p
- 修改初始化密码(密码一定要大小写字母+数字+符号,如:Aa-123456789)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword';
密码的修改一定要遵从括号内的规则,否则不会通过,以后有关密码的设置、修改都要注意。
有关mysql8.0.11更改说明
好了,前面挺顺利,现在来到了一个坑------权限问题。
以下是错误描述:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘IDENTIFIED BY ‘root’ WITH GRANT OPTION’ at line 1.
好吧,你厉害!于是我跑到了Stack Overflow,果然有答案呐,瞬间高兴有没有!
- 创建新用户(注意密码格式):
CREATE USER 'sou'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
解释以下, ‘sou’@’%'中@前面表示用户名,后面代表主机名,我用%表示所有主机都可以访问,是为了的后面远程连接,当然你也可以写成localhost,但是后面如果想要以这个用户的身份进行远程登录,还是要改,所以说,何必呢。还有mysql_native_password这个关键词最后不要换成IDENTIFIED BY,由于mysql8的改变,有些客户端连接时可能不支持。。。
- 为新建的用户赋予权限:
允许任何主机访问数据库
GRANT ALL PRIVILEGES ON *.* TO 'sou'@'%' WITH GRANT OPTION;
- 刷新权限列表:
FLUSH PRIVILEGES;
- 以新建用户的身份登录:
mysql -u '你的用户名' -p
很好,如果你用的是阿里云,加个安全组,估计就差不多了,但不排除意外情况。现在对于我来说就是远程连接,本以为很简单的事,却又是个坑,我想到可能也需要设置防火墙啥的,开放一下端口,vultr界面如下,待我设置了规则之后(其实就是把所有通道全打开,一劳永逸。。。。),发现好像它并没有向我想的那方面发展,并且Google 也登不了了,哦呼!看来自己太笨啊,如果大家知道怎么弄,可以评论一下,求大佬指教。
于是我按照网上的教程,查看了一下服务器内防火墙设置,我直接把它关了,结果就成了(偷懒的可以试试,直接关防火墙)!
看来果然是防火墙的设置问题,嗯。。。。
我看一下怎么修改防火墙的设置,然而找不到iptables。。。
怎么办,查呗!
- 关闭防火墙
systemctl stop firewalld
- 安装或者更新服务
yum install iptables-services
- 启动iptables
systemctl enable iptables
- 打开iptables
systemctl start iptables
进行到第二步就有iptables文件了,这时需要修改一下里面的内容,具体内容可以参考下面的链接。文章内容有不恰当或者有什么建议,请提出。
至此,大功告成!
附:
CentOS(linux) 下MySQL8.0.11的安装
如何在MySQL 8.0中为root用户授予所有权限
关于centos7下/etc/sysconfig/目录没有iptables问题
iptables配置文件