一、查看可用版本
docker search mysql
或访问 MySQL 镜像库地址
https://hub.docker.com/_/mysql?tab=tags
latest为最新版本
二、拉取 MySQL 镜像
docker pull mysql:latest
docker pull mysql:8.0.33
三、运行容器
运行容器前先创建挂载配置文件和数据库文件用的文件夹mysql01、mysql01/conf(存放数据库配置文件)、mysql01/data(存放数据库文件)
运行容器:
docker run -itd --name mysql01 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -v /home/xxx/mysql01/conf:/etc/mysql/conf.d -v /home/xxx/mysql01/data:/var/lib/mysql mysql:8.0.33
参数说明:
-p 3307:3306 :映射容器服务的 3306 端口到宿主机的 3307 端口,外部主机可以直接通过 宿主机ip:3307 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=root:设置 MySQL 服务 root 用户的密码。
mysql也可写成mysql:8.0.33:使用的镜像和版本号
-v /home/xxx/mysql01/conf:/etc/mysql/conf.d:映射数据库配置文件
-v /home/xxxxx/mysql01/data:/var/lib/mysql mysql:映射数据库文件,为了保证容器被删除数据不会消失
查看是否安装成功
docker ps -a
四、连数据库报错:
Error No. 1251
client does not support authentication protocol requested by server;
consider upgrading MySQL client
原因:
mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,
解决方法:
把mysql用户登录密码加密规则还原成mysql_native_password
查看容器id:
docker ps -a
进入容器:
docker exec -it a9f4283fec00 /bin/bash
通过 root 和密码 root 访问 MySQL 服务
mysql -h localhost -u root -p
查看用户信息
select host,user,plugin,authentication_string from mysql.user;
host为 % 表示不限制ip,localhost表示本机使用,plugin非mysql_native_password 则需要修改密码
重置密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
8.4版本之后会报错:ERROR: 1524: Plugin ‘mysql_nativate_password‘ is not loaded
五、进入容器后中文乱码
使用env LANG=C.UTF-8避免容器中显示中文乱码
docker exec -it a9f4283fec00 env LANG=C.UTF-8 /bin/bash
六、其他命令
通过 root 和密码 root 访问 MySQL 服务
mysql -h localhost -u root -p
查看ubuntu中是否安装过mysql
dpkg -l | grep mysql
查看mysql当前端口号
show global variables like 'port';
可以使用容器名代替容器id访问容器,例如:
docker exec -it mysql01(容器名) env LANG=C.UTF-8 /bin/bash
删除文件夹sudo rm -r xxx