前言

基于MySQL的原版镜像做一些个性化配置修改,封装/etc/my.cnf文件到镜像中,并且支持通过环境变量修改innodb_buffer_pool_sizeserver_id以及自动配置innodb_read_io_threadsinnodb_write_io_threads

主要思路:备份并替换默认的docker-entrypoint.sh文件,根据环境变量修改my.cnf,并调用原来的启动文件。

根据CPU核数修改innodb_read_io_threadsinnodb_write_io_threads,核数低于10时使用默认的4,高于10时对半分。

Dockerfile

FROM mysql:8.0.31

ADD docker-entrypoint.sh /usr/local/bin/
# docker-entrypoint_origin.sh是原始的启动文件,只是拷贝出来改了个名字
ADD docker-entrypoint_origin.sh /usr/local/bin/
ADD my.cnf /etc/ ENV MYSQL_INNODB_BUFFER_SIZE=512M
ENV MYSQL_SERVER_ID=100
  • 打包命令
# 版本号的前三位表示基础MySQL版本
docker build -t custom-mysql:8.0.31.1 .

my.cnf

[mysqld]

skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql # custom variables
interactive_timeout = 600
wait_timeout = 600
default-time-zone='+8:00'
collation_server=utf8mb4_general_ci
max_allowed_packet = 32M
lower_case_table_names = 1
max_connections = 3000
innodb_buffer_pool_size = MYSQL_INNODB_BUFFER_SIZE
innodb_read_io_threads = MYSQL_READ_IOTHREADS
innodb_write_io_threads = MYSQL_WRITE_IOTHREADS log_bin = mysql-bin
binlog_format = row
binlog_cache_size = 2M
expire_logs_days = 15
max_binlog_size = 1G server_id = MYSQL_SERVER_ID
gtid_mode = on
enforce_gtid_consistency = on
log-slave-updates = 1
binlog-ignore-db = mysql,information_schema,sys,performance_schema
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 2 # slow query log
log-output=FILE
slow-query-log=1
long_query_time=5
slow_query_log_file=/var/lib/mysql/slow-query.log pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock !includedir /etc/mysql/conf.d/

docker-entrypoint.sh

#!/bin/bash
set -eo pipefail
shopt -s nullglob # custom parameters
if [ -n "$MYSQL_SERVER_ID" ]; then
sed -i "s/MYSQL_SERVER_ID/$MYSQL_SERVER_ID/g" /etc/my.cnf
fi function optimizeIO() {
if [ -n "$MYSQL_INNODB_BUFFER_SIZE" ]; then
sed -i "s/MYSQL_INNODB_BUFFER_SIZE/$MYSQL_INNODB_BUFFER_SIZE/g" /etc/my.cnf
fi # 根据CPU核数自动配置io读写线程数
local cpuCores=$(cat /proc/cpuinfo | grep processor | wc -l)
local iothreads=4
if [ ${cpuCores} -gt 10 ]; then
local iothreads=$((${cpuCores}/2))
fi
sed -i "s/MYSQL_READ_IOTHREADS/${iothreads}/g" /etc/my.cnf
sed -i "s/MYSQL_WRITE_IOTHREADS/${iothreads}/g" /etc/my.cnf
}
optimizeIO # 调用原始的启动脚本
sh /usr/local/bin/docker-entrypoint_origin.sh $@

docker-compose示例

version: "3"
services:
mysql:
image: custom-mysql:8.0.31.1
container_name: mysql
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_INNODB_BUFFER_SIZE=1G
- MYSQL_SERVER_ID=100

