鲲鹏服务器docker部署mysql 8.0.19,及自定义Dockerfile

举报
中电高科 发表于 2020/06/18 11:23:08 2020/06/18
【摘要】 提示:本文的操作是在基础环境搭建完成的基础上进行的,基础环境搭建请参阅上一篇文章:鲲鹏服务器快速部署docker+docker-compose环境:https://bbs.huaweicloud.com/forum/thread-60765-1-1.html或:https://bbs.huaweicloud.com/blogs/176180docker环境搭建完成,可以进行本文的操作。系统环...

提示:本文的操作是在基础环境搭建完成的基础上进行的,基础环境搭建请参阅上一篇文章:


鲲鹏服务器快速部署docker+docker-compose环境:

https://bbs.huaweicloud.com/forum/thread-60765-1-1.html

或:

https://bbs.huaweicloud.com/blogs/176180


docker环境搭建完成,可以进行本文的操作。


系统环境:CentOS 7.6 64bit with ARM


构建mysql 8.0.19镜像

构建准备

 # clone 官方Dockerfile
 git clone https://github.com/mysql/mysql-docker.git
 
 # 进入8.0路径
 cd mysql-docker/8.0
 
 # 修改原版Dockerfile,mysql版本号修改为8.0.19,其他不动
 # mysql版本号修改为8.0.19是我方项目需要,如果需要其版本,请参考执行
 vim Dockerfile
 # 内容如下:
 
 
 # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; version 2 of the License.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 FROM oraclelinux:7-slim
 
 # 版本号改为8.0.19
 ARG MYSQL_SERVER_PACKAGE=mysql-community-server-minimal-8.0.19
 ARG MYSQL_SHELL_PACKAGE=mysql-shell-8.0.19
 
 # Install server
 RUN yum install -y https://repo.mysql.com/mysql-community-minimal-release-el7.rpm \
       https://repo.mysql.com/mysql-community-release-el7.rpm \
   && yum-config-manager --enable mysql80-server-minimal \
   && yum install -y \
       $MYSQL_SERVER_PACKAGE \
       $MYSQL_SHELL_PACKAGE \
       libpwquality \
   && yum clean all \
   && mkdir /docker-entrypoint-initdb.d
 
 # Data Volume
 VOLUME /var/lib/mysql
 
 COPY docker-entrypoint.sh /entrypoint.sh
 COPY healthcheck.sh /healthcheck.sh
 ENTRYPOINT ["/entrypoint.sh"]
 HEALTHCHECK CMD /healthcheck.sh
 EXPOSE 3306 33060
 CMD ["mysqld"]
 

修改完成,保存、退出。

构建镜像

 
 
 # 构建镜像,注意末尾有个空格,还有个.
 docker build -t cehc/mysql-arm:8.0.19 .
 
 # 查看镜像
 docker images
 # cehc/mysql-arm:8.0.19镜像大小438M
 

发布镜像

 
 docker login
 # 输入在docker-hub注册的用户名密码登录
 
 docker tag cehc/mysql-arm:8.0.19 cehc/mysql-arm:8.0.19
 
 docker push cehc/mysql-arm:8.0.19
 # 推送成功
 

说明cehc/mysql-arm:8.0.19镜像已经发布为公共镜像。

测试镜像

 # 测试运行,不挂载数据目录和自定义配置
 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d cehc/mysql-arm:8.0.19
 
 # 查看启动日志
 docker logs -f -t --tail 100 mysql
 
 # 启动成功后,可进入 mysql 容器
 docker exec -it mysql /bin/bash
 
 # 在容器内登录mysql
 mysql -uroot -p
 
 # 查看 lower_case_table_names 参数设置
 mysql> show variables like 'lower%';
 
 # 查看mysql当前时间,检查当前时区
 mysql> select curtime();
 
 # 退出mysql
 mysql> exit;
 
 # 退出容器
 exit
 
 # 停止容器
 docker stop mysql
 # 删除容器
 docker rm mysql
 

实测通过

镜像编排

编排准备

 # 部署前,主机挂载数据盘到/data,准备数据目录
 mkdir -p /data/mysql/conf
 
 cd /data/mysql
 
 mkdir data log run backup mysql-files tmp
 
 chmod -R 777 /data/mysql
 
 chmod -R 644 /data/mysql/conf
 
 # 说明:容器挂载 /data/mysql:/data/mysql 为了方便进行备份/恢复操作
 
 # 根据容器内置my.cnf,编制自定义配置
 vim /data/mysql/conf/my.cnf
 # 内容如下:
 
 

