学而实习之 不亦乐乎

Docker 部署 MySQL

2024-03-02 19:28:35

1.创建数据目录

这里在系统中创建目录用于挂载到容器,方便管理并避免数据丢失的问题。

首先在docker仓库中搜索mysql的镜像并下载

# docker search mysql  
... ...
# docker pull mysql

查看本地镜像

# docker images -a

启动 mysql 容器,并进入 shell 命令交互界面:

# docker run -it mysql /bin/bash

查看 docker 容器中 mysql 的配置文件,并根据配置文件来创建本地目录,用于挂载到容器。一般配置文件位于 /etc/my.cnf

最好根据此配置文件中的配置来进行创建和挂载。免得出问题。

创建mysql的配置文件(-p为如果父目录不存在则自动创建)

# mkdir -p /usr/local/dockerdata/mysql/conf

创建mysql的日志文件

# mkdir /usr/local/dockerdata/mysql/logs

创建mysql的数据文件

# mkdir /usr/local/dockerdata/mysql/data

2.创建配置文件

# vi /usr/local/dockerdata/mysql/conf/my.cnf

可以直接复制容器中配置文件到本机,减少出错的概率,操作如下:

# docker cp mysql:/etc/my.cnf /usr/local/dockerdata/mysql/conf/

一切准备妥当,可以删除刚才生成的容器,因为下面将要生成一个正式的容器。

3.创建并启动容器

# docker run --restart always -p 3306:3306 --name mysql -v /usr/local/dockerdata/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/dockerdata/mysql/logs:/logs -v /usr/local/dockerdata/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:5.7

解释说明:

  • –restart always 重启docker时自动重启相关容器
  • -p 3306:3306 将容器的3306端口映射到主机的3306端口
  • –name mysql 启动后的容器名称为mysql
  • -v /usr/local/dockerdata/mysql/conf/my.cnf:/etc/mysql/my.cnf 将主机/usr/local/dockerdata/mysql/conf/my.cnf文件挂载到容器的/etc/mysql/my.cnf(配置文件)
  • -v /usr/local/dockerdata/mysql/logs:/logs 将主机/usr/local/dockerdata/mysql/logs目录挂载到容器的/logs(日志)
  • -v /usr/local/dockerdata/mysql/data:/var/lib/mysql 将主机/usr/local/dockerdata/mysql/data目录挂载到容器的/var/lib/mysql(数据文件)
  • -e MYSQL_ROOT_PASSWORD=123456 初始化root用户的密码为123456
  • -e TZ=Asia/Shanghai 指定时区为亚洲-上海
  • -d mysql:5.7 后台运行

4.查看启动的容器

# docker ps

5.进入mysql容器中

# docker exec -it mysql /bin/bash

6.登录mysql,设置mysql数据库的默认字符集为utf8

# mysql -uroot -p --default-character-set=utf8

执行后需输入数据库密码123456,再按回车

7.设置root用户在任何地方进行远程登录,并具有所有库的任何操作权限

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

8.刷新权限

mysql> FLUSH PRIVILEGES;

9.退出mysql

mysql> exit

10.退出容器并测试

使用 MySQL 客户端连接工具,输入mysql数据库用户名root,输入mysql数据库密码:123456,输入端口3306,点击测试连接