Ubuntu22.04下Docker中安装Mysql
1.Docker中拉起最新版本mysql
docker pull mysql
结果出现:
解决方案:配置国内docker镜像源
vi /etc/docker/daemon.json
添加阿里云镜像源:
{ "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com",""https://daocloud.io/""] }
重启命令
systemctl daemon-reload
systemctl restart docker
查看是否配置成功:
docker info
查看docker日志
sudo journalctl -u docker
2.然后在执行拉取mysql镜像
# 重新拉取
docker pull mysql
mkdir /root/heat/mysql/log
mkdir /root/heat/mysql/data
mkdir /root/heat/mysql/conf/
mkdir /root/heat/mysql/mysql-files
# 运行容器
docker run -p 3306:3306 --name mysql --restart=always --privileged=true -v /root/heat/mysql/log/://var/log/mysql -v /root/heat/mysql/data/:/var/lib/mysql -v /root/heat/mysql/conf/:/etc/mysql -v /etc/localtime:/etc/localtime:ro -v /root/heat/mysql/mysql-files/:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 -d mysql :latest
docker run:在docker中启动一个容器实例
-p 3306:3306:指定宿主机端口与容器端口映射关系,容器与主机映射端口为,主机3306,容器3306
--name mysql:容器运行后的名称,创建的容器名称
-f:总是跟随docker启动
--privileged=true:获取宿主机root权限
-v /root/heat/mysql/log:/var/log/mysql:映射日志目录,将容器/var/log/mysql目录下的数据,备份到主机的 /root/heat/mysql/log目录下
-v /root/heat/mysql/data:/var/lib/mysql:映射数据目录,将容器/var/lib/mysql目录下的数据,备份到主机的 /root/heat/mysql/data目录下
-v /root/heat/mysql/conf:/etc/mysql:映射配置目录,将容器/etc/mysql目录下的数据,备份到主机的 root/heat//mysql/conf目录下
-v /etc/localtime:/etc/localtime:ro:让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读。
-v /root/heat/mysql/mysql-files :/var/lib/mysql-files
-e MYSQL_ROOT_PASSWORD=123456:指定mysql环境变量,root用户的密码为123456
-d mysql:latest:后台运行mysql容器,版本是latest(最新版)。
3.配置mysql远程访问
先进入mysql容器中
docker exec -it d1cac8e975c5 bash
进入mysql 中
mysql -uroot -p
输入上文设置密码:123456 进入到mysql
查看user和host
1 | use mysql; |
select host,user from mysql.user;
1 | update user set host= '%' where user= 'root' ; |
确保root的host为%即代表可以远程连接
1 | grant all privileges on *.* to 'root' @ '%' ; |
flush privileges;
退出,然后通过客户端连接就可以了
4.遇到问题
解决方案:
4.1、检查现有的记录:
首先,检查 mysql.user
表中是否已经存在 host
为 %
且 user
为 root
的记录:
SELECT host, user FROM mysql.user WHERE user='root';
4.2、删除冲突的记录
如果确实存在一条记录 host
为 %
且 user
为 root
,你需要先删除它。请确保在删除记录前备份数据库,并确认该操作不会影响数据库的其他部分:
DELETE FROM mysql.user WHERE host='%' AND user='root';
4.3、更新记录
UPDATE mysql.user SET host='%' WHERE user='root';
4.4、刷新权限
FLUSH PRIVILEGES;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!