闲来无事在阿里云租了台ESC服务器,搭建WEB环境的一些问题。今天是在服务器上安装最新的mysql数据库。
1.下载安装包
先从下载安装包开始吧
地址:https://dev.mysql.com/downloads/mysql/
Select Operating System这个下拉框可以选择不同的linux版本的mysql,但是我也不太清楚CentOS适合哪个就随便选了一个就是图中的这个,事实证明安装之后没什么问题。
2.解压缩
可以看到图中的文件后缀是 .tar.xz,和5.x版本的压缩形式不太一样。我试了一下使用命令 tar -zvxf ...... 是不能正常解压的大概意思是压缩方式不一样,查了网上的资料后使用tar -vxf ......解压成功。
查看是否安装mariadb 数据库,尤其是CentOS 7的用户,好像默认会安装,有的话需要卸掉。
rpm -qa | grep mariadb //查看mariadb的安装情况
systemctl stop mariadb //停止mariadb的服务
rpm -qa | grep mariadb //查看mariadb的安装情况
rpm -e --nodeps mariadb-5.5.52-1.el7.x86_64 //卸载相应软件,有的话使用命令没有就不用了
rpm -e --nodeps mariadb-server-5.5.52-1.el7.x86_64
rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64
像我的服务器上就只有mariadb-libs-5.5.52-1.el7.x86_64,所以我只调用了最后一条命令。
3.添加分组,用户
文件解压到什么位置,怎么移动这个随便你怎么弄应该不会出什么大问题。有的人可能问为什么要把创建分组、用户放在第三步这有什么作用?一开始有也是这么想的,随后去问万能的度娘上面说是出于安全的角度考虑。意思是如果不设置这个东西如果坏心眼的人通过这个连接找到什么破绽可能会对系统的翻阅毁坏其它文件。但如果专门设置一个用户加上权限控制可能会好些。(个人查看资料理解的,可能和实际用途有很大偏差,大牛勿喷)
groupadd mysql //创建用户组
useradd -r -g mysql mysql //创建用户并分配用户组
4.安装
创建 data 文件夹:[root@localhost mysql]# mkdir ./data
修改当前目录拥有者为 mysql 用户:[root@localhost mysql]# chown -R mysql:mysql ./
初始化 mysqld:[root@localhost mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
这张图是盗的,我安装的时候没有留图。黄色的部分是随机密码。
5.检查libaio控件、更改配置文件
rpm -qa | grep libaio
//没有的话使用下面两行命令
wget http://mirror.centos.org/centos/6/os/x86_64/Packages/libaio-0.3.107-10.el6.x86_64.rpm
rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm
这两行命令下载的是64位的请悉知。
正常是需要找到my.cnf 文件更改一些配置的,但是我下载的版本没有找到模板,所以没有进行这一步。不知道后续会不会有乱码的问题。
6.设置开机自启动
a.复制启动脚本到资源目录:[root@localhost mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
b.增加 mysqld 服务控制脚本执行权限:[root@localhost mysql]# chmod +x /etc/rc.d/init.d/mysqld
c.将 mysqld 服务加入到系统服务:[root@localhost mysql]# chkconfig --add mysqld
d.检查mysqld服务是否已经生效:[root@localhost mysql]# chkconfig --list mysqld
命令输出类似下面的结果:
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
表明mysqld服务已经生效,在2、3、4、5运行级别随系统启动而自动启动,以后可以使用 service 命令控制 mysql 的启动和停止。
查看启动项:chkconfig --list | grep -i mysql
删除启动项:chkconfig --del mysql
e. 启动 mysqld:[root@localhost mysql]# service mysqld start
7.修改环境变量
这一步之前我也是拒绝的不知道为什么要设置,当我知道真相了之后才觉得真香。设置环境变量是为了在哪个位置,那个文件夹都可以进入mysql的命令。配置也很简单
编辑 /etc/profile文件
export PATH = $PATH:/usr/local/mysql/bin 如果原来有path那就在后面直接加上新的路径就好中间用:号分割。
source /etc/profile //使配置文件立即生效
8.测试登录
本问虐心的地方才刚刚开始,由于使用的是8.0的版本有很多命令与5.x版本有很大出入。具体用到的如下。
测试登录:
mysql -uroot -p
需要上面的随机密码才能登陆。
ALTER user 'root'@'localhost' IDENTIFIED BY 'password'
9.远程连接
我使用的是navicat连接的,具体哪个版本的忘记了。可能需要注意的几个地方。
a.服务器的防火墙。
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
b.租的服务器可能需要去供应商那里的控制台开放下3306端口号。这里举例阿里云的
这样服务器端的就设置的差不多了。
c.修改密码的加密规则。
先授权:
grant all privileges on *.* to 'root'@'%' with grant option;
该用户拥有所有的库.表的权限,'%'代表所有的ip都可以远程连接。默认是localhost只能本地使用。
更改加密规则及密码:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
这里的'%'换成具体的ip的时候会报错,我还没有非常好的解决方案。
我的做法是直接去mysql.user表里改host的数据。
至此,你的服务器上就安装上最新的mysql8.0数据库,并且可以远程连接啦。
-------------------------------------------------------------------------分割线---------------------------------------------------------------------------------------
mysql8.0忘记密码的解决方案
1.关闭mysql服务
#service mysqld stop
2.进入安全模式
#mysqld --user=mysql --skip-grant-tables --skip-networking&
3.启动mysql服务
#service mysqld start
4.无密码登录
#mysql -uroot mysql
5.修改密码为空
mysql>use mysql
mysql>update user set authentication_string='' where user='root';
6.重启服务,后登录,遇到填写密码直接回车即可
#mysql -uroot -p
7.修改密码
ALTER user 'root'@'localhost' IDENTIFIED BY 'Password.99'
这里要注意密码一定要是大小写、特殊字符、数字组合。否则还是登录不上。
----------------------------------------------------------------------------远程连接的问题--------------------------------------------------------------------
1.修改host
mysql>update user set host='%' where user='root';
2.修改加密规则
mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
-----------------------------------------------------------------------------创建新用户---------------------------------------------------------------------------
mysql>use mysql
--创建用户
mysql>create user user_name identified by 'passWord';
--设置权限
mysql>grant execute,insert,select,update on bsae_name.* to 'user_name'@'host';
--更改生效
mysql>flush privileges;