docker+centos8+mysql8搭建----shock wave 2

679 阅读4分钟

环境

1、windows10操作系统
2、docker 3.5.1
3、mysql mysql80-community-release-el8-1.noarch.rpm

docker环境搭建

下载

官网www.docker.com/ 下载安装

虚拟化设置

可以通过任务管理器查看是否已经开启虚拟化

微信截图_20210715140722.png 注:如果没有开启虚拟化,需要进入BOIS 开启cpu虚拟化(具体操作根据不同的主板有所不同)

安装centos

搜索并拉取centos镜像

微信截图_20210715141147.png docker pull centos拉取镜像

运行镜像

docker run -it 镜像编码(这里输入前三位就行了)

微信截图_20210715141358.png 注:docker默认安装和拉取镜像环境为c盘,如果想更换,可以使用软链接,将文件链接到d盘 mklink /j .docker D:.docker

开始mysql环境搭建

我这里直接安装的是centos的纯净版,如果有必要可以先使用以下命令查询是否已经安装过了mysql

rpm -qa | grep mysql 查询是否安装mysql
rpm -e mysql  // 普通删除模式
rpm -e --nodeps mysql  // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除

因为纯洁版的原因,centos有很多组件没有安装, 可以先安装yum -y install wget

下载安装

下载地址为:dev.mysql.com/downloads/r…

微信截图_20210715142207.png 我安装的centos8,所以我们先把mysql80-community-release-el8-1.noarch.rpm复制下来

然后使用以下命令进行安装

wget http://repo.mysql.com/mysql80-community-release-el8-1.noarch.rpm
rpm -ivh mysql80-community-release-el8-1.noarch.rpm
yum update 
yum install mysql-server 安装
chown mysql:mysql -R /var/lib/mysql 赋予权限
mysqld --initialize 初始化mysql
systemctl start mysqld 开始启动
systemctl status mysqld 查看mysql运行状态

完成安装结果如下

微信截图_20210715142937.png

注意点

systemctl介绍

Linux 服务管理两种方式service和systemctl
systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
systemd对应的进程管理命令是systemctl

第一次使用系统并没有安装systemctl 需要使用

yum install systemd -y 安装 

因为我安装centos版本的问题,无法直接运行systemctl,需要退出镜像(记得docker commit保存镜像的改动)

使用docker run -itd --privileged -p 127.0.0.1:8001:80 -p 127.0.0.1:3306:3306 -p 127.0.0.1:8848:8848 1cf(容器编码) /usr/sbin/init 运行容器
--privileged:让root获得所有root权限
--p 是接口映射,后面会用到,可以让docker端口映射到我们本地
docker exec -it 容器编码 /bin/bash进入容器

这个时候就可以使用systemctl start mysqld 开始启动,发现报错

Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

按照提示systemctl status mysqld.service,查看运行日志(没看出什么)

进入cat /var/log/mysql/mysqld.log 查看mysql运行日志可以发现

The innodb_system data file 'ibdata1' must be writable

分析这个可能是运行权限的问题,重新使用chmod -R 777 /var/lib/mysql赋予相关权限

之后启动成功

使用mysqladmin --version查看mysql版本

微信截图_20210715150233.png

之后使用mysql -u root -p进入mysql,查询相关资料发现mysql初始是没有密码的,直接回车就可以进入,但是结果发现不输入密码始终进不去,出现密码错误的提示

Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问

查询资料,这个使用可以在mysql配置中添加skip-grant-tables免密登录

微信截图_20210715151055.png 我下载的mysql版本默认配置不在my.cnf,而是在my.cnf.d文件夹中的mysql-server.cnf中,添加之后,重启mysql,即可登录成功

navicat连接数据库

使用

show global variables like 'port';查看端口号

发现端口号为0,这是因为没有开启端口号配置

show variables like 'skip_networking';查询网络端口是否配置,发现果然如此

查询相关资料发现需要注释掉skip-networking才能开启端口配置,发现配置文件中并没有这个,然后发现需要同时注释掉skip-networking和skip-grant-tables免密登录才行,因为我现在不知道mysql密码,所以需要修改mysql root的密码

修改root密码

在免密登录的状态下进入mysql 并且进入mysql数据库(use mysql),使用以下命令修改密码

5.7以前
update user set password=PASSWORD("你的密码") where User = 'root';
5.7以后
update user set authentication_string='你的密码' where user='root';#root不设置密码
发现修改失败
可以使用以下命令修改密码
alter user 'root'@'localhost' IDENTIFIED BY '123456';#设置密码
flush privileges;刷新

退出,注释掉skip_networking和skip-grant-tables,重新使用我们修改的密码重新登录mysql即可 发现端口号为3306,前面我们已经在运行docker的时候将3306映射到了我们本地的3306端口上,本地使用navicat连接数据库成功

微信截图_20210715152717.png

结束

注:

linux mysql 1130错误码
修改host值update user set host = '%' where user ='root';
查看mysql库中的user表的host值select 'host' from user where user='root';