docker容器实现mysql主从复制(一主一从)

创建mysql文件目录

mkdir -p /tmp/mysqlData/master/cnf
mkdir -p /tmp/mysqlData/master/data
mkdir -p /tmp/mysqlData/slave/cnf
mkdir -p /tmp/mysqlData/slave/data

编辑主配置文件

vim /tmp/mysqlData/master/cnf/my.cnf
[mysqld]
server-id=1
binlog-ignore-db=mysql  
log-bin=mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062

编辑子配置文件

vim /tmp/mysqlData/slave/cnf/my.cnf
[mysqld]
server-id=2
binlog-ignore-db=mysql  
log-bin=mysql-slave1-bin  
binlog_cache_size=1M  
binlog_format=mixed  
expire_logs_days=7  
slave_skip_errors=1062  
relay_log=mall-mysql-relay-bin  
log_slave_updates=1  
read_only=1

拉取mysql5.7的镜像

docker pull mysql:5.7

创建容器

主服务器:

docker run -dt -p 3307:3306 --name master --restart=always -v /tmp/mysqlData/master/cnf:/etc/mysql/conf.d -v /tmp/mysqlData/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

从服务器:

docker run -dt -p 3308:3306 --name slave --link master --restart=always -v /tmp/mysqlData/slave/cnf:/etc/mysql/conf.d -v /tmp/mysqlData/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

-p 指定容器暴露的端口,宿主机(物理机)端口: docker实例端口
-p 3307:3306 把物理机的3307端口映射为实例的端口3306端口
-v 给容器挂载存储卷,挂载到容器的某个目录
-v /tmp/mysqlData/master/cnf:/etc/mysql/conf.d 把创建的配置文件映射成实例的/etc/mysql/conf.d
-v /tmp/mysqlData/master/data:/var/lib/mysql 数据文件的映射
-e 指定环境变量
-e MYSQL_ROOT_PASSWORD=123456 设置MySQL的root账号密码为123456

查看容器状态

docker ps -a

在这里插入图片描述

重启master

[root@docker mysqlData]# docker restart master
master

进入master容器,并登录数据库

[root@docker mysqlData]# docker exec -it master bash
root@881e529321df:/# mysql -uroot -p123456

#创建slave数据同步用户
mysql> create user 'slave'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
#授权
mysql> grant replication slave,replication client on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

进入slave容器,进行主从复制配置

mysql> change master to master_host='192.168.86.48' , master_user='slave' , master_password='123456' , master_port=3307 ,master_log_file='mysql-bin.000001' , master_log_pos=154,master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

#master_host的IP地址是宿主机的IP地址,可以通过hostname -i查询。
#master_log_file和master_log_pos的内容是刚刚在master数据库中show master status;查询到的。

在slave中查看主从状态

start slave;
show slave status\G;

在这里插入图片描述

主从复制测试

master:

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> use test;
Database changed
mysql> create table book(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into book values(1,'English');
Query OK, 1 row affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

slave:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from book;
+------+---------+
| id   | name    |
+------+---------+
|    1 | English |
+------+---------+
1 row in set (0.00 sec)

在这里插入图片描述
至此,说明已配置成功!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值