mysql(4)-linux环境centos7安装mysql8.0.19详细安装步骤



Centos7  Linux 上安装 MySQL8.0.19  

首先下载安装包
官网地址:https://dev.mysql.com/downloads/mysql/
下载地址(64位):https://dev.mysql.com/downloads/file/?id=480751
需要 32 位的可以去官网地址找。

1. 安装&解压压缩包到目标位置
下载的文件应该是一个 mysql*.tar.xz 格式的压缩包,这里需要先对 .xz 解压

解压:tar xvJf ***.tar.xz   (注意:J是大写的字母 )

将解压出来的文件移动到 /usr/local/   且修改原来的名字mysql-8.0.19-linux-glibc2.12-x86_64修改为mysql
mv mysql-8.0.19-linux-glibc2.12-x86_64   /usr/local/

cd  /usr/local/

mv mysql-8.0.19-linux-glibc2.12-x86_64   mysql      (给mysql-8.0.19-linux-glibc2.12-x86_64重命名)

到这里我们就得到 MySQL的文件夹了,并且将他移动到了 /usr/local 目录下改名为 mysql 。

2.  新建mysql用户、组及目录

在这里我们新建一个 mysql 用户组和用户用来运行 mysql,作用:可以提高系统的安全行性。

groupadd mysql
useradd -M -g mysql -s /sbin/nologin mysql
passwd mysql

理解:上面的命令第1句是新建一个用户组,第2句再新建一个用户并且不可以登录,不创建家目录,第3句命令给 mysql 用户修改密码。

3. 创建mysql数据仓库目录

注意在根目录下新建

cd /

mkdir  /data/mysql   数据仓库目录  (新建data文件夹以及mysql文件夹,用来存放mysql的数据仓库)

sudo chown -R mysql.mysql /data   

理解:创建 /data 目录并且将目录属主设置为 mysql.  (注意是mysql.   是点)

或者

sudo mkdir -p /data/mysql
sudo chown -R mysql.mysql /data


4.接下来创建 mysql 的配置文件 /etc/my.cnf    (备注:/etc/下我本来的文件是没有my.cnf的  这是我新建的)
sudo vim /etc/my.cnf

原有的

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
 1 # MySQL 配置文件,
 2 #参考:http://blog.51cto.com/zhangxinqi/2178407  
 3 # https://www.cnblogs.com/lyq863987322/p/8074749.html

替换成以下内容:

# 数据库目录 /data/mysql
[client]
port=3306
# mysql socket 文件存放地址
socket=/tmp/mysql.sock
# 默认字符集
default-character-set=utf8


[mysqld]
server-id=1
# 端口
port=3306
# 运行用户
user=mysql
# 最大连接
max_connections=200
socket=/tmp/mysql.sock
# mysql 安装目录(解压后文件的目录)
basedir=/usr/local/mysql
# 数据目录(这里放在我们新建的 /data/mysql 下)
datadir=/data/mysql
pid-file=/data/mysql/mysql.pid
init-connect='SET NAMES utf8'
character-set-server=utf8
# 数据库引擎
default-storage-engine=INNODB
log_error=/data/mysql/mysql-error.log
slow_query_log_file=/data/mysql/mysql-slow.log


# 跳过验证密码(想跳过验证密码就放开即不注释 不想跳过即会输入密码,那就注释掉)
#skip-grant-tables


[mysqldump]
quick
max_allowed_packet=16M
EOF

到这里配置文件就建好了,上面是我自己的配置,在 mysql 启动的时候就会自动读取这个配置文件。
可能会有好几个地方有 mysql 的配置文件,它的读取顺序是这样的

/etc/my.cnf
basedir/my.cnf
datadir/my.cnf
–defaults-extra-file        #在读取全局配置文件之后,读取用户配置文件 (~/.my.cnf)之前,读取extra指定的参数文件
~/.my.cnf
所以我们在 /etc 下的配置文件 my.cnf 是第一个读取的文件,读到这个文件后就不会在读后面路劲中的配置文件。

5.mysql 初始化:

现在让我们进入解压后的 mysql 目录,进行mysql 初始化:

cd /usr/local/mysql   (进入解压后的 mysql 目录)

bin/mysqld --initialize

安装的结果是这样的:

在橘色线框中的部分,是自动生成的 root 密码,待会儿我们要用这个密码进行登录。

