您的位置:首页 > 运维架构 > Docker

【docker+mysql】基于docker 配置 mysql5.7 主从 master-slave

2017-11-21 05:46 603 查看
mysql5.7,版本不同配置略有不同。

首先需要按照之前介绍的mysql docker镜像 来启动两个mysql的容器。

镜像通过命令拉取:

docker pull mysql


通过docker-compose.yml来启动容器:

version: '3.1'
services:
master:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=123
restart: always
ports:
- "50001:3306"

slave1:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=123
restart: always
ports:
- "50002:3306"
有两个mysql,master映射到50001端口,slave映射到50002端口,默认的root密码为123,通过环境变量传入。

然后:

docker-compose up -d
采用后台方式启动容器。



可以看到两个mysql服务已经启动。

使用终端登录一下:

mysql -uroot -p -h127.0.0.1 -P50001


输入密码123,可以登录,说明启动成功。

接下来就是配置mysql主从部分。

首先进入到master容器内部,修改配置文件,配置文件默认为/etc/mysql/my.cnf

进入:

docker exec -it 2a5a  /bin/bash
注意修改容器id为自己的,找到相应的文件,修改my.cnf为:

[mysqld]
log-bin=mysql-bin
server-id=1
这是最简单的配置,默认同步全部数据库,id必须全局唯一。

然后重启mysql:

/etc/init.d/mysql restart


进入到mysql:

mysql -uroot -p


创建从服务器复制使用的账号:

create user 'repl'@'%' identified by 'repl';
授予复制权限:

grant replication slave on *.* to 'repl'@'%';
最后查看master状态:

show master status;


如果现实empty set,说明没有重启,重启以后还是empty set,那么就是配置文件有问题。



这是正常的status,slave服务器需要file和position两个信息,记录下来。

然后处理从服务器。

进入容器内部:

docker exec -it ad51  /bin/bash
修改配置文件:/etc/mysql/my.cnf

[mysqld]
server-id=2


重启。

登录mysql,设置:

mysql> change master to master_host='master',master_port=3306, master_user='repl',master_password='repl',master_log_file='mysql-bin.000001',master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
也就是主服务器的一些信息。

然后:

start slave;


最后查看:



说明配置成功。

最后验证一下:

在主库下创建一个test数据库,再创建新表t,然后插入一条数据:

create database test;

create table t(id int not null, name varchar(100));

insert into t values(1, 'ly');


在从库下查看:



说明配置成功。需要注意的是,这里只是配置了slave会同步master的数据,也就是说往master里写,slave可以读到,但是往slave里写,master读不到,因为没有配置。正常是不允许向slave写的,需要一些额外的配置,这里只是演示一个最最简单的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker mysql 主从