这是我参与「第四届青训营」笔记创作活动的的第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)