前言
公司要在k8s集群中使用mysql服务,作为对开发环境的测试数据存储.目前这个服务已经在k8s集群中稳定运行.话不多说.直接开搞
环境说明:k8s集群版本:1.17
mysql版本:mysql-5.7.20
1创建dockerfille编写
FROM centos:7 RUN ping -c 1 www.baidu.com RUN yum remove -y libnuma.so.1 RUN yum install -y vim net-tools cmake numactl bison bison-devel libaio-devel gcc gcc-c++ git ncurses-devel RUN groupadd mysql && useradd mysql -g mysql && mkdir /home/mysql/mydata/ && mkdir /home/mysql/mysql_logs && mkdir /home/mysql/scripts && mkdir /home/mysql/cnf ADD ./mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz /home/mysql/ RUN chown mysql:mysql -R /home/mysql/ && cd /home/mysql/ && mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql-5.7 ENV PATH /home/mysql/mysql-5.7/bin:$PATH COPY ./scripts /home/mysql/scripts/ RUN /bin/sh /home/mysql/scripts/create_mycnf.sh && rm -rf /home/mysql/scripts/create_mycnf.sh RUN chown mysql:mysql -R /home/mysql/ RUN /bin/sh /home/mysql/scripts/init_password.sh USER mysql CMD ["sh","/home/mysql/scripts/start.sh"]
注:如要更改镜像中的安装路径,可按需修改相关路径.
各位现在可能看这个dockerfile有点懵,没关系,咱们接着往下看
2创建相关脚本文件
创建my.cnf
[root@master01 mysql-5.7]# cat scripts/create_mycnf.sh #!/bin/bash myCnf='/home/mysql/cnf/my.cnf' if [ -f ${myCnf} ];then echo 'cnf文件已存在..' exit fi cat > /home/mysql/cnf/my.cnf <<EOF [mysqld] basedir=/home/mysql/mysql-5.7 datadir=/home/mysql/mydata character_set_server=utf8 init_connect='SET NAMES utf8' port=3306 lower_case_table_names=1 max_connections=1000 sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION log-error=/home/mysql/mysql_logs/mysql.log skip-name-resolve [clinet] default-character-set=utf8 EOF
注意:如修改dockerfiel中的mysql安装路径.my.cnf中的相关配置也要做出对应修改
初始化mysql
[root@master01 mysql-5.7]# cat scripts/init_password.sh #!/bin/bash initPass(){ #初始化mysql,并获取初始化密码 并启动mysql mysqld --defaults-file=/home/mysql/cnf/my.cnf --user=mysql --basedir=/home/mysql/mysql-5.7/ --datadir=/home/mysql/mydata --initialize init_pass=`cat /home/mysql/mysql_logs/mysql.log |grep root@localhost: |awk '{print $11}'` echo 初始化默认密码: ${init_pass} cat >/home/mysql/init_password <<EOF ${init_pass} EOF } num=`ls /home/mysql/mydata |wc -l` if [ $num -eq 0 ];then initPass fi
注意:如路径修改,修改做出对应调整
mysql启动脚本
[root@master01 mysql-5.7]# cat scripts/start.sh #!/bin/bash my_cnf=/home/mysql/cnf/my.cnf mysql_bin=/home/mysql/mysql-5.7/bin User='mysql' if [ `whoami` != $User ];then echo 'please use $User user' exit fi ps -ef |grep mysqld |grep -v grep if [ $? == 0 ];then echo "MySQL is running..." exit else echo -e "