自定义配置my.cnf

 # For advice on how to change settings please see
 # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
 
 [mysqld]
 #
 # Remove leading # and set to the amount of RAM for the most important data
 # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
 # innodb_buffer_pool_size = 128M
 #
 # Remove leading # to turn on a very important data integrity option: logging
 # changes to the binary log between backups.
 # log_bin
 #
 # Remove leading # to set options mainly useful for reporting servers.
 # The server defaults are faster for transactions and fast SELECTs.
 # Adjust sizes as needed, experiment to find the optimal values.
 # join_buffer_size = 128M
 # sort_buffer_size = 2M
 # read_rnd_buffer_size = 2M
 
 # Remove leading # to revert to previous value for default_authentication_plugin,
 # this will increase compatibility with older clients. For background, see:
 # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
 # default-authentication-plugin=mysql_native_password
 skip-host-cache
 skip-name-resolve
 datadir=/var/lib/mysql
 socket=/var/lib/mysql/mysql.sock
 secure-file-priv=/var/lib/mysql-files
 user=mysql
 
 pid-file=/var/run/mysqld/mysqld.pid
 
 # 自定义配置
 # tmpdir=/tmp
 port=3306
 # 默认时区设置为东8区
 default-time_zone='+8:00'
 
 # 默认编码utf8mb4
 character-set-server=utf8mb4
 character-set-client-handshake=FALSE
 collation-server=utf8mb4_general_ci
 init_connect='SET NAMES utf8mb4'
 secure_file_priv=/var/lib/mysql
 default_authentication_plugin=mysql_native_password
 default-storage-engine=INNODB
 # 设置数据库大小写不敏感,根据实际项目需求设置,默认值是0
 lower_case_table_names=1
 
 # 最大连接数,默认设置是100
 max_connections=1000
 # SQL数据包发送的大小,如果有BLOB对象建议修改成1G
 max_allowed_packet=128M
 # MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
 # MySQL默认的 wait_timeout 值为8个小时
 # interactive_timeout 参数需要同时配置才能生效
 interactive_timeout=28800
 wait_timeout=28800
 
 [mysql]
 no-auto-rehash
 default-character-set=utf8mb4
 socket=/var/lib/mysql/mysql.sock
 
 [client]
 default-character-set=utf8mb4
 socket=/var/lib/mysql/mysql.sock
 port=3306
 
 [mysqld_safe]
 log-error=/logs/mysql.log
 pid-file=/var/run/mysqld/mysqld.pid
 socket=/var/lib/mysql/mysql.sock
 
 [mysqldump]
 quick
 socket=/var/lib/mysql/mysql.sock
 
 [mysqladmin]
 socket=/var/lib/mysql/mysql.sock
 

保存、退出。

docker-compose脚本

 
 # 编制docker-compose脚本
 vim docker-compose.yml
 # 内容如下:
 
 
 version: '2'
 services:
   cehc-mysql:
     image: cehc/mysql-arm:8.0.19
     container_name: cehc-mysql
     privileged: true
     restart: always
     ports:
       - 3306:3306
     environment:
       MYSQL_ROOT_PASSWORD: yourpassword # 设置 mysql root 密码
     volumes:
       - /data/mysql:/data/mysql
       - /data/mysql/data:/var/lib/mysql
       - /data/mysql/log:/logs
       - /data/mysql/conf/mysql/my.cnf:/etc/my.cnf
       - /etc/localtime:/etc/localtime:ro
     command: --lower_case_table_names=1 # 注:该设置是我方项目需要
     

保存、退出。

