如何部署Docker MySQL 5.6.34?

Docker

1 基础知识

一个问题,一篇文章,一出故事。
本章将实现Docker MySQL 8.0的部署。

2 最佳实践

2.1 部署Docker集群

如果你尚未部署Docker集群环境,请参阅如下章节部署,

如何部署Oracle Linux 10.x Docker生产集群环境?

2.2 部署前的准备

In hd01,

cd /data/docker/images/
docker load -i mysql:5.6.34.tar
docker tag mysql:5.6.34 hd01.cmdschool.org:5000/mysql:5.6.34
docker push hd01.cmdschool.org:5000/mysql:5.6.34

另外,安装包的离线下载请在能上网的docker环境的机器上使用如下命令,

docker pull mysql:5.6.34
docker save mysql:5.6.34 -o mysql:5.6.34.tar

另外,其他版本请从以下链接下载,
https://hub.docker.com/_/mysql

2.3 部署MySQL

In hd01

2.3.1 创建服务配置文件

In hd01,

vim /data/docker/yml/mysql5.6.34-hd01-stack.yml

加入如下配置,

version: '3.6'
services:
  hd01-mysql:
    image: 'hd01.cmdschool.org:5000/mysql:5.6.34'
    ports:
      - target: 3306
        published: 3306
        protocol: tcp
        mode: host
    environment:
      - 'MYSQL_ROOT_PASSWORD=mysqlpwd'
    volumes:
        - /etc/localtime:/etc/localtime
    command: --default-authentication-plugin=mysql_native_password
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
        max-file: "5"
    deploy:
      replicas: 1
      placement:
        constraints: [node.labels.mysql5.6.34-hd01 == true]

根据配置的需求设置运行标记,
In hd01,

docker node update --label-add mysql5.6.34-hd01=true hd01.cmdschool.org

2.3.2 部署服务

In hd01,

docker stack deploy -c /data/docker/yml/mysql5.6.34-hd01-stack.yml hadoop-platform

2.4 设置MySQL数据本地化

In hd01,

2.4.1 修改服务配置文件

vim /data/docker/yml/mysql5.6.34-hd01-stack.yml

根据配置需求创建MySQL主配置文件,

version: '3.6'
services:
  hd01-mysql:
    image: 'hd01.cmdschool.org:5000/mysql:5.6.34'
    ports:
      - target: 3306
        published: 3306
        protocol: tcp
        mode: host
    environment:
      - 'MYSQL_ROOT_PASSWORD=mysqlpwd'
    volumes:
        - /etc/localtime:/etc/localtime
        - /data/docker/container-data/mysql5.6.34/conf:/etc/mysql
        - /data/docker/container-data/mysql5.6.34/data:/var/lib/mysql
        - /data/docker/container-data/mysql5.6.34/log:/var/log/mysql
    command: --default-authentication-plugin=mysql_native_password
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
        max-file: "5"
    deploy:
      replicas: 1
      placement:
        constraints: [node.labels.mysql5.6.34-hd01 == true]

根据配置的需求,你需要执行如下命令创建本地化文件夹并复制当前的服务配置,

mkdir -p /data/docker/container-data/mysql5.6.34/
docker cp $(docker container ls | grep mysql:5.6.34 | awk '{print $1}'):/etc/mysql /data/docker/container-data/mysql5.6.34/conf

如果是尚未使用的服务,数据库的数据和日志目录可以直接重新创建,

mkdir -p /data/docker/container-data/mysql5.6.34/data
mkdir -p /data/docker/container-data/mysql5.6.34/log

2.4.2 重新部署服务

docker service rm $(docker service ls | grep mysql:5.6.34 | awk '{print $1}')
docker stack deploy -c /data/docker/yml/mysql5.6.34-hd01-stack.yml hadoop-platform

2.5 优化服务参数

2.5.1 进入容器内部测试

In hd01,

vim /data/docker/container-data/mysql5.6.34/conf/conf.d/hadoop.cnf 

加入优化的配置参数,

[mysqld]
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

transaction-isolation = READ-COMMITTED
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links = 0

key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_limit = 8M
query_cache_size = 64M
query_cache_type = 1

max_connections = 550
#expire_logs_days = 10
#max_binlog_size = 100M

#log_bin should be on a disk with enough free space. Replace '/var/lib/mysql/mysql_binary_log' with an appropriate path for your system
#and chown the specified folder to the mysql user.
log_bin=/var/lib/mysql/mysql_binary_log
server-id=1

# For MySQL version 5.1.8 or later. Comment out binlog_format for older versions.
binlog_format = mixed

read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M

# InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit  = 2
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M

2.5.2 重新部署服务

docker service rm $(docker service ls | grep mysql:5.6.34 | awk '{print $1}')
docker stack deploy -c /data/docker/yml/mysql5.6.34-hd01-stack.yml hadoop-platform

2.6 测试MySQL服务

2.6.1 进入容器内部测试

In hd01,

docker exec -it $(docker container ls | grep 'mysql:5.6.34' | awk '{print $1}') bash

然后,我们使用如下命令登录数据库,

mysql -uroot -p'mysqlpwd'

可使用如下命令查看当前的库,

show databases;

2.6.2 物理主机安装MySQL客户端测试

In hd01,

sudo yum install -y mariadb

登录数据库

mysql -uroot -p -h'mysqlpwd' hd01.cmdschool.org

参阅文档
=====================

官方参阅
————
https://hub.docker.com/_/mysql
https://hub.docker.com/_/adminer

文件兼容性参考
————–
https://docs.docker.com/compose/compose-file/

没有评论

发表回复

Docker
如何熟悉Volcano GPU批量调度框架?

1 基础知识 1.1 Volcano的介绍 – Volcano中文翻译为火山 &#821 …

Docker
如何部署Docker EMQX(MQTT)社区版集群?

1 基础知识 管理理论知识,我建议你可以参考如下章节, 如何部署EMQX(MQTT)社区版集群? 2 …

Docker
如何部署Docker MySQL 8.0?

1 基础知识 一个问题,一篇文章,一出故事。 本章将实现Docker MySQL 8.0的部署。 2 …