Docker安装MySQL8.0
安装MySQL8.0镜像
拉取镜像
sudo docker pull mysql:8.0
查看镜像
sudo docker images
导出镜像
从外网机器下载镜像后,将镜像保存为.tar归档文件导出
-o 输出到的文件
sudo docker save -o mysql8.0.tar mysql:8.0
此时在虚拟机中的“文件”文件夹中可以看见保存的.tar文件,带“锁”标志,ls看该文件是红色
将该.tar文件复制到本地,但需要提高权限
sudo chmod 777 *.tar
此时在虚拟机中的文件文件夹中.tar文件不带“锁”标志,ls看该文件是绿色,可复制到本地,再拷贝到
内网机器中,通过FileZilla工具放入到服务器中。
后续操作同样可能需要提权。
导入镜像
sudo docker load < mysql8.0.tar
创建并运行MySQL容器
sudo docker run
-p 3306:3306
--name=mysql_test
-v /home/mysql:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=******
-d mysql:8.0
-p 3306:3306 将宿主主机的3306端口映射到容器的3306端口
-v /home/mysql:/var/lib/mysql 将宿主主机的/home/mysql路径挂载到容器的/var/lib/mysql路径
-e MYSQL_ROOT_PASSWORD=****** 为超级用户帐户设置密码
哪里存储数据?
- 在主机系统上合适的卷上创建数据目录 /home/mysql。容器内部有 /var/lib/mysql路径
cd /home
sudo mkdir mysql
- 执行上述命令创建容器
- 此时主机系统上的 /home/mysql下有了容器内部有的数据文件
环境变量
启动mysql镜像时,可以通过在命令行中传递一个或多个环境变量来调整MySQL实例的配置docker run
MYSQL_ROOT_PASSWORD
该变量是必需的,指定将为超级用户帐户设置的密码。该root用户默认创建。
MYSQL_USER,MYSQL_PASSWORD
这些变量是可选的,结合使用来创建新用户并设置该用户的密码。该用户将被授予变量指定的数据库的超级用户权限。创建用户需要这两个变量。
不能远程连接访问MySQL
用Navicat数据库管理工具远程连接数据库时,不能远程连接访问MySQL。可能是mysql数据库user表中,用户的host字段配置是不允许当前host访问或者是访问的加密方式不对,旧版的MySQL和新版的密码加密方式不一致。
- 进入容器
sudo docker exec -it mysql_test bash
- 进入MySQL控制窗口,连接数据库
mysql -uroot -p******
- 连接数据库mysql
use mysql;
- 查看所允许的访问地址(localhost表示只能本机访问)
select host, user, plugin from user;
- 修改host地址
update user set host='%' where user='root';
- 这样就可以远程连接了。但是用Navicat连接时会出现访问的加密方式不对的错误,旧版的MySQL和新版的密码加密方式不一致。查看密码加密方式
select host, user, plugin from user;
- 修改密码的加密方式
alter user 'root'@'localhost' identified with mysql_native_password by '用户密码';
# 或
alter user 'root'@'%' identified with mysql_native_password by'用户密码';
- 刷新权限
FLUSH PRIVILEGES;
查看容器是否创建并运行成功
sudo docker ps