----遇到问题:但是我是先卸载了centos7自带的数据库,又卸载了之前安装的数据库,所以在我重装 mysql 的时候,
我遇到了初始化的时候没有任何输出,也就是初始化完毕没有输入一个初始化密码让我保存,也没有找到日志文件,
结果不知道root的初始密码是什么,只能通过跳过登录验证的方式重置密码(方法:vi  /etc/my.cnf   #skip-grant-tables  想跳过验证密码就放开即不注释)

6.mysql启动

启动 MySQL

cd /usr/local/mysql/support-files/

./mysql.server  restart
./mysql.server start

OK,启动成功---------------------
-------------------------我启动的时候还遇到了其他问题 
-------------------------1. 启动mysql报错The server quit without updating PID file!https://www.cnblogs.com/yiyaxuan/p/12559885.html  

-------------------------2.


7. 使用命令行登录 MySQL

方法1:
cd /usr/local/mysql/support-files/

mysql -u root -proot    (这是登录的命令  如果有密码就用mysql -uroot -proot   第一个root是用户,第二个root是密码)
mysql -u root -p       (这是登录的命令  如果没有密码就用mysql -uroot -p   第一个root是用户 此时配置文件需要打开skip-grant-tables

然后输入刚刚自动生成的 root 密码即可(上面输出了密码就使用刚刚的密码,上面如果没有输出密码,就打开 skip-grant-tables 然后登录成功 然后给root设置个密码

然后修改初始密码,出现报错:

方法2:

用这句命令的时候bin/mysql -u root -p 


遇到报错1:

[root@localhost bin]# mysql -uroot -p
bash: mysql: 未找到命令...

解决方法:

原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。
首先得知道mysql命令或mysqladmin命令的完整路径,比如mysql的路径是:/usr/local/mysql/bin/mysql,我们则可以这样执行命令:

# ln -s /usr/local/mysql/bin/mysql /usr/bin

以下是补充:

linux下,在mysql正常运行的情况下,输入mysql提示:
mysql command not found

遇上-bash: mysql: command not found的情况别着急,这个是因为/usr/local/bin目录下缺失mysql导致,只需要一下方法建立软链接,即可以解决:
把mysql安装目录,比如MYSQLPATH/bin/mysql,映射到/usr/local/bin目录下:
# cd /usr/local/bin
# ln -fs /MYSQLPATH/bin/mysql mysql

还有其它常用命令mysqladmin、mysqldump等不可用时候都可按用此方法解决。
注:其中MYSQLPATH是mysql的实际安装路径

原文参考:https://www.jb51.net/article/34622.htm

因为我root没有给我密码,所以先跳过验证,重启mysql

mysql -u root -p 回车键2次,进入修改,可以直接看后面的

1. 先把root的localhost改成%,设置远程登录:update user set host='%' where user='root';

2.修改加密规则

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 

3.更新 root 用户密码

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; 

flush privileges;

然后修改为不跳过验证,重启mysql,然后使用navicat连接,完美结束!


遇到报错2:

[root@localhost mysql]# bin/mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

解决方法:
1. mysql -u root -p (命令未找到使用: ln -s /usr/local/mysql/bin/mysql /usr/bin)

2.cd /usr/local/mysql

[root@localhost mysql]# bin/mysql -u root -p

输入之前设置的密码-------进入命令行------------

开始去执行一句语句:bin/mysql -u root -p  ,,然后修改初始密码,继续出现报错3:

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

解决方法:

最后执行以下三个命令之一成功。
下面三个命令任选其一

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password'; (new password=root  也就是我的root用户密码为root

alter user 'root'@'localhost' identified by 'new password';
ALTER USER USER() IDENTIFIED BY 'new password';

 8. 使用Navicat工具去连接MySQL

1. 遇到第一个问题:Client does not support authentication protocol requested by server;

命令如下:

1、use mysql;

2、alter user 'root'@'localhost' identified with mysql_native_password by '********';

'root'@'localhost'

'root'@'localhost' 是你通过登录mysql然后输入select Host,User  from user; 看下你自己的root对应的Host那里是%还是localhost ,我的是% 所以我用的是:alter user 'root'@'%' identified with mysql_native_password by '********';

思考:怎么把localhost改成%?在文章后面

3、flush privileges;

2. 然后继续测试连接,遇到第2个问题:Access denied for user 'root'@'DESKTOP-8RFO9MH' (using pasword:YES)

Flush privileges;

CREATE USER 'root'@'%' IDENTIFIED BY 'root';
ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'%'-------------因为我已经新建了root用户,所以此句不再执行

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

select Host,User from user;

ALTER USER 'root'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'root' PASSWORD EXPIRE NEVER;

select Host,User from user;

重点执行以上标红色的三条语句。

然后重新连接Navicat,连接成功。

思考:怎么把localhost改成%?
MySQL8.0本地访问设置为远程访问权限

1.登录MySQL

mysql -u root -p

输入您的密码

2.选择 mysql 数据库

1
2
use mysql;
show variables like '%skip_networking%';  //查数据库编码

3.在 mysql 数据库的 user 表中查看当前 root 用户的相关信息

1
2
select host,user from user where user='root';  //mysql 8.0
select host, user, authentication_string, plugin from user;

执行完上面的命令后会显示一个表格

查看表格中 root 用户的 host,默认应该显示的 localhost,只支持本地访问,不允许远程访问。

创建用户

1
CREATE USER 'root'@'%' IDENTIFIED BY '111111';
改密码 
1
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '111111';

设置为远程登录

1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

 已有用户设置远程登录

1
update user set host='%' where user='root';   //mysql 8.0

GRANT ALL ON 表示所有权限,% 表示通配所有 host,可以访问远程。

5.刷新权限

所有操作后,应执行

flush privileges;

6.查看 root 用户的 host

再次执行步骤 2,你会发现 root 用户的 host 已经变成 %,说明我们的修改已经成功,可以远程访问了。

7.访问数据库

远程访问数据库的可视化工具比较多如:Navicat、SQLyog、MySQL workbench 等,我这里使用 Navicat

输入访问的 host 和密码,报 2059 错误,这是因为 MySql8.0 版本 和 5.0 的加密规则不一样,而现在的可视化工具只支持旧的加密方式。

此问题有两种方法,一种是更新 Navicat 驱动来解决此问题,另一种是将 MySQL 用户登录的加密规则修改为 mysql_native_password,第一种方法我试过了没有起作用,我这里采用第二种方法。

8.修改加密规则

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 

9.更新 root 用户密码

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; 

flush privileges;

use database_name;告诉mysql你要使用那个数据库;

service mysqld start/restart/stop  启动服务/重启服务/停止服务

原文地址:https://www.cnblogs.com/yiyaxuan/p/12584007.html