标签: MySQL

  • 使用Docker Compose部署NextCloud和WordPress

    一、全局配置

    name: lnmp
    services:
      caddy:
        image: caddy:latest
        volumes:
          - ./www:/var/www/html
          - ./caddy/etc:/etc/caddy
          - ./caddy/data:/data
          - ./caddy/config:/config
        ports:
          - 80:80
          - 443:443/tcp
          - 443:443/udp
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: 3
        restart: always
    
      redis:
        image: redis:latest
        volumes:
          - ./redis/config:/etc/redis
          - ./redis/data:/data
        restart: always
        command: /etc/redis/redis.conf
    
      mysql:
        image: mysql:latest
        volumes:
          - ./mysql/config:/etc/mysql
          - ./mysql/data:/var/lib/mysql
          - ./mysql/mysql-files:/var/lib/mysql-files
        cap_add:
          - SYS_NICE
        security_opt:
          - seccomp:unconfined
        environment:
          MYSQL_ROOT_PASSWORD: password
        ports:
          - 3306:3306
        restart: always
    
      php:
        build: ./php
        volumes:
          - ./php/config:/usr/local/etc
          - ./php/logs:/var/log/php
          - ./www:/var/www/html
        depends_on:
          - caddy
          - mysql
          - redis
        cap_add:
          - SYS_PTRACE
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: 3
        restart: always
    
      imaginary:
        image: nextcloud/aio-imaginary:latest
        restart: always
        command: -concurrency 2 -enable-url-source
        environment:
          - PORT=9000

    1. PHP

    PHP官方的镜像启用和安装的扩展比较少,直接使用会导致WordPress和Nextcloud的健康检查一堆信息,所以使用Dockerfile来基于官方镜像构建一个专用的镜像,PHP需要的扩展包括:

    • gd(png/jpeg/gif/webp/avif)
    • imagick
    • opcache(考虑性能)
    • apcu(Nextcloud的本地缓存)
    • zip(影响WordPress插件安装)
    • redis(WordPress的对象缓存和Nextcloud的分布式缓存)
    • gmp
    • intl
    FROM php:8.2-fpm-alpine
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
        apk add --no-cache --update --virtual .build-deps \
        $PHPIZE_DEPS \
        icu \
        && apk add --no-cache --virtual .php-deps \
        imagemagick-dev \
        imagemagick-svg \
        libzip-dev \
        libpng-dev \
        libavif-dev \
        icu-dev \
        gmp-dev \
        libjpeg-turbo-dev \
        freetype-dev \
        && apk add --no-cache --virtual .tools-deps \
        git \
        openssh-client \
        unzip \
        && apk add --no-cache --virtual .runtime-deps \
        libzip \
        libpng \
        libavif \
        libjpeg-turbo \
        freetype \
        && pecl install https://pecl.php.net/get/imagick-3.7.0.tgz https://pecl.php.net/get/redis-6.0.2.tgz apcu \
        && docker-php-ext-configure intl \
        && docker-php-ext-configure gd \
          --with-freetype=/usr/include/ \
          --with-jpeg=/usr/include/ \
          --with-avif=/usr/include/ \
        && docker-php-ext-install zip gd pdo_mysql pcntl mysqli exif intl gmp bcmath sysvsem && docker-php-ext-enable zip gd pdo_mysql mysqli opcache exif intl gmp bcmath pcntl sysvsem imagick redis apcu

  • MySQL配置及优化

    一、配置项及意义

    配置项意义建议
    innodb_buffer_pool_size控制 InnoDB 存储引擎的内存缓存池大小总内存(非专用服务器可以使用希望分配给数据库的内存量)的 50% 到 80%
    innodb_buffer_pool_chunk_size InnoDB 缓冲池大小调整操作的块大小,默认值为 128MBinnodb_buffer_pool_size = innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
    innodb_buffer_pool_instances决定了 InnoDB 缓冲池(Buffer Pool)的实例数量设置为 CPU 核心数的较小倍数,超过 1GB 时可以适量增加,最高不超过1000
    innodb_buffer_pool_in_core_file从核心文件中排除缓冲池页面,参考15.8.3.7 从核心文件中排除缓冲池页面_MySQL 8.0 参考手册off
    innodb_flush_log_at_trx_commit定义了事务提交时,InnoDB 如何处理未刷入(flush)的重做日志(redo log),默认值为1,设置为0/2,在操作系统崩溃或断电时可能会丢失最后一秒的事务数据对于需要高可靠性和数据完整性的系统设置为 1,对于性能要求更高,且可以接受一定数据丢失风险的系统设置为 0 或 2。
    innodb_change_buffering控制着 InnoDB 执行变更缓冲(Change Buffering)的程度none
    innodb_log_buffer_size设置InnoDB日志缓冲区的大小64m
    innodb_flush_method决定了 InnoDB 如何将数据和日志刷新(flush)到磁盘O_DIRECT
    innodb_purge_threads定义了用于回收不再需要的 UNDO 日志的 Purge 线程的数量cpu > 4 ? 4 : 1
  • MySQL创建分区表相关

    背景:一个记录表,类似日志的信息,查询大量集中在某个用户个人的数据,分区需要尽量保证一个人的数据在一个分区里。因此采用通过user_id进行hash分区的方式。

    (更多…)
  • MySQL多层级树形结构表的搜索查询优化

    业务中有思维导图的功能,涉及到大量的树形结构搜索、查询相关的功能,使用场景上查询量远高于增删改操作,记录一下当前的解决方案。

    (更多…)
  • MySQL给已存在的主键字段添加自增AUTO_INCREMENT

    每次都记不起来,记录一下…

    # 添加自增约束
    alter table table_name modify column COLUMN_NAME COLUMN_TYPE auto_increment;
    # 配置自增起始值
    alter table table_name auto_increment=10000;
  • MySQL常用SQL语句

    记录一些常用的MySQL语句,方便查找翻阅。

    (更多…)
  • MySQL8 GTID双主配置

    记录一下MySQL8中配置GTID双主的方式。

    (更多…)