[mysql]定制封装MySQL的docker镜像的更多相关文章

  1. 阿里mysql同步工具otter的docker镜像

    https://github.com/dearplain/otter_manager https://github.com/dearplain/otter_node 本人开发的小巧docker镜像,根 ...

  2. 转:如何制作一个定制的 PHP 基础 Docker 镜像(一)

    原文来自于:http://open.daocloud.io/ru-he-zhi-zuo-yi-ge-ding-zhi-de-php-ji-chu-docker-jing-xiang/ 目标:准备一个定 ...

  3. MySQL、MongoDB、Redis数据库Docker镜像制作

    MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

  4. mysql 的 docker 镜像使用

    mysql 的 docker 镜像使用: 下载镜像: docker pull mysql:8.0.14 运行容器: docker run -it -e MYSQL_ROOT_PASSWORD=mypw ...

  5. asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行

    1.构建运行mysql容器,添加数据库user 参考Docker创建运行多个mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html 添加us ...

  6. 【docker】【mysql】docker安装mysql,阿里云docker镜像加速器,docker搜索查看远程仓库上的镜像,docker拉取镜像,查看本地所有镜像,查看容器的运行状况,查看容器的详细信息

    在docker上安装mysql有两种方式 1.通过Dockerfile构建 2.直接在docker hub上拉取镜像安装 =================本篇采用方法2=============== ...

  7. docker部署mysql,nginx,php,并上传镜像到私有仓库

    前言 最近公司准备把现有环境全部搞成容器化,所以笔者就先了解了一下docker,并搞了一搞,并把自己搞的过程记录下来.话不多说直接开干 环境说明 Centos7 Docker version 18.0 ...

  8. 使用 mysql 的 Docker 镜像

    使用 mysql 的 Docker 镜像 前言 之前搞了很多都是手工在操作系统的镜像中安装使用 mysql,作为自己折腾也就算了,作为实际使用实为不妥:Docker最重要的特性就是可扩展性,把各种程序 ...

  9. Docker镜像实战(ssh、systemctl、nginx、tomcat、mysql)

    Docker镜像实战 1.构建ssh镜像 2.构建systemctl 镜像 3.构建nginx镜像 4.构建tomcat镜像 5.构建mysql镜像 1.构建ssh镜像: 创建镜像目录 mkdir / ...

  10. MySQL 官方 Docker 镜像的使用

    首先是pull image,这里我拉取的是5.6.35: $ sudo docker pull mysql:5.6.35 拉下来以后大可以按照官方的说明无脑启动,但是外部无法访问,所以绑定端口: $ ...

随机推荐

  1. map和multimap

    map相对于set区别,map具有键值和实值,所有元素根据键值自动排序,pair的第一个值被称为键值key,pair的第二个值被称为实值value.map也是以红黑树为底层实现机制,根据key进行排序 ...

  2. [Flink] Flink Job运行状态正常,但日志中偶报“FlinkException: The file LOG does not exist on the TaskExecutor.”

    0 序言 Flink : 1.12 job start running time : 2022-12-27 17:40:47 problem throw time : 2023-05-11 16:41 ...

  3. percona-server-rocksdb-8.0.32 安装

    MyRocks是关系型数据库Mysql 基于RocksDB 的存储引擎,一个可嵌入的.持久的键值存储.Percona MyRocks 是集于 Percona Server for MySQL的. Ro ...

  4. 2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码。

    2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码. 答案2023-03-30: 这个程序的主要功能是将 MP2 音频文件解码为 PCM 格式,并输出到 ...

  5. 2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号 0 的弹簧处。若小球在编号为 i 的弹

    2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号 0 的弹簧处.若小球在编号为 i 的弹 ...

  6. 2021-06-03:布尔运算。给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。

    2021-06-03:布尔运算.给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false).1 (true).& (AND). | (OR) 和 ^ (XOR) 符 ...

  7. vue全家桶进阶之路3:Node.js

    Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动.非阻塞式I/O模型, 让JavaScript 运行在服 ...

  8. ADG级联备库环境PSU应用验证

    上篇文章 源端为备库的场景下Duplicate失败问题 我只在中间备库环境应用了PSU,解决了级联备库从中间备库duplicate数据库的问题: 细心的朋友已经发现,因为是备库环境,并没有做数据库执行 ...

  9. Kali系统 连接 Xshell

    1> 进入kali系统,修改ssh配置文件:vi /etc/ssh/sshd_config 2> 将PermitRootLogin without-password修改为:PermitRo ...

  10. Windows常用的 CMD 命令合集

    常用的 CMD 命令合集: 基础命令 dir:列出当前目录中的文件和子目录. cd:更改当前目录.例如,cd Documents 将当前目录更改为 Documents 文件夹. md 或 mkdir: ...