zoukankan      html  css  js  c++  java
  • MySQL5.7 Dockerfile

    个人学习笔记,谢绝转载!!!
    原文:https://www.cnblogs.com/wshenjin/p/10100949.html


    #Dockerfile for mysql5.7
    FROM centos
    
    COPY ["src","/src"]
    
    RUN groupadd -g 1003 mysql 
        && useradd -u 1003 -g mysql -s /sbin/nologin mysql ;
        yum install -y gcc 
        gcc-c++ 
        cmake 
        make 
        readline-devel 
        libcurl libcurl-devel 
        zlib zlib-devel 
        && yum clean all ;
        cd /src/ 
        && tar xf percona-server-5.7.23-24.tar.gz 
        && mv boost_1_59_0.tar.gz  percona-server-5.7.23-24/ 
        && mkdir percona-server-5.7.23-24/build 
        && cd percona-server-5.7.23-24/build 
        && CHOST="x86_64-pc-linux-gnu" CFLAGS="-march=nocona -O2 -pipe" CXXFLAGS="-march=nocona -O2 -pipe" 
        cmake .. 
        -DMYSQL_USER=mysql 
        -DCMAKE_BUILD_TYPE:STRING=Release 
        -DSYSCONFDIR:PATH=/usr/local/mysql 
        -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql 
        -DENABLED_PROFILING:BOOL=ON 
        -DENABLE_DEBUG_SYNC:BOOL=OFF 
        -DMYSQL_DATADIR:PATH=/data/database/mysql 
        -DMYSQL_MAINTAINER_MODE:BOOL=OFF 
        -DWITH_EXTRA_CHARSETS=all 
        -DWITH_BIG_TABLES:BOOL=ON 
        -DWITH_FAST_MUTEXES:BOOL=ON 
        -DENABLE-PROFILING:BOOL=ON 
        -DWITH_SSL:STRING=bundled 
        -DWITH_UNIT_TESTS:BOOL=OFF 
        -DWITH_ZLIB:STRING=bundled 
        -DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON 
        -DWITH_PLUGINS=heap,csv,partition,innodb_plugin,myisam 
        -DEFAULT_COLLATION=utf8_general_ci 
        -DEFAULT_CHARSET=utf8 
        -DENABLED_ASSEMBLER:BOOL=ON 
        -DENABLED_LOCAL_INFILE:BOOL=ON 
        -DENABLED_THREAD_SAFE_CLIENT:BOOL=ON 
        -DENABLED_EMBEDDED_SERVER:BOOL=OFF 
        -DWITH_CLIENT_LDFLAGS:STRING=all-static 
        -DINSTALL_LAYOUT:STRING=STANDALONE 
        -DCOMMUNITY_BUILD:BOOL=ON 
        -DWITH_SAFEMALLOC=OFF 
        -DENABLE_DTRACE=0 
        -DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1 
        -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 
        -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 
         -DWITH_BOOST=.. 
        && make -j`grep -c processor /proc/cpuinfo` 
        && make install ;
        cd / ;
        cp /src/mysql_init.sh / ;
        cp /src/my.cnf /etc/ ;
        ln -sv /usr/local/mysql/bin/* /usr/local/bin/ ;
        mkdir /data/{save,database/mysql} -p ;
        strings /dev/urandom | tr -dc A-Za-z0-9 | head -c20 > /data/save/mysql_root ;
        chmod 600 /data/save/mysql_root ;
        chmod 700 /data/save ;
        chmod 750 /data/database/mysql ;
        chown mysql:mysql -R /data/database/mysql ;
        echo -e "/usr/local/mysql/bin/mysql -uroot -p\`cat /data/save/mysql_root\`" > /root/inmysql ;
        echo -e "/usr/local/mysql/bin/mysqladmin -uroot -p\`cat /data/save/mysql_root\` 'shutdown'" > /root/mysql_stop ;
        chmod 700 /root/mysql_stop /root/inmysql ;
        yum remove -y iputils* iproute file make gcc cpp vim-minimal acl bind* rootfiles file 
        python-chardet gobject-introspection libxml2-python python-gobject-base basesystem libgomp 
        libstdc++-devel glibc-headers mpfr passwd yum-plugin-ovl dbus-glib python-kitchen kernel-headers 
        && yum clean all ;
        userdel mail ;
        userdel ftp ;
        cp /usr/share/zoneinfo/Asia/Shanghai /etc/ ;
        ln -svf /etc/Shanghai /etc/localtime ;
        rm -rf /usr/local/mysql/{mysql-test,sql-bench,support-files,data,man,README.MySQL,COPYING,INSTALL-BINARY,docs} ;
        rm -rf /src /root/.bash* /root/.cshrc  /root/.tcshrc /var/cache
    
    ENTRYPOINT ["/mysql_init.sh"]
    HEALTHCHECK --interval=60s --timeout=5s CMD /usr/local/mysql/bin/mysqladmin -uroot -p$(cat /data/save/mysql_root) ping | grep alive || exit 1
    
    EXPOSE 3306
    CMD ["/usr/local/mysql/bin/mysqld","--defaults-file=/etc/my.cnf","--user=mysql"]
    

    src目录下需要拷贝的文件:

    -rw-r--r-- 1 root root 83709983 Jun 30  2017 boost_1_59_0.tar.gz
    -rwxr-xr-x 1 root root     1481 Nov 23 09:39 mysql_init.sh
    -rw-rw-r-- 1 root root 81641623 Oct 31 22:55 percona-server-5.7.23-24.tar.gz
    -rw-rw-r-- 1 root root     2320 Dec 13 12:46 my.cnf
    

    由于MySQL5.7的初始化方式等和MySQL5.5有差异,所以ENTRYPOINT脚本也有一定的差异:

    #!/bin/bash
    #数据库初始化脚本
    
    chown mysql:mysql -R /data/database/mysql
    #这里只判断判断数据目录为空,则先初始化再启动
    if [ -z "$(ls -A /data/database/mysql/)" ] ; then
        #初始化新实例
        init_res=$(/usr/local/mysql/bin/mysqld  --initialize  --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/database/mysql/ 2>&1)
        [ "$?" -eq 0 ] && echo "初始化数据库完成..." || exit 1
    
        chmod 750 /data/database/mysql
        chmod 700 /data/database/mysql/mysql
        chmod 660 /data/database/mysql/mysql/*
        #启动mysqld新实例
        /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf > /dev/null &
        mysqld_pid="$!"
    
        #等待mysqld启动完成
        while [ ! -S /tmp/mysql.sock ]
        do
             if ps uax | grep -v grep |grep $mysqld_pid > /dev/null 2>&1 ; then
                 echo "等待mysqld启动..."
                 sleep 2s
             else
                 echo "mysqld启动失败..."
                 exit 1
             fi
        done
        [ "$?" -eq 0 ] && echo "mysqld启动完成..." || exit 1
    
        old_passwd=$( echo "$init_res" | awk '/A temporary password is generated for root@localhost:/{print $NF}')
        #配置初始化密码,删除空账号
        /usr/local/mysql/bin/mysqladmin -u root -p"$old_passwd"  password `cat /data/save/mysql_root` 
        [ "$?" -eq 0 ] && echo "root密码已重置..." || exit 1
    
        #关闭mysqld
        /usr/local/mysql/bin/mysqladmin -uroot -p`cat /data/save/mysql_root` shutdown
        while ps uax | grep -v grep |grep $mysqld_pid > /dev/null 2>&1
        do
            echo "等待mysqld关闭..."
            sleep 2s
        done
        [ "$?" -eq 0 ] && echo "重启mysqld..." || exit 1
    fi
    
    exec "$@"
    
  • 相关阅读:
    动态规划(下):如何求得状态转移方程并进行编程实现?
    SQL注入
    动态规划(上):如何实现基于编辑距离的查询推荐?
    XSS
    组合
    访问控制
    排列
    基于离散对数的签名方案
    基于RSA的签名方案
    centos7基于Hadoop的集群安装配置Hive
  • 原文地址:https://www.cnblogs.com/wshenjin/p/10100949.html
Copyright © 2011-2022 走看看