docker中建立mysql容器教程

docker 建立mysql容器步骤,以及遇到的问题

1.下载镜像文件
docker pull mysql:5.7
2.创建实例并启动
docker run -p 3306:3306 --name mysql \       # 这里的前一个3306为映射到的本机端口号
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
# 或者不用换行符,写到一行
docker run -p 3307:3306 --name mysql_3 -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
  • 参数说明
  -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
  -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
  -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
  -v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
  -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码

注意:

  • 可能会出现的 问题一
    如果本机的3306端口号被占用了会报错:Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use

这时有两种解决方法:

  1. 杀死3306端口进程
netstat -tanlp # 查看所有已被占用端口和所在进程ID
kill 占用进程的PID # 杀死当前进程
netstat -tanlp # 占用3306端口的进程已被删除
  1. 把 mysql 容器的3306端口映射到本机的其他端口 ,使用阿里云的话记得配置安全组策略
docker run -p 3307:3306 --name mysql   #例如:这里把mysql容器的3306映射到本机的3307端口
  • 问题二
    该容器已经创建了,汇报如下错误
docker: Error response from daemon: Conflict. The container name "/mysql" is already in use by container "6e858425991eb222154753eb20994f27071629949a5ad8fe1ceac47ab8907f48". You have to remove (or rename) that container to be able to reuse that name.

有两种解决办法:

  1. 移除已经在运行的容器,然后重新运行docker
    docker rm “容器的id”
docker rm 6e858425991eb222154753eb20994f27071629949a5ad8fe1ceac47ab8907f4  # 移除掉这个容器,然后重新创建容器并启动,  y
  1. 可以直接重命名,即运行文件的时候,–name 后面不要与报错的名字起一样,重新起个名字。
    就可以运行成功
3.MySQL 配置
vi /mydata/mysql/conf/my.cnf
# 把下面的代码放进去
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
4.通过容器的 mysql 命令行工具连接
docker exec -it mysql mysql -uroot -proot  # 进入到mysql命令行中
5.设置 root 远程访问 – 在mysql命令行中运行下面代码

添加远程访问权限,在下面语句中的*和%号的说明

更改mysql的连接权限将localhost改成%,代表所有ip都可以访问

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;  # 刷新
# 进入mysql
docker exec -it mysql mysql -u [用户名] -p [密码]
# 选择mysql数据库
use mysql;
# 更改root(或其他不一定都是root)用户,host字段值改为 % 
grant all privileges on *.* to 'root'@'%' identified by '你的密码' with grant option;
# 刷新
flush privileges;
# 查看是否更改成功
SELECT user,host FROM mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| root          | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)

# 权限设置,相关连接:https://blog.csdn.net/ichen820/article/details/117130736
6.其他:进入容器文件系统(设置一直启动redis)
docker exec -it mysql /bin/bash   # 进入到mysql容器中
docker update redis --restart=always   # 设置docker启动时它创建的镜像也自动启动(以redis为例)
7.在阿里云上使用docker创建MySQL镜像时,注意配置安全组策略

在阿里云上的linux中,防火墙已经关闭了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值