Linux下centos操作系统安装Mysql8.0过程及踩坑填补
我自己有一台服务器,之前安装的是MySQL5.5,现在我想升级为MySQL8.0,于是我干了以下操作,既有踩坑又有干货:
1.先卸载MySQL;
2.删除跟MySQL相关文件;
3.安装新的MySQL8.0版本(这里踩了一个坑,我的centos是7版本,结果我MySQL版本误操作为centos8的版本了,导致我安装不成功)
4.由于安装失败,寻找补救措施(没卵用,可能某个配置文件还是没删到)
5.接受现实,重置服务器。
6.最终安装成功,这里将我的安装过程展示出来;
1.删除以前的MySQL相关文件
由于我的是新服务器,因此不需要删除内容,此处还是贴出来
rpm -qa | grep mysql
如果没有任何输出,则表示未安装,如果有则输入以下命令进行删除:
rpm -e 需要卸载的rpm包
如果删除时提示有依赖,则输入强制删除命令:
rpm -e 需要卸载的rpm包 --nodeps
2.查看CentOS版本
cat /etc/redhat-release
3.去mysql官网找到对应系统版本的MySQL下载链接
MySQL :: Download MySQL Yum Repository
我这里已经复制出来了,供君采撷:https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
4.下载MySQL
进入你想放置MySQL的文件夹,运行命令
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
这里我是自己创建的一个文件夹,大家可以自行创建自己的文件夹
创建文件夹的命令:mkdir java:创建一个名为java的文件夹
cd java:切换到java文件夹
mkdir mysql:在java文件夹内创建一个mysql文件夹
最后再cd mysql进入mysql文件夹内再运行上面wget的命令下载mysql文件;
5.安装MySQL源
sudo rpm -Uvh mysql80-community-release-el7-5.noarch.rpm
6.安装MySQL服务端
sudo yum install mysql-community-server
在安装过程中有两个需要选择Y/N的地方,直接选择Y然后回车即可
可能会出现这个问题:MySQL 8.0 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确
此时使用这个命令跳过验证密钥即可: sudo yum install mysql-server --nogpgcheck
7.启动MySQL
systemctl start mysqld.service
8.修改MySQL密码
输入命令查看初始密码
grep 'temporary password' /var/log/mysqld.log
2月 05 17:22:15 VM-12-5-centos systemd[1]: Starting MySQL Server...
2月 05 17:22:25 VM-12-5-centos systemd[1]: Started MySQL Server.
[root@VM-12-5-centos yum.repos.d]# systemctl stop mysqld.service
[root@VM-12-5-centos yum.repos.d]# systemctl restart mysqld.service
[root@VM-12-5-centos yum.repos.d]# grep 'temporary password' /var/log/mysqld.log
2024-02-05T09:22:18.784299Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: qs!cuo3wwh+B
初始密码就是在root@localhost:后面的一坨,比如我的初始密码就是qs!cuo3wwh+B
登陆mysql:
使用ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';这个命令将你的密码填入然后回车,注意密码强度必须要满足MySQL的默认策略:在MySQL中默认的密码策略是要包含数字、字母及特殊字符,如果只是测试用,不想用那么复杂的密码,可以修改默认策略(懒得改了);
我修改成功是这样的:
9.防火墙开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
别忘了还得去你的云服务器控制面板开放3306端口,这里以腾讯云为例:
10.遇到的最后一个坑,navicat连不上MySQL
在使用navicat连接MySQL的时候出现禁止我的ip连接MySQL,这个时候需要去mysql上修改MySQL中的user表的root用户的权限:以下是我的修改过程,主要就是需要把root用户的host修改为通配符%,这样任何的ip都能通过root访问这个MySQL;
具体命令:show databases;展示数据库有哪些
use mysql;选择mysql数据库
show tables;展示数据库的表
update user set host='%' where user='root';修改内容
flush privileges;刷新权限
最后就能成功连接数据库了.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+------------------------------------------------------+
| Tables_in_mysql |
+------------------------------------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| replication_asynchronous_connection_failover |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version |
| replication_group_member_actions |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+------------------------------------------------------+
38 rows in set (0.01 sec)
mysql> select Host, User from user;
+-----------+------------------+
| Host | User |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
4 rows in set (0.00 sec)
mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select Host, User from user;
+-----------+------------------+
| Host | User |
+-----------+------------------+
| % | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+
4 rows in set (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)