安装docker
参考我的博客:centos7安装docker
安装docker MySQL
查看本地镜像
docker images
查看运行的容器
docker ps
查看关于MySQL的镜像
docker search mysql
全部输出 ,如果输出过长也会输出
docker search --no-trunc mysql
本地没有MySQL的镜像 则
docker从仓库中拉取最新版的mysql镜像,如果没加标签的话,默认获取最新的版本latest。这里下载5.7版本
docker pull mysql:5.7
现在已经有MySQL5.7的镜像了
启动容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
参数解析
--restart=on-failure:3:是指容器在未来出现异常退出(退出码非0)的情况下循环重启3次
–name:给新创建的容器命名
-d 后台运行容器 并返回容器ID
-p 3306:3306 端口映射 ,前面是容器内端口,后面是服务器上端口
-e MYSQL_ROOT_PASSWORD=root 初始化MySQL root账号密码
mysql:5.7 镜像名称 ,可以通过 docker images 查看
-v 和 --mount区别 http://einverne.github.io/post/2018/03/docker-v-and-mount.html
使用-v /tmp/a:/var/a 时。如果宿主机上没有这个文件/tmp/a,也会自动创建,
但是如果使用mount时,宿主机中没有这个文件会报错找不到这个文件,并创建失败
docker ps
查看容器启动状况
进入容器 查看配置文件路径 以及数据文件路径
docker exec -it mysql bash
停止容器
docker stop mysql
删除容器
docker rm mysql
docker run --name mysql \
-d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
--restart=on-failure:3 \
-v /server/docker/mysql/data:/var/lib/mysql \
-v /server/docker/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d\mysqld.cnf \
mysql:5.7
查看目录映射
docker inspect mysql | grep Mounts -A 20
仅仅安装MySQL客户端
# 添加rpm源
[root@k8s-master ~]# rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
[root@test1 ~]#
# 通过yum搜索
[root@test1 ~]# yum search mysql-community
[root@test1 ~]#
# 安装x64位的 mysql客户端
[root@test1 ~]# yum install mysql-community-client.x86_64
搭建docker MySQL主从
主要解决的问题 ,配置文件不生效 ,新部署的从库网络有问题
以下为测试环境部署从库:
docker run -p 3307:3306 --name mysql-slave --net net_sandbox --ip 172.16.0.214 -v /server/sandbox/mysql/conf3307:/etc/mysql/mysql.conf.d -v /server/sandbox/mysql/data3307:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root@2017 -d mysql:5.7
修改server_id
配置文件中加入以下参数
gtid-mode=on
enforce-gtid-consistency=1
log-slave-updates=1
重启MySQL容器生效
docker restart mtsql
找到主从库的ip
docker inspect mysql |grep IP
172.16.0.114
docker inspect mysql-slave |grep IP
创建复制账号
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%' identified by 'repl';
? change master to
CHANGE MASTER TO
MASTER_HOST='172.16.0.114',
MASTER_USER='repl',
MASTER_PASSWORD='repl',
MASTER_PORT=3306,
master_auto_position=1,
MASTER_CONNECT_RETRY=10;
部署主从网络一直不通 根据原来的脚本内容
--net net_sandbox --ip 172.16.0.214 在创建mysql-slave 时添加一下参数 ,再次启动就可以了
脚本内容
cat /server/sandbox/mysql/conf/my.cnf
docker stop mysql-slave;docker rm mysql-slave;docker run --name mysql-slave -p 3307:3306 --restart always --net net_sandbox --ip 172.16.0.214 -v /etc/hosts:/etc/hosts -v /etc/localtime:/etc/localtime -v /server/sandbox/mysql/data3307:/var/lib/mysql -v /server/sandbox/mysql/conf3307/my.cnf:/etc/my.cnf -v /etc/resolv.conf:/etc/resolv.conf -e MYSQL_ROOT_PASSWORD=root@2017 -d mysql:5.7
wait for 10 sec
/usr/bin/mysql -uroot -proot@2017 -P3307 -h127.0.0.1 -e"set global super_read_only=OFF;show variables like 'super_read_only';"
Variable_name Value
super_read_only OFF
/usr/bin/mysql -uroot -proot@2017 -P3306 -h10.238.160.60 -e"grant all privileges on *.* to 'repl'@'%' identified by 'repl';"
/usr/bin/mysql -uroot -proot@2017 -P3307 -h10.238.160.60 -e"stop slave"
/usr/bin/mysqldump -uroot -proot@2017 -P3306 -h127.0.0.1 --master-data=1 --force --all-databases > /root/dump.sql