1、首先我们通过docker命令运行自己的mysql实例
docker run -d -p 3306:3306 --privileged=true -v /jhy/mysql/log:/var/log/mysql -v /jhy/mysql/data:/var/lib/mysql -v /jhy/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
-v 是进行容器卷的映射 方便我们宿主机的联调
解释:
(1)卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
(2)Docker挂载主机目录访问如果出现cannot open directory Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即
使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
使用docker ps 查看该容器ID 后使用命令进入后台管理 docker exec -it 容器ID /bin/bash 输入 mysql -uroot -p 后 输入密码 发现怎么输入正确的密码都不对
2、故我们进入我们刚刚创建的容器卷当中进行配置
进入conf目录
在[mysqld]当中添加
skip-grant-tables
3、添加之后重启启动MySQL的实例 然后 mysql -uroot -p进入
4、 使用命令 use mysql;
select user,authentication_string,host from user;
// 将密码置位空
update user set authentication_string='' where user='root';
flush privileges;
5、 退出mysql,把第一步的skip-grant-tables注释。再重启mysql
6、 使用 root用户,密码 回车键登录;
7、 修改root密码 8、
alter user 'root'@'localhost' IDENTIFIED BY '自己的新密码';
alter user 'root'@'%' IDENTIFIED BY '自己的新密码';
flush privileges;
9、 最后就可以使用新密码进行登录 最后登录成功了
总结
这里面重要的是 1、 在mysqld 下面添加无密码进行登录 2、 在root用户的密码置为空
后取消mysqld下面的跳过密码登录 3、使用无密码登录之后 就修改之前的密码