官网下载:
点击直接下载mysql8.0.25,不过下载有的慢,可能被限速了
下完之后,你会得到一个文件名为mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz
,这是一个二次压缩的mysql,需要进行xz -d xxx
解压成 xxx.tar 再用tar xvf xxx
解压就完成一半了,我把它解压到/usr/local/mysql-8.0.25
解压完之后:
如果出现
xz: mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz: Compressed data is corrupt
一般是压缩包有问题,重新下载吧
废话不多说
第一步:
新建空文件夹
data
在mysql8.0.25
目录下
mkdir ./data
创建用户及用户组
groupadd mysql
useradd -g mysql mysql
命令解释:
useradd
:添加用户,比如root用户
-g mysql
:-g顾名思义group的首字母,即添加的用户属于mysql用户组,mysql是上一步创建的用户组
mysql
:添加的用户名
授权
chown -R mysql.mysql /usr/local/mysql-8.0.25/
命令解释:
-R
:处理指定目录及其子目录下所有文件
mysql.mysql
:用户组.用户
第二步:
初始化数据库
pwd
/usr/local/mysql-8.0.25
在该目录下执行
./bin/mysqld --user=mysql --basedir=/usr/local/mysql-8.0.25/ --datadir=/usr/local/mysql-8.0.25/data/ --initialize
执行结果
2021-07-23T18:32:47.361968Z 0 [System] [MY-013169] [Server] /usr/local/mysql-8.0.25/bin/mysqld (mysqld 8.0.25) initializing of server in progress as process 2301
2021-07-23T18:32:47.373835Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-07-23T18:32:50.746203Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-07-23T18:32:52.712979Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: n9RxKB3rtX%1
最后一行的字符串为临时密码:n9RxKB3rtX%1
如果初始化出现缺少依赖库,就按照提示用yum安装依赖库即可
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
在linux上安装mysql的时候出现错误,意思就是缺少libaio这个软件。
ubuntu
版本:sudo apt-get install libaio-dev
CentOS
或者redcat
版本yum install -y libaio
第三步:
配置文件
在/etc/
下vim my.cnf
# my.cnf
[mysqld]
basedir=/usr/local/mysql-8.0.25
datadir=/usr/local/mysql-8.0.25/data
socket=/tmp/mysql.sock
character-set-server=utf8
建立mysql服务
在/usr/local/mysql-8.0.25/support-files
目录下
cp -a ./mysql.server /etc/init.d/mysql
命令解释:
cp -a
:归档复制,常用于备份
将mysql.server
复制到/etc/init.d/
目录下并更名为mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
命令解释:
chmod +x
:将普通文件变为可执行文件【变绿】
chmod -x
:将可执行文件改成普通文件
查看/etc/init.d/mysql文件
可以发现有该注释 #chkconfig: 2345 64 36
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
chkconfig --list mysql
:检查服务是否生效
启动
service mysql start
查看状态
service mysql status
登录
mysql -uroot -p
-bash: mysql: command not found
原因:
mysql命令不是全局,需要到msql-8.0.25/bin/
下的mysql使用,或者使用软连接将需要全局命令的命令连接到/usr/bin
下,因为在该bin
下,命令是具有全局性的
设置软连接
ln -s /usr/local/mysql-8.0.25/bin/mysql /usr/bin
再次登录成功!
修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
修改配置文件
# my.cnf
# MySQL 配置文件,
#
# # 数据库目录 /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-8.0.25
# 数据目录(这里放在我们新建的 /data/mysql 下)
datadir=/data/mysql_data/data
pid-file=/data/mysql_data/data/mysql.pid
init-connect='SET NAMES utf8'
character-set-server=utf8
# 数据库引擎
default-storage-engine=INNODB
slow_query_log_file=/data/mysql_data/log/mysql-slow.log
# 远程连接访问,低版navicate需要该注解,15-16 navicate请忽视
default_authentication_plugin=mysql_native_password
# 跳过验证密码
#skip-grant-tables
[mysqld_safe]
log_error=/data/mysql_data/log/mysql-error.log
[mysqldump]
quick
max_allowed_packet=16M
EOF
为了考虑数据库安全性和方便管理,对数据文件进行迁移
把/usr/local/mysql-8.0.25/data
迁移到/data/mysql_data/data
步骤:
移动data目录及子目录所有文件
mv /usr/local/mysql-8.0.25/data /data/mysql_data/data
进入mysql_data目录
cd /data/mysql_data
在/data/mysql_data/log/目录下新建错误日志输出文件
mkdir log
touch log/mysql-error.log
结果如图:
上图中,除了data是迁移过来的,其他都要手动创建,全都创建完毕后,再更改目录用户权限,即图中红色方框用户组属关系
chown -R mysql.mysql /data/mysql_data
注意:
上面那三个图中目录的权限更重要,涉及到mysqld_save
免密登录时权限问题,下面详细讲
登录myql
新建用户root@%
作为其他远程访问的用户
create user root@'%' identified by 'root';
命令解释:
root
:字段user
@
作为分隔符
%
:字段host
格式必须是user@'%'
(亲测) 或者‘user’@‘%’
千万注意不能是’root@%'相当于用户名为root@%
图片演示:
#8.0密码规则
caching_sha2_password
#5.7密码规则
mysql_native_password
客户端navicate15
之前的版本可能不支持mysql8.0
的新加密特性,但很幸运的是navicate
目前已经到了navicate 16
了
如果要让mysql有较好的兼容性——其他低配的navicate
依旧可以链接mysql8.0
,可以保留 default_authentication_plugin=mysql_native_password
,代价就是降低安全性
建议尽量使用caching_sha2_password
,这是mysql
官方给的建议
修改远程用户的加密规则(plugin字段)并更新密码
mysql> alter USER root@'%' IDENTIFIED WITH mysql_native_password by 'root';
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'root';
授予远程root用户所有权限
mysql> grant all privileges on *.* to root@'%' with grant option;
刷新权限
mysql> flush privileges;
使用safe
模式进行重启
./mysqld_safe --skip-grant-tables
如果要后台启动,后面跟上 &
敲完之后回车,为啥服务没有进后台?
再一次直接回车键,跳出
ps -ef |grep myqsl
查看服务,发现mysql还在
实在不放心,继续mysql -uroot -p
直接回车
有密码要登录,不管,再一次回车
咦,登录上去了!
注意:
上面safe
模式得以验证,当然这是通过启动safe服务才能不用输入密码,下次正常登录依旧需要密码
或者开启另一会话窗口登录, mysql -uroot -p
直接登录
如果第一步就失败了,而且报错如下:
2021-10-10T11:39:14.058864Z mysqld_safe Logging to '/data/mysql_data/log/mysql-error.log'.
2021-10-10T11:39:14.090716Z mysqld_safe Starting mysqld daemon with databases from /data/mysql_data/data
2021-10-10T11:39:14.386028Z mysqld_safe mysqld from pid file /data/mysql_data/data/mysql.pid ended
那是你关联的mysql-error.log
文件,mysqld_save
对其没有读写权限,导致无法开启服务,为什么?
mysqld_save
该文件已经被我们设置权限为mysql,mysql
权限肯定低于root
,所以要保证mysql-error.log
的所属关系权限是mysqld_save
能访问到的
设置
mysql
用户为nologin
模式
就是不允许让mysql使用shell
方式登录
usermod -s /sbin/nologin mysql
su mysql
This account is currently not available.
配置文件读取顺序
/etc/my.cnf
basedir/my.cnf
datadir/my.cnf
–defaults-extra-file #在读取全局配置文件之后,读取用户配置文件 (~/.my.cnf
)之前,读取extra指定的参数文件
~/.my.cnf
所以我们在 /etc
下的配置文件 my.cnf
是第一个读取的文件,读到这个文件后就不会在读后面路径中的配置文件。
参考其他博客来整理本文其实是想只为帮助同路人少走一些没必要的弯路,有疑问欢迎在以下评论区留言,小弟会给大家第一时间回复!
小孩纸博客宗旨:欢迎评论!欢迎留言,有问题大家一起解决嘛!
参考资料:
百度维基、百度百科,
大佬博客:https://www.cnblogs.com/yunian139/p/11804965.html
参考其他
bee100:https://blog.csdn.net/bee100/article/details/83599417
东华果汁哥:https://blog.csdn.net/u013421629/article/details/119328870
魔有追求:https://www.cnblogs.com/mozq/p/11623918.html