Docker容器是现在的主流技术,容器提供了细粒度的系统隔离机制,每个容器都完全独立,其中包括了应用以及所有需要的系统依赖,可以把系统中每个服务放入容器,让各个服务都以容器的形式运行,这样就大大简化了系统的部署过程,更加便于维护。
一、准备工作
1. 安装配置Docker
各位看官根据自己的操作系统和喜好选择相应的Docker进行安装和配置。使用docker pull命令拉取mysql 8的镜像文件。
> docker pull mysql:8
2. 准备MySQL相关的配置和数据目录
本次演示以一主二从共三台服务器为例进行演示。在当前目录创建三个配置文件目录和三个数据目录:
> cd /Users/Tom/docker
>
> mkdir mysqlconf
> mkdir mysqlconf/master
> mkdir mysqlconf/slave1
> mkdir mysqlconf/slave2
>
> mkdir mysqldata
> mkdir mysqldata/master
> mkdir mysqldata/slave1
> mkdir mysqldata/slave2
>
> tree -L 2
.
├── README.md
├── mysqlconf
│ ├── master
│ ├── slave1
│ └── slave2
└── mysqldata
├── master
├── slave1
└── slave2
运行MySQL容器并从中拷贝MySQL配置文件到本地备用,配置文件目录:/etc/my.cnf
。
# 语法:
docker cp <containerId>:/path/to/file /path/on/host
# 示例:temp_mysql8是本次启动的MySQL容器名称
docker cp temp_mysql8:/etc/my.cnf .
拷贝配置文件到已创建的配置文件目录:
cp my.cnf mysqlconf/master/my.cnf
cp my.cnf mysqlconf/slave1/my.cnf
cp my.cnf mysqlconf/slave2/my.cnf
> tree -L 3
.
├── README.md
├── mysqlconf
│ ├── master
│ │ └── my.cnf
│ ├── slave1
│ │ └── my.cnf
│ └── slave2
│ └── my.cnf
└── mysqldata
├── master
├── slave1
└── slave2
二、基于日志点的主从复制
1. 配置Master服务器
1.1 修改配置文件
编辑主服务器的MySQL配置文件mysqlconf/master/my.cnf
,添加下列配置项:
[mysqld]
server-id=1
log-bin=mysql-binlog
binlog-do-db=your-database-name
default_authentication_plugin=mysql_native_password
1.2. 在docker中启动Master节点
docker run -P --name mysqlmaster \
-v $PWD/mysqldata/master:/var/lib/mysql \
-v $PWD/mysqlconf/master/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
参数含义说明:
-P
:本机与容器的端口映射--name
:为容器指定一个名称mysqlmaster
MYSQL_ROOT_PASSWORD
:指定MySQL中root用户的密码为123456-d
:指定容器运行方式为后台运行
容器启动后登录MySQL并检查配置是否生效:
$> docker exec -it mysqlmaster bash
# mysql -uroot -p