Docker部署MySQL镜像的保姆级教程
作者:大饼酥
docker是一种容器化技术,可以将应用程序及其依赖项打包成一个独立的可移植容器,mysql是一个流行的关系型数据库管理系统,在Docker中部署MySQL镜像可以方便地创建和管理MySQL数据库实例,本文给大家介绍了Docker部署MySQL镜像的教程,需要的朋友可以参考下
1、安装Docker
Docker的安装可参考:如何在Ubuntu安装docker以及一些常见报错
2、创建挂载目录
# 创建宿主机mysql挂载目录 sudo mkdir -p /data/docker/mysql/config
3、准备配置文件
# 1.创建配置文件 sudo touch /data/docker/mysql/config/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 # === 日志相关 === ## >>> 错误日志 # 错误日志存放文件,默认 datadir 目录下 log_error=/var/log/mysql/log-error.log # 开启事务中所有死锁的InnoDB信息记录在错误日志中 innodb_print_all_deadlocks=ON ## >>> 二进制日志 # 二进制日志文件基础名称以及路径,默认 datadir 目录下 log_bin=/var/log/mysql/log-bin ## >>> 慢查询日志 # 开启慢查询日志,默认OFF,建议开发和测试环境开启 slow_query_log=ON # 慢查询日志文件位置 slow_query_log_file=/var/log/mysql/log-slow.log # 慢查询时间阈值,默认10,单位:秒 long_query_time=10 [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8mb4
4、运行MySQL容器
# 1.拉取镜像 sudo docker pull mysql:8.0.40 # 2.启动镜像 sudo docker run --privileged=true --net=bridge \ -p 3306:3306 \ --name mysql \ -v /data/docker/mysql/data:/var/lib/mysql \ -v /data/docker/mysql/config:/etc/mysql/conf.d \ -v /data/docker/mysql/log:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=root@123 \ -e TZ=Asia/Shanghai \ -d mysql:8.0.40
参数解析如下:
参数 | 参数说明 |
docker run | 运行 Docker 容器 |
--name mysql | 设置容器的名称为mysql |
-d mysql:8.0.40 | 后台运行mysql容器 |
--privileged=true | Docker会赋予容器几乎与宿主机相同的权限 |
--net=bridge | 网络模式配置,默认是bridge,bridge表示使用容器内部配置网络 |
-p 3306:3306 | 将主机的 3306 端口映射到容器的 3306 端口 |
-e MYSQL_ROOT_PASSWORD=root@123 | 设置 mysql 的管理员账号密码为 root@123 |
-e TZ=Asia/Shanghai | 设置容器的时区为上海时间,便于处理时间相关的数据 |
-v /data/docker/mysql/data:/var/lib/mysql | 将主机data目录挂载到容器内,用于数据持久化 |
-v /data/docker/mysql/log:/var/log/mysql | 将主机log目录挂载到容器内,用于日志文件持久化 |
-v /data/docker/mysql/config:/etc/mysql/conf.d | 将主机中 /data/docker/mysql/config 目录映射到容器内的 /etc/mysql/conf.d 目录,这样可以提供自定义的 mysql 配置文件 |
5、Compose运行MySQL容器
创建docker-compose.yml文件
sudo touch /data/docker/mysql/docker-compose.yml
文件内容如下:
version: '3' services: mysql: image: mysql:8.0.40 container_name: mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root@123 TZ: Asia/Shanghai volumes: - /data/docker/mysql/data:/var/lib/mysql - /data/docker/mysql/config:/etc/mysql/conf.d - /data/docker/mysql/log:/var/log/mysql privileged: true network_mode: "bridge"
运行容器
#-f:调用文件,-d:开启守护进程 sudo docker compose -f /data/docker/mysql/docker-compose.yml up -d
6、查看MySQL运行状态
7、常见问题
7.1、用DBeaver 连接数据库的时候出现Public Key Retrieval is not allowed
解决方案:连接设置 - 驱动属性 ,找到allowPublicKeyRetrieval,把allowPublicKeyRetrieval的值设为 切换为 true 即可。
以上就是Docker部署MySQL镜像的保姆级教程的详细内容,更多关于Docker部署MySQL镜像的资料请关注脚本之家其它相关文章!