第一步:下载mysql镜像:docker pull mysql
查看镜像
第二步:启动两个mysql容器
主服务器:docker run --name master -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
从服务器:docker run --name slave -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql
查看容器:
第三步:
配置master容器
运行docker exec -it ce16ed2a83b2 /bin/bash 或者 docker exec -it ce16ed2a83b2 bash进入
这时因为系统很干净所以很多命令用不了 按照ubuntu命令安装
apt-get update
apt-get upgrade
apt-get install vim
安装完毕后最好替换下 软件源
vim etc/apt/sources.list
使用dd命令删除所有行
然后按i进入插入模式 复制下面的软件源在insert模式下右键即可
然后保存退出
清华大学的软件源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
第四步 修改mysql配置
vim etc/mysql/my.cnf
插入
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
保存退出
重启一下容器
docker stop ce16ed2a83b2
docker exec -it ce16ed2a83b2 bash
第五步 创建用户
mysql -u root -p 123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
slave容器的操作只需要前四步操作
my.cnf的配置不太一样
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
第六步:配置master
cmd 查看一下主容器的host
docker inspect --format='{{.NetworkSettings.IPAddress}}' master
master容器里查看一下用户状态
mysql -u root -p 输入密码进入mysql
use mysql
select user,plugin from user;
新版Mysql的密码加密方式可能验证不通过 需要修改slave的密码验证方式为 mysql_native_password
alter user 'slave'@'%' identified by '123456' password expire never;
alter user 'slave'@'%' identified with mysql_native_password by '123456';
flush privileges;
查看一下binlog的编号和位置
以上就是master要做的准备了
第七步 slave配置
连接主服
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2460, master_connect_retry=30;
启动从库
start slave;
show slave status\G;
启动成功
注意:
Slave_IO_Running: NO
原因很多 我遇到的是刚刚那个mysql密码验证格式的问题
Slave_SQL_Running: No 可能是master容器下的最后一句mysql语句在从库这边权限有问题
在maste容器下随便运行一句查询语句就可以解决这个问题 也可能是其他情况 具体情况请百度