环境
1、windows10操作系统
2、docker 3.5.1
3、mysql mysql80-community-release-el8-1.noarch.rpm
docker环境搭建
下载
官网www.docker.com/ 下载安装
虚拟化设置
可以通过任务管理器查看是否已经开启虚拟化
注:如果没有开启虚拟化,需要进入BOIS 开启cpu虚拟化(具体操作根据不同的主板有所不同)
安装centos
搜索并拉取centos镜像
docker pull centos拉取镜像
运行镜像
docker run -it 镜像编码(这里输入前三位就行了)
注: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…
我安装的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运行状态
完成安装结果如下
注意点
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版本
之后使用mysql -u root -p进入mysql,查询相关资料发现mysql初始是没有密码的,直接回车就可以进入,但是结果发现不输入密码始终进不去,出现密码错误的提示
Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问
查询资料,这个使用可以在mysql配置中添加skip-grant-tables免密登录
我下载的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连接数据库成功
结束
注:
linux mysql 1130错误码
修改host值update user set host = '%' where user ='root';
查看mysql库中的user表的host值select 'host' from user where user='root';