使用 docker 一键部署 MySQL

目录

[1. 前期准备](#1. 前期准备)

[2. 导入镜像](#2. 导入镜像)

[3. 创建部署脚本文件](#3. 创建部署脚本文件)

[4. MySQL 服务器配置文件模板](#4. MySQL 服务器配置文件模板)

[5. 执行脚本创建容器](#5. 执行脚本创建容器)

[6. 后续工作](#6. 后续工作)

[7. 基本维护](#7. 基本维护)


1. 前期准备

新部署前可以从仓库(repository)下载 MySQL 镜像,或者从已有部署中的镜像生成文件:

复制代码
# 查看当前本地镜像
docker images
# 生成本地镜像文件
docker save <IMAGE ID> -o mysql_8023.tar

2. 导入镜像

复制代码
# 在新部署的机器上导入镜像
docker load -i mysql_8023.tar
docker images

3. 创建部署脚本文件

mysql-deploy.sh 文件内容如下:

复制代码
#!/bin/bash

# 生成目录
mkdir -p /usr/local/docker/mysql/mysql-files
mkdir -p /usr/local/docker/mysql/conf
mkdir -p /usr/local/docker/mysql/logs
mkdir -p /usr/local/docker/mysql/data

# 将配置文件复制到相应目录
cp /root/my.cnf.template /usr/local/docker/mysql/conf/my.cnf

# 修改属主
chown -R polkitd:root /usr/local/docker/mysql/

# 创建容器
docker run -p 3306:3306 \
    -v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
    -v /usr/local/docker/mysql/conf:/etc/mysql \
    -v /usr/local/docker/mysql/logs:/var/log/mysql \
    -v /usr/local/docker/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    --name mysql \
    --restart=always \
    -e TZ=Asia/Shanghai \
    -d cbe8815cbea8

4. MySQL 服务器配置文件模板

my.cnf.template 文件内容如下:

复制代码
[mysqld]
max_allowed_packet = 1G
explicit_defaults_for_timestamp=0
lower_case_table_names=1
log_timestamps=SYSTEM
sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
binlog_expire_logs_seconds=259200
secure_file_priv=''
log_bin_trust_function_creators=on
character-set-server = utf8mb4
default_authentication_plugin=mysql_native_password
datadir=/var/lib/mysql/
socket=/var/run/mysqld/mysqld.sock

wait_timeout=30
innodb_buffer_pool_size = 4G
max_connections = 1000

default-time-zone = '+8:00'

port = 3306
skip-name-resolve 

innodb_print_all_deadlocks=1
log_output='table'

server-id = 2955

innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120

gtid-mode = off

local_infile=0
log_error='/var/lib/mysql/master.err'
skip_symbolic_links=yes

[mysqldump]
quick
max_allowed_packet = 1G

[mysqld_safe]
open-files-limit = 8192

5. 执行脚本创建容器

复制代码
./mysql-deploy.sh

6. 后续工作

复制代码
# 进入容器
docker exec -it mysql /bin/bash
# 登录 MySQL
mysql -uroot -proot -S /var/lib/mysql/mysqld.sock
# 创建用户
create user dba identified by '123456';
grant all on *.* to dba with grant option;

7. 基本维护

复制代码
# 查看镜像
docker images
# 查看容器
docker ps
# 查看容器详细信息
docker inspect <CONTAINER ID>
# 重启容器
docker restart mysql
# 停止容器
docker stop mysql
# 删除容器
docker rm mysql
相关推荐
小白考证进阶中3 分钟前
0基础可以考MySQL OCP么?备考时间需要多久?
数据库·mysql·开闭原则
努力奋斗的小杨20 分钟前
学习MySQL的第十二天
数据库·笔记·学习·mysql·navicat
cherishSpring27 分钟前
在windows使用docker打包springboot项目镜像并上传到阿里云
spring boot·docker·容器
LKAI.32 分钟前
k8s存储动态供给StorageClass
docker·微服务·云原生·容器·kubernetes
苹果酱05671 小时前
【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?
java·vue.js·spring boot·mysql·课程设计
tcoding1 小时前
《MySQL 技术内幕-innoDB 存储引擎》笔记
数据库·笔记·mysql
马武寨山的猴子2 小时前
【MinerU】:一款将PDF转化为机器可读格式的工具——RAG加强(Docker版本)
人工智能·docker·容器·pdf·rag
高峰君主3 小时前
「Docker已死?」:基于Wasm容器的新型交付体系如何颠覆十二因素应用宣言
docker·容器·wasm
uncofish3 小时前
springboot不连接数据库启动(原先连接了mysql数据库)
数据库·spring boot·mysql
宛如昨晚没早睡3 小时前
MVCC(多版本并发控制)
mysql