自己在虚拟机上想安装mysql用于学习,在安装过程中碰到一些小问题,特此记录下。
1.到mysql官网下载安装包
需要下载的是 Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit),当然如果是32位的选择32位的。
下载地址如下:https://dev.mysql.com/downloads/mysql/ ;安装参考文档:https://dev.mysql.com/doc/refman/5.7/en/linux-installation-rpm.html
需要下载的是RPM Bundle ,在这个包中包含了所有需要的rpm包。
下载完成后传到虚拟机中,并且解压到/usr/local/mysql/ 目录下。
tar -xvf mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar -C /usr/local/mysql/
在安装之前centos7默认安装的是mariadb,所以要安装mysql首先要卸载mariadb,否则会冲突。
列出所有被安装的rpm package
rpm -qa | grep mariadb
卸载
rpm -e mariadb-libs-5.5.37-1.el7_0.x86_64
错误:依赖检测失败:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
libmysqlclient.so.18(libmysqlclient_18)(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
强制卸载
rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
2.安装解压后的文件
解压完成后到解压的目录下会发现有很多rpm文件,这时参考mysql官方文档的安装操作,运行如下命令进行安装:
yum install mysql-community-{server,client,common,libs}-* mysql-5.*
这里有一个坑,如果按照server,client,common,libs这个顺序安装会有问题,正确的安装顺序如下:
yum localinstall -y mysql-community-common-8.*
yum localinstall -y mysql-community-libs-8.*
yum localinstall -y mysql-community-client-8.*
yum localinstall -y mysql-community-server-8.*
如果没有报错那就接着进行下一步,如果出错就需要百度了。
3.启动mysql服务
在启动之前先检查安装结果:
rpm -qa | grep mysql
启动和查看mysql状态
systemctl start mysqld
systemctl status mysqld
MySQL在启动过程中会进行如下操作:
(1) 初始化MySQL;
(2) 在/var/lib/mysql目录下生成一个SSL证书和密钥文件;
(3) 安装validate_password plugin;
(4) 创建一个超级用户帐号'root'@'localhost,并且为其生成一个随机密码存放在/var/log/mysqld.log文件。
4.修改密码
通过下面这个命令获取初始密码:
grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass1!';
5.使用连接工具进行连接
在安装完成,启动服务,修改密码后,接下来就是使用工具进行连接。需要注意的应该关闭防火墙或者添加端口,连接工具才能正常连接。
1.允许外部连接
但是很不幸连接失败,报错信息如下:ERROR 1130: Host 192.168.3.100 is not allowed to connect to this MySQL server。从错误信息中可以看出来服务器不允许连接,已经把防火墙关了为啥还是不允许连接呢?mysql安装好后默认是只允许本地连接的,需要做如下修改:
mysql -u root -p
mysql>use mysql;
mysql>select 'host' from user where user='root';
mysql>update user set host = '%' where user ='root';
mysql>flush privileges;
mysql>select 'host' from user where user='root';
第一句是以权限用户root登录
第二句:选择mysql库
第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称)
第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址
第五句:刷新MySQL的系统权限相关表
第六句:再重新查看user表,有时候查看发现没有变化,别慌,重启服务试试。
systemctl restart mysqld
重启完成后,再次使用连接工具进行登入,发现还是报错,不过这次错误信息有变化了:
1251 client does not support authentication protocol requested by server;consider upgrading Mysql client
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
2.修改my.cnf和修改密码验证方式
经过一段时间的百度发现原来的密码的验证方式不对,需要修改验证方式。网上大多的路子是先执行一个sql语句修改验证方式,然后修改 /etc/my.cnf 中的配置文件,然后再次重启。修改my.cnf完全OK,但是在执行:alter user root@localhost identified with mysql_native_password by 'yourpassword'; 时经常报错,执行不成功,查找原因是因为经过第一步修改了host为%了。
修改执行的sql语句为:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'youPwd'
修改的/etc/my.cnf:
执行成功,使用连接工具连接正常连接,大功告成