- 拉取指定版本的镜像
docker pull mysql:8.0 - 查看下载的镜像
命令:docker images
- 使用root用户创建实例并启动mysql
参数说:docker run -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=iamp@1234 \ -v /mydata/mysql8/data:/var/lib/mysql-files:rw \ -v /mydata/mysql8/log:/var/log/mysql:rw \ -v /mydata/mysql8/etc/localtime:/etc/localtime:ro \ -v /mydata/mysql8/config/my.cnf:/etc/mysql/my.cnf:rw \ --name mysql8 --restart=always -d mysql:8.0
-p 3306:3306 表示将容器(创建的mysql容器)的3306端口映射到主机(centos7)的3306端口
-v /mydata/mysql/conf:/etc/mysql 将配置文件夹挂载到主机(前一个是宿主机目录,后一个是镜像容器目录)
-v /mydata/mysql/log:/var/log/mysql 将日志文件夹挂载到主机(前一个是宿主机目录,后一个是镜像容器目录)
-v /mydata/mysql/data:/var/lib/mysql 将配置文件夹挂载到主机(前一个是宿主机目录,后一个是镜像容器目录)
-e MYSQL_ROOT_PASSWORD=root 初始化root用户的密码
--name mysql 为容器指定名称为mysql
-d mysql:5.7 后台运行名称为mysql,版本为5.7的镜像
注意:
上面-v挂载的文件夹内容,镜像容器都会同步到centos7对应的挂载目录/mydata/mysql/下,可以到centos7环境中查看,
修改centos7环境中对应目录下的配置文件,mysql对应的挂载目录文件也会变化
- 出现问题
Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused "container init exited prematurely"
原因:参考百度给出的原因为 linux 与 docker 版本的兼容性问题,可以尝试重新安装 docker - 查看正在运行的镜像容器
- 修改mysql的字符编码
#是否对sql语句大小写敏感,1表示不敏感这一段最好加上,否则后面无法修改,只能在数据库初始化的时候制定好
lower_case_table_names = 1
跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置
skip-character-set-client-handshake=1 - 重启mysql
docker restart mysql8 - 设置容器开机自动启动
docker update mysql8 --restart=always - my.cnf内容案例如下
[mysqld]
# 设置3306端口
port=3306
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
lock_wait_timeout = 3600
#内部内存临时表的最大值。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 64M
max_heap_table_size = 64M
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
10、可能出现的问题
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/mydata/mysql8/etc/localtime" to rootfs at "/etc/localtime": mount /mydata/mysql8/etc/localtime:/etc/localtime (via /proc/self/fd/6), flags: 0x5001: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
解决方案:
原因是centos7.9中/mydata/mysql8/etc/localtime是一个文件夹,而不是一个文件,执行如下命令:
echo 'Asia/Shanghai' > //mydata/mysql8/etc/localtime
再次执行上面docker创建mysql的命令
11、远程一直联不上mysql,进入容器就可以连上,可能是net.ipv4.ip_forward问题,开启路由即可
echo “net.ipv4.ip_forward = 1” >>/etc/sysctl.conf #将命令写入到/etc/sysctl.conf文件中
sysctl -p #加载内核
sysctl net.ipv4.ip_forward #再次查看路由是否开启