Mysql数据库,是时下最流行的关系型数据库管理系统之一。它体积小、速度快、总体拥有成本低,尤其是社区版开源这一特点,因而一般中小型网站都会选择Mysql作为网站数据库。
Docker,是开源的应用容器引擎,可以让开发者将应用打包到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows服务器中,可以让应用实现开箱即用,大大的简化和提高应用部署的效率。
本篇文章主要介绍基于Docker环境下的Mysql安装流程。具体流程如下:
环境信息如下:
服务器:Centos 7 64位
安装用户:root。如果使用普通用户安装,需要使用sudo进行授权。
1.启动Docker
在Linux中Docker作为服务项,直接用系统服务启动命令启动即可。
[root@hong ~]# systemctl start docker
启动一次即可。启动完之后,查看下是否启动成功。
[root@hong ~]# ps -ef | grep docker
以上命令主要查看Docker进程是否存在。
基本上Docker的进程存在就可以证明Docker已经重启好了。也可以进一步验证。输入docker,会输出docker的指令说明。
[root@hong ~]# docker
能看到指令的说明,说明Docker已经成功启动了。
2.下载Mysql镜像
查看本地仓库中是否有mysql镜像。
[root@hong ~]# docker images
该命令列出本地仓库中所有的镜像。
结果显示本地是没有mysql镜像的。所以,需要去Docker中央仓库下载。
Docker官方会将一些应用打包成镜像,存放的Docker的中央仓库(Docker Hub),以供开发者使用。
这里要介绍一个docker的指令:search,从Docker 中心仓库中查找镜像列表。
从中央仓库查询mysql镜像,使用下面的指令:
[root@hong ~]# docker search mysql
STARS表明了镜像的火热程度,也反应了镜像的下载量。OFFICIAL表明是官方发布,而AUTOMATED表明是个人上传到Hub上分享的。我们下载第一个就可以了。
[root@hong ~]# docker pull mysql
pull:下载镜像。
pull指令主要的功能是从仓库中下载镜像。如果不指定镜像版本号,那么就下载latest版本。否则,下载指定版本。比如下载mysql 5.5版本,指令如下:
[root@hong ~]# docker pull mysql:5.5
3.启动Mysql镜像
查看当前仓库中mysql镜像。
[root@hong ~]# docker images | grep mysql
创建镜像mysql映射的宿主机文件目录。
[root@hong ~]# mkdir -p ~/docker/mysql/conf ~/docker/mysql/logs ~/docker/mysql/data
接下来,就可以启动mysql了。启动指令如下:
docker run -p 3306:3306 --name mysql1 -v ~/docker/mysql/conf:/etc/mysql/conf.d -v ~/docker/mysql/logs:/logs -v ~/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=666666 -d mysql
启动成功之后,会返回容器ID。
验证
[root@hong docker]# docker ps | grep mysql
4.配置Mysql远程连接
进入mysql容器
[root@hong docker]# docker exec -it mysql1 /bin/bash
exec:在正在运行的容器中运行命令。
i : 将当前输入连接到容器,建立交互窗口。
t:分配一个伪终端。
注意主机名的改变。进入之前是宿主机,进入之后是容器的ID。
进入容器之后,使用配置时的密码进入。
从官方下载的mysql镜像的root远程和本地的root用户的密码规则和密码都是官方默认的,需要更新本地的。
具体操作如下:
root登陆数据库之后,修改规则:
alter user 'root' identified with mysql_native_password by 'password';
修改远程root用户密码:
alter user 'root'@'%' identified by '666666';
更新权限:
FLUSH PRIVILEGES;
5.测试连接
使用SQLyog进行远程连接。
连接成功。
至此,使用Docker安装mysql已经好了。
6.常见安装问题
6.1.SQLyog连接报Pluging caching_sha2_password could not be loaded
原因:加密规则无法加载。
解决方案:修改成本地方法加密。
root登陆数据库之后,修改规则:
alter user 'root' identified with mysql_native_password by 'password';
更新权限:
FLUSH PRIVILEGES;
6.2.mysql 1045
Access denied for user ‘root’@’xxx.xxx.xxx.xxx’(using pasword:YES)
原因:mysql库中远程root用户,默认的连接密码不是docker启动mysql时设置的密码。
解决:把root密码修改就可以了。
如果需要修改密码, 可以修改:
alter user 'root'@'%' identified by '666666';
如果没生效,可以更新下权限:
FLUSH PRIVILEGES;