centos7.9下安装mysql8.0

801 阅读5分钟

这是我参与「第四届青训营」笔记创作活动的的第2天

本文章内容讲述最基本的mysql8.0数据库安装全流程

0.首先我们需要卸载内置的mariadb

原因是以前的Linux系统中数据库大部分是mysql,不过自从被sun收购之后,就没用集成在centos这些开源Linux系统中了,那么如果想用的话就需要自己安装了,首先centos7 已经不支持mysql,因为收费了你懂得,所以内部集成了mariadb,而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb

yum search mysql # 检查是否有mariadb.x86_64
yum remove mariadb-libs.x86_64

1.安装之前的准备(卸载干净之前的mysql)

1.查看是否有安装过mysql

rpm -qa | grep -i mysql

2.删除mysql

yum -y remove MySQL-*

一般用rpm -e 的命令删除mysql,这样表面上删除了mysql,可是mysql的一些残余程序仍然存在,并且通过第一步的方式也查找不到残余,而yum命令比较强大,可以完全删除mysql.(ps:用rpm删除后再次安装的时候会提示已经安装了,这就是rpm没删除干净的原因)

3.把所有出现的目录统统删除

find / -name mysql

查找mysql的一些目录,把所有出现的目录删除,可以使用rm -rf 路径,删除时请注意,一旦删除无法恢复。

4.删除配置文件

rm -rf /etc/my.cnf

5.删除mysql的默认密码

rm -rf /root/.mysql_sercret

删除mysql的默认密码,如果不删除,以后安装mysql这个sercret中的默认密码不会变,使用其中的默认密码就可能会报类似Access denied for user ‘root@localhost’ (using password:yes)的错误.

五步完成之后,这样mysql就全部删除干净了,若没安装过mysql可忽略以上步骤

2.开始安装MySQL8.0

本人安装包为:mysql-8.0.29-linux-glibc2.12-x86_64.tar.xz

提前下载好安装包哟

xz -d mysql-8.0.29-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-8.0.29-linux-glibc2.12-x86_64.tar
# 复制解压后的mysql目录
cp -r mysql-8.0.29-linux-glibc2.12-x86_64 /usr/local/mysql

添加用户组和用户

# 添加用户组
groupadd mysql
# 添加用户mysql 到用户组mysql
useradd -g mysql mysql

初始化数据库

mysql 8.0版本没有./scripts/mysql_install_db

注意这里有个临时密码一定要记住!!!!!!!!!!!!!!

cd /usr/local/mysql/
mkdir -p data/mysql
chown -R mysql:mysql ./
# mysql老版本(8.0版本之前)
# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql
# mysql新版本(8.0版本)
./bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/mysql --initialize
# 注意:记住临时密码↑
# 注意:记住临时密码↑
# 注意:记住临时密码↑

cp support-files/mysql.server /etc/init.d/mysqld # 把mysql添加到系统服务
chmod +x /etc/init.d/mysqld
# cp support-files/my-default.cnf /etc/my.cnf # mysql8.0中没有了

配置mysql

vim /etc/my.cnf

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data/mysql
socket=/tmp/mysql.sock
character-set-server=utf8

mysql启动配置

# 加入环境变量,编辑 /etc/profile,这样可以在任何地方用mysql命令了
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile

# 启动服务
service mysqld start
# 关闭mysql
service mysqld stop
# 查看运行状态
service mysqld status

# 也可以采用这个方式查看MySQL服务运行状态
ps -ef | grep mysql

3.mysql基本使用

mysql登录

mysql -u root -p

Enter password:

这里填写上面初始化过程中生成的密码

一开始是没有密码的,在初始化的时候有个密码,只是相当于临时密码,这里你做任何操作mysql都会提醒你重置你的密码

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

MySQL版本5.7.6版本以前用户可以使用如下命令:

mysql> SET PASSWORD = PASSWORD('xxxxxxxxx');

MySQL版本5.7.6版本开始的用户可以使用如下命令:

mysql> ALTER USER USER() IDENTIFIED BY 'xxxxxxxxxx';

更改root用户密码

MySQL中用户相关信息存储于mysql数据库中,需要现转换到mysql数据库,分别用到如下命令
show databases; use database_name; show tables;

mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 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                                   |
| 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                                                 |
+------------------------------------------------------+
37 rows in set (0.00 sec)

存储用户相关信息的内容位于user表格中,可以查看表格结构

mysql> desc user;

+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                    | Type                              | Null | Key | Default               | Extra |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                     | char(255)                         | NO   | PRI |                       |       |
| User                     | char(32)                          | NO   | PRI |                       |       |
| Select_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv                | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv                | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv               | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv               | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv               | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv               | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv      | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv               | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv   | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type                 | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher               | blob                              | NO   |     | NULL                  |       |
| x509_issuer              | blob                              | NO   |     | NULL                  |       |
| x509_subject             | blob                              | NO   |     | NULL                  |       |
| max_questions            | int unsigned                      | NO   |     | 0                     |       |
| max_updates              | int unsigned                      | NO   |     | 0                     |       |
| max_connections          | int unsigned                      | NO   |     | 0                     |       |
| max_user_connections     | int unsigned                      | NO   |     | 0                     |       |
| plugin                   | char(64)                          | NO   |     | caching_sha2_password |       |
| authentication_string    | text                              | YES  |     | NULL                  |       |
| password_expired         | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed    | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime        | smallint unsigned                 | YES  |     | NULL                  |       |
| account_locked           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_role_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_role_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Password_reuse_history   | smallint unsigned                 | YES  |     | NULL                  |       |
| Password_reuse_time      | smallint unsigned                 | YES  |     | NULL                  |       |
| Password_require_current | enum('N','Y')                     | YES  |     | NULL                  |       |
| User_attributes          | json                              | YES  |     | NULL                  |       |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
51 rows in set (0.00 sec)
mysql> select user,host,plugin from user;

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
4 rows in set (0.01 sec)

上面的localhost说明只允许本地登录

MySQL8.0 中用户默认认证方式为 caching_sha2_password,虽然安全性有保障,但是对于使用本地或者远程连接都造成了一定困扰。因此可以将用户认证方式改为MySQL5.X常用的mysql_native_password方式,只有此种方式才能在MySQL8.0中更改用户密码。

mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'xxxxxxxxxxxxx';
Query OK, 0 rows affected (0.01 sec)

如果不需要mysql_native_password的方式,将其改成caching_sha2_password即可

之后刷新缓存

mysql> flush privileges;

Query OK, 0 rows affected (0.02 sec)

4.开启mysql远程连接

该样例为更改root用户的远程访问权限

此时root用户的host属性仍然是localhost,也就是只能从本地访问,因此可以将root用户的访问权限由本地改为本地和外部都可以访问,将host的值由localhost改为 %。

(要在use mysql命令后操作)

mysql> 输入flush privileges,刷新数据库。否则会保留在缓存中。

Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

输入flush privileges,刷新数据库,否则会保留在缓存中。

mysql> flush privileges;

Query OK, 0 rows affected (0.01 sec)
mysql> select user,host,plugin from user;

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | %         | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
4 rows in set (0.01 sec)