写在前面
本来以为用docker几分钟就行,结果搞了我2h,必须得形成博客记录下了!
安装步骤
1、拉取镜像
docker pull mysql:5.7
docker images
2、创建mysql容器
-d: 后台运行容器
-p 将容器的端口映射到本机的端口
-v 将主机目录挂载到容器的目录
-e 设置参数
#在本地创建mysql的映射目录
mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf
# 在/root/mysql/conf中创建 *.cnf 文件(叫什么都行) 这边配置文件是有效的,容器删除重启后会根据这个配置文件内容来。
touch my.cnf
# 创建容器,将数据,日志,配置文件映射到本机
docker run -p 3306:3306 --name mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
3、启动测试
docker start mysql #启动容器
# 查看/root/mysql/data目录是否有数据文件。
cd /root/mysql/data
ls
后续(问题)
上面步骤还是蛮清楚的,也算是对的,正常情况下上面这么多命令就够了。
然后我这边docker ps验证mysql容器没启动起来,navicat也连接不上(当然)。
依次有几个问题
1、mysql容器没启动起来
分析:
1、/root/mysql/data目录有文件
2、docker logs -f mysql 查看日志说是inonodb啥的问题,我这边日志也忘记拉取下来的,以前遇到过,忘记怎么解决了。
日志大概是 innodb 128M啥的。启动不成功。百度了一大堆大意就是内存不够。
排查
free -m
我这边一看确实我本机确实只有90多M。
百度了全说的是增加innodb_buffer_pool_size
。我这边对mysql的配置文件不是很了解,但是加了配置还是折腾了很久都不行,甚至改成8M都不行.看docker日志(docker logs -f mysql)还是报错初始化给inonodb加载的128M!头疼的不行!
此时我my.cnf文件如下。
[inonodb]
# 2021年5月23日16:19:33 上面这个[inonodb]不能缺。 这个配置添加了额就是没用但我这边再配置文件里还是不注释掉了!
innodb_buffer_pool_size=64MB
解决
无意中发现了可能是没有添加swap分区内存啥的。这块涉及linux知识也不是很清楚,但总归是解决了,按照下面命令敲了好了。
此时我free -m 能看到第二行swap有值了。
# 添加swap内存
dd if=/dev/zero of=/home/swap bs=1024 count=1024000 #
mkswap /home/swap
/sbin/swapon /home/swap
# 这块是修改配置让云服务器重启后还会分配swap内存
vi /etc/fstab
/home/swap swap swap default 0 0 #在文件末尾加上
2、mysql容器启动成功后本地mysql登录不上,说密码不对
分析
docker exec -it 3a62329426b3 /bin/bash #进入mysql客户端 mysql -u root -p
root/root登不上,这块不知道为什么,安装步骤那边设置了初始密码为root的。
解决
我这边不想去搞为啥了,直接准备修改root用户的密码了。
参考本文最后一段:其他docker下修改mysql的root用户密码(不知道root密码情况下)
后解决了。
3、云服务器本地连接成功后我本机navicat连不上
分析
稍微百度了下想起来了是root账户那边host字段设置的问题,要设置为%。参考问题2解决。
参考博客
- 2021年5月23日17:07:44
完全参考的这个博客。出现问题我自己解决了。
其他
docker下修改mysql的root用户密码(不知道root密码情况下)
写在前面
- 2021年5月23日17:04:03
按照那篇博客docker安装好了。
!我好像忽然明白为啥root登不上了。他那边是直接给的root可能就不是md5.不过我进去后查看密码是空也很奇怪。
反正需要解决了,我现在就要用mysql,百度又耗了很长时间,这次好好记录下来了!
1、正确操作
1.1、修改my.cnf配置文件
我这边完整配置文件如下。应该是只要加skip-grant-tables
这个配置即可,注意加上**[mysqld]**。
一开始参照别人博客加的是[client]不行,会报错。
[mysqld]
skip-host-cache
skip-name-resolve
skip-grant-tables
[inonodb]
# 2021年5月23日16:19:33 上面这个不能缺。 这个配置就是没用但我还是不注释了!
innodb_buffer_pool_size=64MB
2、连接mysql
这边docker进去mysql的。docker exec -it 3a62329426b3 /bin/bash
# 进入mysql的bash界面后输入以下命令完成修改密码!
mysql -u root -p #这个命令输完后还需要输入密码,随便输一个即可进去mysql。
flush privileges; #连接进去后:要先执行这个命令。不然下面update执行后说没权限啥的。
select host,user,authentication_string from mysql.user; #可以先查看下密码及是否是%。我这边很奇怪docker默认密码安装后root密码显示的还是空。
# 注意这边mysql5.7的user表是用的authentication_string这字段。还要用函数转码为md5!
update mysql.user set authentication_string = PASSWORD("root") where user = 'root';
update mysql.user set host = '%' where user = 'root';
flush privileges;
exit;
此时用navicat已经可以root密码连接了!
3、删除配置
这边不删除skip-grant-tables这配置的话。不重启mysql则登录需要输入密码的。
2、实时记录
- 2021年5月23日16:45:03
现在问题是修改为point一点问题没有。但是改成root就不行,navicat访问变成远程不允许了,报错不对的,因为我一改成md5后的point就好了,我host一直是%的。
========================================= 解决===========================================
- 2021年5月23日16:47:07
ok,解决了。下面个才行。MD5那个不对!
select MD5("point");
select PASSWORD("Gepoint")
查看mysql的root账户的密码
1、查看密码是多少
select host,user,authentication_string from mysql.user;
2、去这个网站 https://www.somd5.com/
上可以解析出来
实时记录
-
2021年5月23日16:05:44
哎,还真的好了。百度了2h了,曹!博客全说的是添加innodb_buffer_pool_size=8MB就好,坑1比。
添加了swap内存后。
添加swap内存
-
2021年5月23日15:53:34
至少证明按照博客来弄的,配置修改是起效了。。
-
2021年5月23日15:57:42
真蛋疼了,那证明了就是我配置了这个不起效!而且查看docker logs -f mysql日志那边还是说的初始化128M!
[inonodb] innodb_buffer_pool_size=8MB