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写的,需要一些额外的配置,这里只是演示一个最最简单的情况。



Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