惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
NISL@THU
NISL@THU
E
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
K
Kaspersky official blog
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
S
Schneier on Security
G
GRAHAM CLULEY
The Hacker News
The Hacker News
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
爱范儿
爱范儿
P
Privacy International News Feed
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
S
Securelist
G
Google Developers Blog
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
美团技术团队
F
Fortinet All Blogs
小众软件
小众软件
Recorded Future
Recorded Future
V
Visual Studio Blog
B
Blog RSS Feed
H
Help Net Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
Latest news
Latest news
Spread Privacy
Spread Privacy
H
Heimdal Security Blog

博客园 - 勤劳の洗碗机

pyinstaller打包exe故障解析 curl 访问k8s api k8s 之HPA应用 statefulset 及storageclass hadoop 伪分布式 完全分布式 及HA部署 LDAP部署及实践 k8s 压测工具之perf-test mysql相关(三)、主从复制 shell执行mysql脚本 分布式minio image-syncer 误删libc.so.6文件补救 docker 使用bind 动态扩容pvc k8s备份工具之velero jmeter使用 docker 制作ssh镜像 docker 制作自定义的nginx镜像 docker部署sharding-proxy
docker 制作自己的mysql镜像
勤劳の洗碗机 · 2020-12-02 · via 博客园 - 勤劳の洗碗机

1、下载mysql,本次以mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar为例

2、编辑启动脚本start.sh,容器启动时会运行这个脚本,主要是安装并初始化mysql

#!/bin/bash

if [ -z "$MYSQL_ROOT_PASSWORD" ];then
 echo "MYSQL_ROOT_PASSWORD is empty"
 exit 0
fi
INIT_MYSQL(){
   echo "mysql初始化"
   yum install -y libaio  libnuma* net-tools perl.x86_64
   cd /usr/local/src 
   #tar xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
   rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm
   rpm -ivh mysql-community-libs-5.7.29-1.el7.x86_64.rpm
   rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm 
   rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpm
   mkdir -p /usr/local/mysql/data && chown -R mysql.mysql /usr/local/mysql
   sed -i 's/datadir=\/var\/lib\/mysql/datadir=\/usr\/local\/mysql\/data/' /etc/my.cnf
   sed -i '/datadir/i default_password_lifetime=0' /etc/my.cnf
   mysqld  --initialize --user=mysql --datadir=/usr/local/mysql/data
   mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
   dbPassword=`grep 'temporary password' /var/log/mysqld.log | awk '{print $11}'`
   mysqladmin -uroot -p$dbPassword password  $MYSQL_ROOT_PASSWORD
   host='127.0.0.1'
   dbUser='root'
   sql_file='/usr/local/bin/init.sql'
   mysql -h $host -u $dbUser -p$MYSQL_ROOT_PASSWORD -e "source $sql_file";
   echo "Remote connection is set"
   rm -rf /usr/local/src/mysql*
}
if [ `ls /usr/local/mysql/data |wc -l` -eq 0 ];then
   INIT_MYSQL
else
   mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
fi
tail -f /var/log/mysqld.log

3、编写init.sql,主要是开启root 远程连接,看需求可以不要

use mysql;
update user set host = '%' where user = 'root';
flush privileges;

4、编写dockerfile

需要将init.sql 、 localtime(为了和宿主机时间同步,可以不要,要的话,从宿主机拷贝过来即可)、mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar、start.sh放与dockerfile同一目录下

FROM  centos7.2
ADD mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar /usr/local/src
ADD localtime /etc/localtime
ADD start.sh /usr/local/bin
ADD init.sql /usr/local/bin
CMD ["/usr/local/bin/start.sh"]
centos7.2镜像也是自己制作的,可以自己制作系统基础镜像,也可以用网上的

5、制作镜像

docker build -t mysql5.7:v1  . 

6、运行

 docker run -it -e MYSQL_ROOT_PASSWORD=123456 -p 1112:3306  -d mysql5.7:v1

7、其他服务器连接测试

[root@test-02 ~]# mysql -uroot -h 172.16.210.132 -P 1112 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye
[root@test-02 ~]# 

---------------------------------------------------------------------

上面制作的镜像,运行环境需要能联网才可以,因为要下载依赖包

如果镜像运行没有网,可以先在有网的环境制作好,再上传到无网环境运行

制作方法类似,只需更改dockerfile 和start.sh

dockerfile

FROM  centos7.2
ADD mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar /usr/local/src
ADD localtime /etc/localtime
ADD start.sh /usr/local/bin
ADD init.sql /usr/local/bin
RUN rpm --rebuilddb && yum install -y libaio  libnuma* net-tools perl.x86_64 
RUN cd /usr/local/src && rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm &&  rpm -ivh mysql-community-libs-5.7.29-1.el7.x86_64.rpm && rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm && rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpm && rm -rf /usr/local/src/mysql*
CMD ["/usr/local/bin/start.sh"]

start.sh

#!/bin/bash
if [ -z "$MYSQL_ROOT_PASSWORD" ];then echo "MYSQL_ROOT_PASSWORD is empty" exit 0 fi INIT_MYSQL(){ echo "mysql初始化" mkdir -p /usr/local/mysql/data && chown -R mysql.mysql /usr/local/mysql sed -i 's/datadir=\/var\/lib\/mysql/datadir=\/usr\/local\/mysql\/data/' /etc/my.cnf sed -i '/datadir/i default_password_lifetime=0' /etc/my.cnf mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql dbPassword=`grep 'temporary password' /var/log/mysqld.log | awk '{print $11}'` mysqladmin -uroot -p$dbPassword password $MYSQL_ROOT_PASSWORD dbUser='root' sql_file='/usr/local/bin/init.sql' mysql -u $dbUser -p$MYSQL_ROOT_PASSWORD -e "source $sql_file"; echo "Remote connection is set" } if [ `ls /usr/local/mysql/data |wc -l` -eq 0 ];then INIT_MYSQL else mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql fi tail -f /var/log/mysqld.log

------------------------------------------主从复制镜像--------------------------------------

前提:使用上面制作好的mysql5.7:latest镜像

创建目录

mkdir -p {master,slave}

1、master镜像制作

制作my.cnf

[mysqld]
default_password_lifetime=0
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

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

server-id=1
log-bin=mysql-bin
binlog-ignore-db=mysql,test
binlog_format=MIXED
slave_skip_errors=1062

制作dockerfile

FROM mysql5.7:latest
ADD my.cnf /etc/my.cnf

制作镜像

docker build -t mysql5.7:master .

2、slave镜像

制作my.cnf

[mysqld]
default_password_lifetime=0
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

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

server-id=2
log-bin=mysql-bin
relay-log=relay-log
relay-log-index=relay-log.index
binlog-ignore-db=mysql,test
binlog_format=MIXED
slave_skip_errors=1062
## relay_log配置中继日志
log_slave_updates=1
read_only=1 #将slave从库设置为只读状态

dockerfile 

FROM mysql5.7:latest
ADD my.cnf /etc/my.cnf
docker build -t mysql5.7:slave .

3、启动

docker run -it -p 1111:3306 -e MYSQL_ROOT_PASSWORD=123456  -d -v /data/master:/usr/local/mysql/data mysql5.7:maste
docker run -it -p 2222:3306 -e MYSQL_ROOT_PASSWORD=123456  -d -v /data/slave:/usr/local/mysql/data mysql5.7:slave