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
use mysql;
select host,user from mysql.user;
update user set host='%' where user='root';

确保root的host为%即代表可以远程连接
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;
浙公网安备 33010602011771号