我们可以下拉别人的Mysql镜像也可以通过Dockerfile自己构建Mysql镜像,方便起见,我是下拉的docker官方的Mysql镜像
1.使用如下命令查看dockerhub中的所有mysql镜像
docker search mysql
2.官方的mysql镜像的名称为mysql,所以我们输入以下命令进行下拉
docker pull mysql
3.运行一个mysql容器
docker run --name first-mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql
--name 后面是这个镜像的名称
-p 3306:3306 暴露3306端口,表示在这个容器中使用3306端口(第二个)映射到本机的端口号也为3306(第一个)
-e MYSQL_ROOT_PASSWORD=123456 设置root用户密码
-d 表示使用守护进程运行,即服务挂在后台
4.登录容器的mysql,设置访问权限,以及导入一些数据库文件
我们的docker容器中的mysql一般都是需要允许远程连接的,所以我们进行如下设置
docker exec -it first-mysql bash
exec命令 在容器first-mysql中开启一个交互模式的终端
-i 即使没有附加也保持STDIN 打开
-t 分配一个伪终端
连接到容器mysql
mysql -hlocalhost -uroot -p123456
添加一个root用户,主机为%(意为任何主机)
create user 'root'@'%' identified by '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
//创建一个用户,mysql 8 之后要求先创建用户,再授权,而不能在授权时创建用户
create user 'root'@'%' identified by '123456';
//授权用户为超级管理用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
//刷新权限
FLUSH PRIVILEGES;
5.暴露centos服务器的3306端口
开启系统防火墙:
systemctl start firewall.service
开启端口:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
--zone #作用域
--add-port=3306/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
需要重启服务器
firewall-cmd --reload
查看开放的端口:
firewall-cmd --list-ports
到此为止,我们的mysql服务器就创建成功了,我们可以在本地使用 Navicat for MySQL等mysql图形化界面进行连接啦。注意:
1.连接的主机名为centos服务器的ip地址
2.如果mysql的版本为8.0以上,则连接时可能会报1251的错误,这是因为:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。解决方法如下:
//更改用户密码验证方式
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
//刷新更改密码验证方式之后的密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
//刷新权限
FLUSH PRIVILEGES;