【MySQL】基于CentOS7.x基础镜像用MySQL8.x二进制包构建MySQL镜像

39 篇文章 2 订阅
39 篇文章 0 订阅

关于CentOS7.x和CentOS8.x编译工具的版本差异

 

CentOS7.x 

# yum -y install gcc gcc-c++ make

# gcc --version

# g++ --version

# cmake --version

 

CentOS8.x

# yum -y install gcc gcc-c++ make

# gcc --version

# g++ --version

# cmake --version

 

MySQL 8.x 的编译依赖cmake 3.5.1及以上版本,GCC 5.3及以上版本。

因此,不要用CentOS8 以下的系统编译MySQL8,会存在各个工具版本不够高的各种报错,非常麻烦。

 

基于这个原因,如果要用CentOS7.x基础镜建+MySQL8.x的组合我们有如下两种方式:

1. 找一个CentOS8.x 的系统,将MySQL8.x 编译好,将编译好的包打进CentOS7.x 基础镜像,构建MySQL镜像

2. 以用MySQL8.x二进制包(不用编译,二进制包官方已经编译好了)构建MySQL镜像,无需编译

 

 

 

基于CentOS7.x基础镜像用MySQL8.x二进制包构建MySQL镜像

 

#  mkdir /root/mysql8.0.18-docker 

#  cd  /root/mysql8.0.18-docker

 

# wget  -O   gosu  https://github.com/tianon/gosu/releases/download/1.7/gosu-amd64

# chmod  +x  gosu

 

#  wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz  

#  tar  -Jxf  mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz

#  mv   mysql-8.0.18-linux-glibc2.12-x86_64   mysql

# tar -zcf  mysql-8.0.18-bin.tar.gz   mysql

 

 

# cat  Dockerfile

################################################################

FROM centos:centos7.5.1804

ADD  mysql-8.0.18-bin.tar.gz /usr/local

RUN echo "sslverify=0" >> /etc/yum.conf && \

    yum clean all && \

    rpm --rebuilddb && \

    yum -y install net-tools libaio perl numactl && \

    groupadd -g 2020 mysql && \

    useradd -r -u 2020 -g  mysql -s /sbin/nologin mysql && \

    mkdir -p /var/lib/mysql /etc/mysql/conf.d && \

    mkdir -p /var/run/mysqld /opt/mysql/sec_file && \

    chown -R mysql:mysql /usr/local/mysql /var/lib/mysql /etc/mysql /var/run/mysqld /opt/mysql/sec_file

COPY docker-entrypoint.sh  /

COPY my.cnf  /etc/mysql

COPY gosu /usr/local/bin/

RUN chown -R mysql:mysql /etc/mysql /docker-entrypoint.sh && \

    chmod 700 /docker-entrypoint.sh /usr/local/bin/gosu && \

    chmod 600 /etc/mysql/my.cnf

VOLUME /var/lib/mysql

ENV  PATH=/usr/local/mysql/bin:$PATH

ENV  MYSQL_HISTFILE=/dev/null

ENTRYPOINT ["/docker-entrypoint.sh"]

EXPOSE 3306 33060

CMD ["mysqld"]

################################################################

 

# cat docker-entrypoint.sh

############################################################

#!/bin/sh

set -e

umask 0077

if [ -z "$(ls -A /var/lib/mysql)" ]; then

    if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then

        mysqld --initialize-insecure --user=mysql

    else

        mysqld --initialize-insecure --user=mysql

        cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

        chmod +x /etc/init.d/mysqld

        /etc/init.d/mysqld start

        mysql -u root --skip-password -e "alter user root@'localhost' identified by \"${MYSQL_ROOT_PASSWORD}\";"

        mysql -u root  -p"${MYSQL_ROOT_PASSWORD}" -e "flush privileges;"

        /etc/init.d/mysqld stop

        rm -f /etc/init.d/mysqld

    fi

fi

exec gosu mysql "$@"

############################################################

# chmod +x   docker-entrypoint.sh

在MySQL数据目录为空、允许以非安全模式(root@'localhost'为空密码)初始化:

1. 如果MYSQL_ROOT_PASSWORD为空值,直接以非安全模式(root空密码)初始化

2. 如果MYSQL_ROOT_PASSWORD不为空值,以非安全模式初始化,然后根据MYSQL_ROOT_PASSWORD的传值,设置root@'localhost'的密码

# cat my.cnf

################################################################

[mysqld]

pid-file                            = /var/run/mysqld/mysqld.pid

socket                             = /tmp/mysql.sock

datadir                             = /var/lib/mysql

secure-file-priv                = /opt/mysql/sec_file

symbolic-links                  = 0

max_connections             = 1000

user                                  = mysql

skip_name_resolve

skip-host-cache

skip-log-bin

character-set-client-handshake  = FALSE

lower_case_table_names          = 1

sql-mode                        = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

character-set-server            = utf8

collation-server                = utf8_general_ci

init_connect                    = "SET NAMES 'utf8'"

default_authentication_plugin    = mysql_native_password

[mysql]

default-character-set            = utf8

[client]

default-character-set            = utf8

###################################################################

 

#  docker  build  -f  Dockerfile  -t  mysql:8.0.18  .

 

看到这个大小,只能说......需看参考链接,要做进一步镜像瘦身,毕竟官方二进制包需要的不需要的都包括了,需要根据自己需要处理一下!

 

 

参考

 

【MySQL&docker】基于CentOS7.5 编译制作MySQL5.7.28镜像

https://www.jianshu.com/p/71fd79b69a6b

 

MySQL&docker】基于CentOS7.5 编译制作MySQL5.7.28安全加固镜像

https://www.jianshu.com/p/7de9b74c6a5b

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值