阅读 144

Docker下搭建配置mysql5.7主从复制

最近准备学习下数据库中间件mycat,配置mycat读写分离前提要先配置好mysql主从复制。今天把整个过程说一下,首先环境 服务器为centos7系统,mysql版本5.7。

一、启动容器

1、新建mysql主从容器的挂载目录

(1)mysql-master(主)

//mysql配置文件

mkdir -p /data/mysql-master/conf

//mysql数据文件路径

mkdir –p /data/mysql-master/data

//日志文件路径

mkdir -p /data/mysql-master/logs

(2)mysql-slave(从)

//mysql配置文件

mkdir -p /data/mysql-slave/conf

//mysql数据文件路径

mkdir –p /data/mysql-slave/data

//日志文件路径

mkdir -p /data/mysql-slave/logs

2.启动容器

(1)mysql-master

docker run -p 3306:3306 --name mysql-master\
--restart=always \
-v /data/mysql-master/conf:/etc/mysql \
-v /data/mysql-master/logs:/var/log/mysql \
-v /data/mysql-master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
复制代码

(1)mysql-slave

docker run -p 3307:3306 --name mysql-slave\
--restart=always \
-v /data/mysql-slave/conf:/etc/mysql \
-v /data/mysql-slave/logs:/var/log/mysql \
-v /data/mysql-slave/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
复制代码

二、主从配置

1、配置主机 mysql-master

因为已经做了外部挂载,所以直接进入挂载目录进行配置即可

vim /data/mysql-master/my.cnf 按i进入插入模式,添加以下内容

[mysqld]

server-id=1 

log-bin=mysql-bin

#下面的如果要所有数据库都进行复制,就不用写

replicate-do-db=testdb #指定同步的数据库 

replicate-ignore-db=mysql 此配置为指定不同步的数据库

复制代码

然后重启mysql-master容器,让它重新加载配置文件

docker restart 容器id

2、创建拥有主从复制权限的账户

(1)进入mysql-master容器内部

 `docker exec -it mysql-master bash`
复制代码

(2)登入mysql

 `mysql -u root -proot`
复制代码

(3)创建slave账户,赋予主从复制权限


 CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
复制代码

3、查看mysql-master状态

show master status;

image.png

File:binlog日志位置

Position : 节点号(mysql主从复制 是从节点开始复制的,这跟redis不太一样)

4、配置从机 mysql-slave

因为已经做了外部挂载,所以直接进入挂载目录进行配置即可

vim /data/mysql-master/my.cnf 按i进入插入模式,添加以下内容

 [mysqld]

server-id=2

log-bin=mysql-slave-bin

## relay_log配置中继日志

relay_log=mysql-slave-relay-bin    

复制代码

然后重启mysql-master容器,让它重新加载配置文件

docker restart 容器id

5、主从链接

进入从机 mysql-slave 容器内部,并登录mysql

执行下面的代码

change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 1300, master_connect_retry=30;
复制代码

master_host:主机IP,为容器独立IP,可以通过一下命令查询

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master

image.png

master_port:主机端口

master_log_file:binlog日志位置,刚才查询主机状态获取的

master_log_pos:主机节点位置

master_connect_retry:重新链接主机间隔时间

然后启动从机的主从复制

start slave;

到这里就完成了mysql 的主从配置。下面简单测试一下

三、mysql主从测试

进入主机 mysql-master 容器登入mysql,创建数据库testdb(因为做主机主从配置时,设置了要复制的数据库为testdb,所以这块也要创建testdb数据库)

create database testdb;

进入从机 mysql-slave 容器登入mysql,执行

show databases; image.png

可以看到从机也有了testdb这个数据库

然后可以在主机testdb中创建个表

create table user(id int,name varcher(20));

进入从机,切换到testdb数据库 use testdb

然后执行

show tables;

image.png

发现从机testdb数据库里已经有了user这张表了。

至此就完成了mysql的主从复制 配置。

文章分类
后端
文章标签