检验编排

 # 后台启动镜像
 docker-compose up -d
 
 # 启动成功后,可进入 mysql 容器
 docker exec -it cehc-mysql /bin/bash
 
 # 在容器内登录mysql
 mysql -u root -p
 # 输入自定义密码
 
 -- 查看数据库
 mysql> show databases;
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | mysql              |
 | performance_schema |
 | sys                |
 +--------------------+
 4 rows in set (0.01 sec)
 
 -- 查看 lower_case_table_names 参数设置
 mysql> show variables like 'lower%';
 +------------------------+-------+
 | Variable_name          | Value |
 +------------------------+-------+
 | lower_case_file_system | OFF   |
 | lower_case_table_names | 1     |
 +------------------------+-------+
 2 rows in set (0.00 sec)
 
 -- 查看是否启用了二进制日志
 mysql> show variables like 'log_bin';
 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | log_bin       | ON    |
 +---------------+-------+
 1 row in set (0.01 sec)
 
 -- 查看二进制日志详细设置
 mysql> show variables like '%binlog%';
 +------------------------------------------------+----------------------+
 | Variable_name                                  | Value                |
 +------------------------------------------------+----------------------+
 | binlog_cache_size                              | 32768                |
 | binlog_checksum                                | CRC32                |
 | binlog_direct_non_transactional_updates        | OFF                  |
 | binlog_encryption                              | OFF                  |
 | binlog_error_action                            | ABORT_SERVER         |
 | binlog_expire_logs_seconds                     | 2592000              |
 | binlog_format                                  | ROW                  |
 | binlog_group_commit_sync_delay                 | 0                    |
 | binlog_group_commit_sync_no_delay_count        | 0                    |
 | binlog_gtid_simple_recovery                    | ON                   |
 | binlog_max_flush_queue_time                    | 0                    |
 | binlog_order_commits                           | ON                   |
 | binlog_rotate_encryption_master_key_at_startup | OFF                  |
 | binlog_row_event_max_size                      | 8192                 |
 | binlog_row_image                               | FULL                 |
 | binlog_row_metadata                            | MINIMAL              |
 | binlog_row_value_options                       |                      |
 | binlog_rows_query_log_events                   | OFF                  |
 | binlog_stmt_cache_size                         | 32768                |
 | binlog_transaction_dependency_history_size     | 25000                |
 | binlog_transaction_dependency_tracking         | COMMIT_ORDER         |
 | innodb_api_enable_binlog                       | OFF                  |
 | log_statements_unsafe_for_binlog               | ON                   |
 | max_binlog_cache_size                          | 18446744073709547520 |
 | max_binlog_size                                | 1073741824           |
 | max_binlog_stmt_cache_size                     | 18446744073709547520 |
 | sync_binlog                                    | 1                    |
 +------------------------------------------------+----------------------+
 27 rows in set (0.00 sec)
 
 -- 查看 log_bin 存储位置
 mysql> show variables like '%log_bin%';
 +---------------------------------+-----------------------------+
 | Variable_name                   | Value                       |
 +---------------------------------+-----------------------------+
 | log_bin                         | ON                          |
 | log_bin_basename                | /var/lib/mysql/binlog       |
 | log_bin_index                   | /var/lib/mysql/binlog.index |
 | log_bin_trust_function_creators | OFF                         |
 | log_bin_use_v1_row_events       | OFF                         |
 | sql_log_bin                     | ON                          |
 +---------------------------------+-----------------------------+
 6 rows in set (0.00 sec)
 
 -- 退出
 mysql> exit;
 

实测通过

构建自定义mysql镜像

在前面操作的基础上集成自定义配置,根据我方项目开发实际需求,构建自定义mysql镜像。

 # 编制自定义脚本
 vim Dockerfile
 # 内容如下:
 
 
 FROM cehc/mysql-arm:8.0.19
 
 MAINTAINER from www.ceht.com.cn by cehc(humengjie@ceht.com.cn)
 
 # 设置编码,防止中文乱码
 ENV LANG C.UTF-8
 # 设置时区
 ENV TZ=Asia/Shanghai
 
 # 添加自定义配置
 RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
   echo -e "\n# 自定义配置\n# tmpdir=/tmp\nport=3306\n# 默认时区设置为东8区\ndefault-time_zone='+8:00'\n\n# 默认编码utf8mb4\ncharacter-set-server=utf8mb4\ncharacter-set-client-handshake=FALSE\ncollation-server=utf8mb4_general_ci\ninit_connect='SET NAMES utf8mb4'\nsecure_file_priv=/var/lib/mysql\ndefault_authentication_plugin=mysql_native_password\ndefault-storage-engine=INNODB\n# 设置数据库大小写不敏感,根据实际项目需求设置,默认值是0\nlower_case_table_names=1\n\n# 最大连接数,默认设置是100\nmax_connections=1000\n# SQL数据包发送的大小,如果有BLOB对象建议修改成1G\nmax_allowed_packet=128M\n# MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭\n# MySQL默认的 wait_timeout 值为8个小时\n# interactive_timeout 参数需要同时配置才能生效\ninteractive_timeout=28800\nwait_timeout=28800\n\n[mysql]\nno-auto-rehash\ndefault-character-set=utf8mb4\nsocket=/var/lib/mysql/mysql.sock\n\n[client]\ndefault-character-set=utf8mb4\nsocket=/var/lib/mysql/mysql.sock\nport=3306\n\n[mysqld_safe]\nlog-error=/logs/mysql.log\npid-file=/var/run/mysqld/mysqld.pid\nsocket=/var/lib/mysql/mysql.sock\n\n[mysqldump]\nquick\nsocket=/var/lib/mysql/mysql.sock\n\n[mysqladmin]\nsocket=/var/lib/mysql/mysql.sock" >> /etc/my.cnf
   
 
 # 构建镜像
 docker build -t cehc/cehc-mysql-arm:8.0.19 .
 

其他操作内容,不再赘述。

以上内容均在北京四区鲲鹏服务器实测通过,供参考。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。