Docker(二)| 创建MySQL容器并持久化


  1. 下载 mysql 镜像,5.7版本即可。命令:
docker pull mysql:5.7
  1. 创建 mysql 容器并设置挂载持久化和密码root,命令:
docker run -d \
-p 3306:3306 \
--name mysql \
-v /dfdt/data/mysql:/data/mysql \
-v /dfdt/data/mysql/conf:/etc/mysql/conf.d \
-v /dfdt/data/mysql/logs:/logs \
-v /dfdt/data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
  • \:斜杠表示换行
  • -d:守护进程
  • -p 3306:3306:映射主机和容器之间的端口
  • –name mysql:容器别名
  • -v /data/mysql:/data/mysql:挂载/共享主机上的/data/mysql,方便持久化,不至于每次停止mysql容器都丢失数据
  • -e MYSQL_ROOT_PASSWORD=root:设置数据库的密码为:root
  1. 进入 mysql 容器,命令
docker exec -it mysql bash
  1. 设置 utf8 编码格式

登录mysql,命令:

mysql -uroot -p

再输入密码(由于前面初始化设置了,密码就是:root

查看mysql字符集,命令:

show variables like 'character_set_%';

如果是latin1编码格式则需要设置编码格式:

使用dockerfile创建mysql服务 docker创建mysql容器_utf8

如果是以下的utf8则不需要设置编码格式:(不设置编码格式则跳过下面步骤,直接看第8步

使用dockerfile创建mysql服务 docker创建mysql容器_utf8_02

退出mysql,命令:exit

使用dockerfile创建mysql服务 docker创建mysql容器_docker_03

设置编码格式有两种方式:
  • 1.使用echo命令直接写入/etc/mysql/my.cnf文件(前提是确保文件存在且里面的参数不冲突,msyql5.7的版本一般都是空的,直接用就行)
echo -e  '[client]\ndefault-character-set=utf8\n[mysqld]\ncharacter-set-server=utf8\ncollation-server=utf8_general_ci'  > /etc/mysql/my.cnf
  • 2.vim写入方式

设置utf8编码,执行命令:

vi /etc/mysql/my.cnf

然后找到 /etc/mysql/my.cnf 文件,进入编辑,加入下面的配置,如果没有和下面一样的则加上,有则修改

[client]                   
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

如果vim命令不能用,提示:bash: vim: command not found
参考:Docker 问题 | 编辑文件出现 bash: vi: command not found.

  1. 重启mysql,输入下面命令:
service mysql restart

如果一直出现点点点的情况,则Ctrl+C,再Ctrl+D退出容器,如果想退出容器但又不想让容器停止,使用Ctrl+P+Q即可

  1. 这时我们已经回到宿主机上,我们需要再重启mysql容器:
docker stop mysql
docker start mysql
或者
docker restart mysql
  1. 再进入 mysql 容器,并登录mysql查看编码是否改变,参考第4步即可
  2. 导入 sql 脚本,在外面我有个 smart_remmend.sql 的脚本,里面包含创建表结果和导入数据。
sql脚本创建:通过Navicat,选中数据库—>右键—>选择转储SQL文件—>结构和数据

使用dockerfile创建mysql服务 docker创建mysql容器_容器_04

通过Xftp软件放入上面第二步的主机挂载/共享的目录/data/mysql下,然后切换到挂载/目录/data/mysql

使用dockerfile创建mysql服务 docker创建mysql容器_mysql_05


执行命令:

docker cp smart_recommend.sql mysql:/data/mysql

意思是将主机上的smart_recommend.sql文件复制到mysql容器下的/data/mysql目录,因为是挂载/共享目录

导入如果出现这个:data too long for column ‘address’ at row 1
就需要设置编码,这个是因为字段中的值包含中文,重新查看第4步

  1. 登录mysql,命令:
mysql -uroot -p

再输入密码(由于前面初始化设置了,密码就是:root

  1. 执行sql脚本(需要先指定数据库才能执行脚本)
    首先创建名字为smart_recommend的数据库,如果脚本中已经有创建数据库名称的sql命令,直接运行sql脚本即可命令:
create database smart_recommend;

指定smart_recommend数据库,命令:

use smart_recommend;

执行sql脚本,命令:(后面是sql脚本在容器中的路径)

source /data/mysql/smart_recommend.sql
  1. 在Windows上用Navicat登录 mysql 容器
    查看虚拟机ip命令:ip a 端口号:3306
    得到ip和端口,再使用用户名:root,密码:root 登录即可

登录成功后如果看到数据库中的字段里的中文值出现乱码,参考第4步


注意:

如果测试是否持久化,将上面步骤走完后,将mysql容器停止:docker stop mysql,再启动mysql容器:docker start mysql,查看上面导入的数据是否存在即可