参看:
- 《MySQL必知必会》
- https://my.oschina.net/u/2322202/blog/3090119
说来我真废物啊,刚搭建起docker中的mysql来,还没体验几天远程数据库,密码我给丢了,呜呜呜~
先说环境:MySQL5.7、阿里云Linux内核CentOS8、Docker中启动MySQL。
一、MySQL启动与挂载
挂载的作用: 使得外部Linux有docker中mysql的数据,当内部或外部数据变化的时候,会直接同步到另一处! 比如修改配置文件,直接修改外部的配置文件,就能直接映射到内部中生效。
在docker中,确定mysql中的非系统库及系统库是否有没有挂载
# Start mysql 5.7
docker run \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql1 \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-d mysql:5.7
对上述指令进行分析:
/ # 换行
-p 3306:3306 # 端口映射, Linux端口:容器端口
--name mysql1 # 此容器名称
-e MYSQL_ROOT_PASSWORD=123456 # 修改配置,密码
-d mysql:5.7 # 后台运行mysql5.7
# 把容器内部的 /var/log/mysql 文件挂载到 Linux的/mydata/mysql/log上,Linux中会自动创建此目录
-v /mydata/mysql/log:/var/log/mysql
二、root密码丢失
核心思想:修改配置文件,不需要密码能进入MySQL,之后进行密码重置。下面就是我的解决方法:
注意看上面一项的文件挂载处:-v /mydata/mysql/conf:/etc/mysql
,其中docke内部的MySQL的配置文件夹挂载本地的/mydata/mysql/conf
文件夹下,所以我操作当前Linux系统的这个文件夹,即可实现docker内部的MySQL配置文件修改。(如果挂载到其他目录当然也可以)
# 进入当前的阿里云Linux
# 1.编写my.cnf配置文件(原来没有就会直接创建一个)
cd /
vi /mydata/mysql/conf/my.cnf
# 2.把以下数据写入上述文件中,保存退出
[mysqld]
skip-grant-tables
skip-networking
# 3.重新启动MySQL(mysql1是我启动MySQL时的name命名)
docker restart mysql1;
缓一下,接着看
# 4.进入当前mysql1容器
docker exec -it mysql1 bash;
# 5.进入MySQL
mysql -uroot -p #直接回车,无密码
# 6.刷新权限
flush privileges;
# 7.修改root密码
alter user 'root'@'localhost' identified by '123456';
root用户的密码已经被修改了!
最后,还必须要做的一点是 删除前面的my.cnf配置文件(不删除本地可视化工具连接不了,我也不知道为什么嚄)
cd /
rm mydata/mysql/conf/my.cnf # y表示确认
三、其他用户密码丢失
其他用户密码丢失的话,最直接的方法就是删除此用户在创建一遍,但作为一个合格的开发人员,这样也不是办法,再说了这样做可能会有许多权限相关的配置得重新弄,非常的麻烦。言归正传,重置其他用户的密码。
查看本机用户列表
select user,host from mysql.user;
设置用户名为 pdh
的用户密码
alter user 'root'@'%' identified by '123456';
当然还可以使用其他的指令设置密码,比如使用set,update等,就不一一列举了。
这次我一定痛改前非!密码放在自己的备忘录里!