前言
为了更好的管理,打算把MySQL、Redis等服务放在虚拟机中统一部署,这样不会因为这些服务的问题影响到系统本身。前段时间正好在看docker相关的内容,打算在虚拟机中通过docker来使用MySQL等服务。
一、下载镜像文件
$ docker pull mysql:5.7
二、查看镜像
$ docker images
三、创建实例并启动
$ docker run -p 3306:3306 --name=mysql57 \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf/:/etc/mysql \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
# 参数说明
--restart=always # 当docker重启时,该容器自动重启
--name mysql # 将容器命名为mysql,后面可以用这个name进行容器的启动暂停等操作
-e MYSQL_ROOT_PASSWORD=123456 # 设置MySQL密码为123456
-d # 此容器在后台运行,并且返回容器的ID
-i # 以交互模式运行容器
-p 3306:3306 # 将容器的3306端口映射到主机的3306端口
-v /data/mysql/log:/var/log/mysql # 将配置文件夹挂载到主机
-v /data/mysql/data:/var/lib/mysql # 将日志文件夹挂载到主机
-v /data/mysql/conf/:/etc/mysql # 将配置文件夹挂载到主机
-e TZ=Asia/Shanghai # 时区设置
四、修改配置
# 进入配置目录
$ cd /data/mysql/conf
# 修改数据库配置
$ vim 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
# 重启 mysql57 容器
$ docker restart mysql57
五、设置启动docker时,即运行mysql
$ docker update mysql --restart=always
六、启动docker容器的时候报错
$ docker start mysql57
Error response from daemon: driver failed programming external connectivity on endpoint mysql57
Error: failed to start containers: mysql57
解决方法:重启docker
$ systemctl restart docker
本地客户端设置远程访问账号
$ docker exec -it mysql bash
$ mysql -uroot -p123456
mysql> grant all privileges on *.* to root@'%' identified by "password";
防火墙设置
# 开放端口:
$ systemctl status firewalld
$ firewall-cmd --zone=public --add-port=3306/tcp --permanent
$ firewall-cmd --reload
# 关闭防火墙:
$ sudo systemctl stop firewalld