注意:我们安装的是最小版。个人学习啥的完全够用了,但是安装方式是一样的。
今天带来详细的Centos7安装解压版Mysql8,这里尽可能的详细。这样做,自己也会有不错的收获。
---------------------------------更新列表---------------------------------
安装包下载:https://pan.baidu.com/s/1aBY6kIY4YMLDbQc6mgBtUQ(mysql-8.0.19-linux-x86_64-minimal.tar.xz)
提取码:3ba3
2020-02-07更新:mysql8在安装的时候(linux为0,window为1)默认lower_case_table_names=0,也就是说区分大小写。也就是说我们在创建表或者数据库的时候就严格区分大小写的,但是很多场景还是需要不区分大小写的,比如使用mycat的时候。在8之前的处理方式是,找到我们的my.cnf配置文件,然后在[mysqld]下面添加“lower_case_table_names=1”这样的配置,但是在mysql8之中这样配置启动就会报错,因为mysql8在安装的时候初始化就因该指定 “lower_case_table_names=1”。如:./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/data/ --lower-case-table-names=1
以上是网上的说法版本,我去mysql中使用show Variables like '%table_names';查看了我的lower_case_table_names,也确实等于0,为了验证是否在初始化的时候需要指定,我刻意去安装了一下,输入上面的初始化命令,发现一切正常,但是在启动mysql的时候报错了,报错的内容跟直接在my.cnf中修改是一样的错误。所以得出结论,启动初始化的时候指定大小写是错误的,当然也不排除我写错了初始化命令。希望知道原因的大佬指出。
----------------------------------分割线---------------------------------
1.解压版安装
1.0.1:下载Mysq Minimal 版本:请点击我
如图:
下载好了之后会有一个 mysql-8.0.19-linux-x86_64-minimal.tar.xz 文件
1.0.2:将下载好的 mysql-8.0.19-linux-x86_64-minimal.tar.xz 压缩文件上传到自己服务器的 /usr/local/ 文件夹下面
1.0.3:检查服务器是否已经安装mysql或者mariadb,有可能服务器自带了mysql或者mariadb服务器,但是后来mysql收费了,很有可能会自带mariadb服务器。
检查是否存在mysql或者mariadb
rpm -qa | grep mysql
rpm -qa | grep mariadb
如果存在,则卸载
rpm -e -nodeps mysql mariadb
删除了包之后,查看是否有残余的文件夹
find / -name mysql
find / -name mariadb
如果存在,则删除
rm -rf xxxx xxx xxx
(xxx是文件地址,可以输入多个,直接从find / -name mysql 搜索出来的复制粘贴即可)
1.0.4:解压压缩文件
注意:J是大写
tar -xvJf mysql-8.0.19-linux-x86_64-minimal.tar.xz
1.0.5:删除我们压缩包,且把解压之后的文件改名为mysql
删除掉压缩包
rm -rf mysql-8.0.19-linux-x86_64-minimal.tar.xz
改名为mysql 这样我们的mysql完整地址为:/usr/local/mysql
mv mysql-8.0.19-linux-x86_64-minimal/ mysql
1.0.6:创建一个文件夹,保存我们的数据文件等信息
-p检查是否存在,不存在则创建,如果不指定,创建多级文件夹会报错
mkdir -p /data/mysql/data
1.0.7:检查是否存在mysql用户和mysql组
查看组
cat /etc/group | grep mysql
查看用户
cat /etc/passwd | grep mysql
用户和组信息等都存在/etc文件夹下面,如果我们的用户和组都不存在,则创建组和用户
1.创建组
groupadd mysql
2.创建mysql用户
useradd -s /sbin/nologin -r -g mysql mysql
-s:指定用户登入后所使用的shell。
-r:系统级用户
-g:所属分组为mysql
我们在这里创建了一个mysql组和mysql用户,用户是系统级别的,所属mysql分组。且有shell
如果想详细了解mysql的用户和组等信息请点击我:Linux用户和组的概念
1.0.8:然后把我们的数据文件,和mysql的解压文件分别指定权限给mysql组和角色
给mysql组
chgrp -R mysql mysql/
给mysql用户
chown -R mysql mysql/
注意,当前是在/data/文件夹下面,意思就是说我们把mysql文件夹及其下属文件夹权限都给了mysql组和mysql角色
1.0.9:当我们的权限等都分配好了,就可以初始化mysql了,首先我们进入到我们的mysql目录,即:/usr/local/mysql
初始化mysql:注意是mysqld,不是mysql,basedir为我们的mysql解压文件夹,datadir为我们创建的保存数据的文件夹,也就是第6步创建的文件夹(注意,初始化只需要执行一次。再次执行则会报错)
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/data/
如下图:
注意,root@localhost后面的就是初始密码,我这里的是::DNm(Jl69j-N
如果看到的页面不是这样那就表示出错了。另外如果初始密码忘记了,怎么办,我们只需要把我们初始化的data文件中的内容删除,重新进行初始化即可,如:
删除掉我们data文件夹中的内容(表示删除所有
rm -rf /data/mysql/data/*
然后再次执行初始化:
./usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
1.1.0:在etc下面创建我们的配置文件和运行参数文件
配置文件
touch /etc/my.cnf
运行参数文件
mkdir /etc/my.cnf.d
1.1.1:编辑我们的mysql配置文件my.cnf
vi /etc/my.cnf
输入以下内容:
-------------------分割线-----------------
[mysqld]
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql的数据文件
datadir=/data/mysql/data
# 套接字保存地址 当服务器启动的时候自动创建的
socket=/data/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=/data/log/mysql-log/error.log
# 程序启动的pid文件
pid-file=/data/mysql/mysql.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
-------------------分割线-----------------
按下esc后输入:wq 即可
1.1.2:到这个时候我们就可以启动一下服务,试试看了
首先去到/usr/local目录下,因为这样直接输入mysql之后就可以又提示了
启动mysql服务
mysql/support-files/mysql.server start
对的,报错了,还记得我们在my.cnf中指定了异常日志文件 /data/log/mysql-log/error.log,但是我们系统还没有这个文件的,所以我们需要创建该文件,并且赋予权限为mysql角色。
13.创建日志文件,并赋权限mysql。
创建文件
mkdir -p /data/log/mysql-log
touch /data/log/mysql-log/error.log
渠道data目录下,赋予权限
chown -R mysql log/
chgrp -R mysql log/
现在我们有了日志文件,我们再次执行/usr/local/mysql/support-files/mysql.server start启动mysql服务。
结果如下图:
可以看到,我们的mysql已经启动成功了。到这里我们的mysql安装就完成了。
但是如果想做到service mysqld start 还是不行,想达到该效果我们还需要将mysql添加到系统服务
2.将mysql添加到系统服务
2.0.1:编辑我们刚的启动文件,mysql.server,添加我们的安装地址和文件地址
注:当前在/目录下
vi /usr/local/mysql/support-files/mysql.server
找到如下内容并且修改:
basedir=
datadir=
注意:这里的basedir和datadir就是我们的安装地址和创建的文件保存地址。
2.0.2:复制启动文件到etc/init.d文件下,并赋予权限
注:复制启动文件过去
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
注:755权限的意思大致为:所属角色可读可写可执行,同组其他成员以及其他用户组可读可执行。
2.0.3:添加到系统服务,并设置为打开状态
chkconfig --add mysqld
chkconfig mysqld on
ok到了这里,那么我们的mysql就添加到系统服务中了,就可以使用service mysqld start 进行启动了。
虽然添加到了系统服务,也安装成功了,但是还是不可以使用,我们还需要设置一下自己的密码,以及允许外界访问等,接下来我们慢慢的一步步实现。
3.MySql服务设置
3.0.1:设置自己的密码,MySql密码策略必须大小写加上特舒符等,简单的123456就不行。
首先使用我们安装的时候的初始密码,进行登录mysql,然后进行修改密码。
我们去到了mysql安装目录 使用使用 ./bin/mysql -u root -p 进行登录,输入密码之后发现报错了。其实错误很简单,我们在my.cnf中写的stock文件地址为:/data/mysql/mysql.stock 当mysql服务启动之后那么mysql.stock文件就会创建在 /data/mysql/目录下面,但是我们客户端连接需要的文件夹地址为 /data/mysql/data/mysql.stock(注意 这里你们的文件地址不一定就是这个),所以会报错。
解决办法:
1:修改my.cnf中的地址,改为 /data/mysql/data/mysql.stock
2:创建软连接
我们这里使用第二种,创建软连接
#注意 后面的地址是你们启动使用密码连接报错的地址 不一定就是这个地址
ln -s /data/mysql/mysql.sock /data/mysql/data/mysql.sock
ok,现在重新输入./bin/mysql -u root -p 以及自己的初始密码之后就可以登录了。
然后开始正式修改密码。
注:新密码必须要大小写加上数字特殊符 这里的是MyNewPass4!
注:到这这里,我们可以使用 quit 退出mysql 然后继续使用./bin/mysql -u root -p进行登录验证密码是否修改成功
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
3.0.2:允许除本本机外的客户端访问。并且修改密码策略,是navicat可以访问。
mysql -u root -p
use mysql;
update user set host='%' where user='root';
----------分隔符----------
注:不要修改密码格式支持navicat,因为会导致登陆不上,可以直接使用navicat进行远程连接,无需修改,
有可能是我navicat版本比较高,支持了,如果修改了该属性会导致我们在服务器端使用./mysql -uroot -p
然后输入密码报错,这个时候我们只能在my.conf中添加skip-grant-tables,直接进入到mysql然后将我们修改的数据修改回去,刷新后退出,把my.cnf配置文件的skip-grant-tables注释掉,然后再次./mysql -uroot -p 登录即可登录成功。另外其他版本的朋友可以试看看,我也不知道是不是版本的原因。
update user set plugin='mysql_native_password' where user='root';
----------分隔符----------
FLUSH PRIVILEGES;
注:这样修改了 就可以在除了本机之外的所有客户端都可以访问。另外:FLUSH PRIVILEGES 非常重要。如果不写,可能不会生效。
那么现在就可以去退出mysql并且重启。使用其他客户端的navicat连接访问了。
最后可以把MySql设置为开机自动启动。
4.忘记密码处理
4.0.1:在my.cnf配置文件添加skip-grant-tables,跳过验证直接进入mysql
4.0.2:修改密码,并且刷新权限,退出后注释掉配置文件的 skip-grant-tables
好了。到这里就基本上mysql的安装就彻底完成了。谢谢大家的支持。
2021-02-05
关于mysql使用navicat远程连接的时候,要么是拒绝访问,要么就是密码策略不一样拒绝访问。
至于为什么会这样我这里就不过多解释了。就是因为密码策略发生了改变。那么解决办法很简单,修改我们mysql用户的密码策略就是了。
这里我们不推荐直接使用root账户进行修改,我们可以使用root角色创建一个用户,然后给该用户赋所有权限。最后给我们的用户密码策略修改成navicat可以连接的即可。
1:创建用户
# 首先使用root进行连接mysql,然后创建用户 test 且该用户是允许所有主机访问(%)
use mysql;
create user 'test'@'%' identified by '‘密码';
2:赋值权限
# 对 test 进行权限赋值,允许所有表的所有操作
grant all privileges on *.* to 'test'@'%' with grant option;
3:修改该用户的密码策略。
# 将test用户的密码策略修改为 mysql_native_password 注意 这里的 %(允许所有主机访问)
ALTER USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
# 刷新用户信息
FLUSH PRIVILEGES;
3:远程使用navicat进行连接新用户