【docker+mysql】基于docker 配置 mysql5.7 主从 master-slave
mysql5.7,版本不同配置略有不同。首先需要按照之前介绍的mysql docker镜像 来启动两个mysql的容器。镜像通过命令拉取:docker pull mysql通过docker-compose.yml来启动容器:version: '3.1'services:master:image: mysqlenvironment:
·
mysql5.7,版本不同配置略有不同。
首先需要按照之前介绍的mysql docker镜像 来启动两个mysql的容器。
镜像通过命令拉取:
docker pull mysql
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写的,需要一些额外的配置,这里只是演示一个最最简单的情况。
更多推荐
已为社区贡献13条内容
所有评论(0)