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 启动服务/重启服务/停止服务