Docker及MySQL配置
yum update
yum install docker -y
# 修改国内镜像仓库
vi /etc/docker/daemon.json
# 加 "registry-mirrors": ["http://hub-mirror.c.163.com"]
#启动
systemctl start docker
# 查看mysql 版本 https://hub.docker.com/_/mysql?tab=tags
docker search mysql
docker pull mysql:8.0.21
# 查看镜像
docker images
# 删除镜像
# docker rmi mysql:8.0.21
#生成容器
# --name mysql_master mysql_master就是容器的命名
#-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
# 1234556是密码
docker run -itd --name mysql_master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
#查看容器
docker ps
#进入容器
docker exec -it mysql_master bash
# 基础操作 登陆mysql
mysql -uroot -p
# 退出容器
exit
主从复制
#先把上面mysql容器删除 再来一遍练练手
docker rm -f mysql_master
# 主从复制 配置文件目录
mkdir -p /docker/mysql/master/data
mkdir -p /docker/mysql/slave/data
vi /docker/mysql/master/my.cnf
[mysqld]
server-id=1 #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin #开启二进制日志 从服务根据日志同步
#auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
#auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL
#binlog-ignore=mysql #忽略mysql库【我一般都不写】
#binlog-ignore=information_schema #忽略information_schema库【我一般都不写】
#replicate-do-db=aa #要同步的数据库,默认所有库
vi /docker/mysql/slave/my.cnf
[mysqld]
server-id=2 #任意自然数n,只要保证两台MySQL主机不重复就可以了。
桥连网络
# 为mysql容器创建专有桥接网络,以便固定mysql容器ip
docker network create --driver bridge --subnet 172.25.0.0/16 mysql_net
# 查看网络
docker network ls
启动master
docker create --privileged=true --name mysql_master -v /docker/mysql/master/data:/var/lib/mysql -v /docker/mysql/master/my.cnf:/etc/mysql/conf.d/my.cnf -e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai --net mysql_net --ip 172.25.0.3 -p 3306:3306 mysql:8.0.21
docker create
--privileged=true #为容器挂载目录添加权限
--name mysql_master #容器名为mysqlmaster
-v /docker/mysql/master/data:/var/lib/mysql #集群配置集中/data/master 挂载到容器/var/lib/mysql
-v /docker/mysql/master/my.cnf:/etc/mysql/conf.d #配置集中/master 中master.cnf 挂载到 /etc/mysql/conf.d中设置启动
-e MYSQL_ROOT_PASSWORD=root #设置启动密码
--net mysql_net #指定容器连接网络
--ip 172.25.0.3 #指定容器使用ip
-p 3306:3306 mysql:8.0.12 #指定主机映射到容器端口, 即主机访问3306,容器端口为3306
启动slave
docker create --privileged=true --name mysql_slave -v /docker/mysql/slave/data:/var/lib/mysql -v /docker/mysql/slave/my.cnf:/etc/mysql/conf.d/my.cnf -e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai --net mysql_net --ip 172.25.0.4 -p 3307:3306 mysql:8.0.21
# 查看启动容器
docker ps -a
# 查看容器桥连
docker network inspect mysql_net
登陆容器
# 到主
docker exec -it mysql_master /bin/bash
mysql -uroot -p
#查询master 的日志文件 以及位置
show master status;
# 到从数据库 配置主
change master to
master_host='172.25.0.3', --master的ip 不能为127.0.0.1
master_user='root', --master的帐号密码
master_password='root',
master_log_file='mysql-bin.000003', --master 查询的file名 注意上面!
master_port=3306, --master 端口 坑!为容器端口 不是主机端口
master_log_pos=438; --日志文件位置 注意上面!
start slave;
show slave status;
如此显示即为成功...
创建数据库 测试一下
恢复备份
# 恢复mysql备份 需要先将备份文件 放入容器.
# 备份命令 mysqldump -uroot -p123 ddd > /usr/app/ddd.sql
docker cp /path/back.tar.gz mysql_master:/back.tar.gz
docker exec -it mysql_master bash
tar xzvf /back.tar.gz
mysql -uroot -p
# 创建数据库 导入数据
create database ddd;
use ddd;
# 导入解压文件
source /back.mysql