docker启动MySQL
- 在dockerhub上搜索mysql,查看要使用的版本
- 下载对应tag镜像 docker pull mysql:5.7
- 运行mysql
docker run --name yek-mysql -e MYSQL_ROOT_PASSWORD=root -p 13306:3306 -d mysql:5.7
- 使用用户名密码: root root ,连接mysql主机 13306端口
- 注意事项:
使用 docker stop yek-mysql后再run启动报错
使用命令 docker ps -l 或者 docker ps -a 存在以下容器
使用 docker rm xxxx 删除后再 run 就可以了。
** 启动/停止/删除已存在容器 docker start/stop/rm xxxx容器名。
问题总结
一、 SQL脚本初始化问题:
- 原理:
当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