文章目录
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
这时有两种解决方法:
- 杀死3306端口进程
netstat -tanlp # 查看所有已被占用端口和所在进程ID
kill 占用进程的PID # 杀死当前进程
netstat -tanlp # 占用3306端口的进程已被删除
- 把 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.
有两种解决办法:
- 移除已经在运行的容器,然后重新运行docker
docker rm “容器的id”
docker rm 6e858425991eb222154753eb20994f27071629949a5ad8fe1ceac47ab8907f4 # 移除掉这个容器,然后重新创建容器并启动, y
- 可以直接重命名,即运行文件的时候,–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中,防火墙已经关闭了