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%userroot 的记录:

SELECT host, user FROM mysql.user WHERE user='root';

 4.2、删除冲突的记录

如果确实存在一条记录 host%userroot,你需要先删除它。请确保在删除记录前备份数据库,并确认该操作不会影响数据库的其他部分:

DELETE FROM mysql.user WHERE host='%' AND user='root';

4.3、更新记录

UPDATE mysql.user SET host='%' WHERE user='root';

4.4、刷新权限

FLUSH PRIVILEGES;

 

posted @   骑着蚂蚁快跑  阅读(131)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示