Docker 部署 mysql 及常见问题总结

docker启动MySQL

  1. 在dockerhub上搜索mysql,查看要使用的版本

Docker 部署 mysql 及常见问题总结_第1张图片

  1. 下载对应tag镜像 docker pull mysql:5.7
  2. 运行mysql

docker run --name yek-mysql -e MYSQL_ROOT_PASSWORD=root -p 13306:3306 -d mysql:5.7

  1. 使用用户名密码: root root ,连接mysql主机 13306端口
  2. 注意事项:

使用 docker stop yek-mysql后再run启动报错

使用命令 docker ps -l 或者 docker ps -a 存在以下容器

使用 docker rm xxxx 删除后再 run 就可以了。

** 启动/停止/删除已存在容器 docker start/stop/rm xxxx容器名。

问题总结

一、 SQL脚本初始化问题:

  1. 原理:

当Mysql容器首次启动时,会在 /docker-entrypoint-initdb.d目录下扫描 .sh,.sql,.sql.gz类型的文件。如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照文件名字母顺序执行。默认情况下它们会初始化在启动容器时声明的 MYSQL_DATABASE变量定义的数据库中,例如下面的命令会初始化一个REGION_DB 数据库:

docker run --name yek-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=yek_test -p 13306:3306 -d mysql:5.7.26

如果没有指定数据库需要在脚本中添加创建和使用数据库语句:

drop database if exists yek_test;

CREATE DATABASE ` yek_test ` CHARACTER SET utf8 COLLATE utf8_general_ci;

use ` yek_test `;

二、 Mysql镜像挂载本地目录保存数据:

    镜像中保持数据目录/var/lib/mysql,只需添加docker 参数:-v "$PWD"/data:/var/lib/mysql

三、 Mysql中文乱码问题:

    在mysql配置文件mysql.cnf 中添加参数:

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

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

可直接挂载到容器中,添加docker命令参数 -v "$PWD"/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf

注意该文件权限过高会导致失效,推荐修改为:chmod 444 mysqld.cnf

 

四、 使用docker命令执行容器外sql文件

    docker exec -i yek-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < db.sql

 

你可能感兴趣的:(docker,mysql)