基于docker的Mysql主从数据库配置

基本过程

1)、Mysql的主从同步就是当master(主库)发生数据变化的时候,会实时同步到slave(从库)。
2)、主从复制可以水平扩展数据库的负载能力,容错,高可用,数据备份。

3)、不管是delete、update、insert,还是创建函数、存储过程,都是在master上,当master有操作的时候,slave会快速的接受到这些操作,从而做同步。

用途和条件

1)、mysql主从复制用途
  ●实时灾备,用于故障切换
  ●读写分离,提供查询服务
  ●备份,避免影响业务
2)、主从部署必要条件:
  ●主库开启binlog日志(设置log-bin参数)
  ●主从server-id不同
  ●从库服务器能连通主库

主从数据库更新数据时序

在主库的磁盘上写入 Binlog;
主库更新存储引擎中的数据;
给客户端返回成功响应;
主库把 Binlog 复制到从库;
从库回放 Binlog,更新存储引擎中的数据

拉取mysql镜像

用 docker search mysql 命令来查看可用版本

拉取一个你需要的版本:

docker pull mysql:5.7

查看镜像:

docker images

在这里插入图片描述
制作运行mysql主从容器:

3306端口前面的端口是容器映射到宿主机的端口,外部访问端口,映射端口时注意端口不要冲突。
Master库:

docker run -p 3339:3306 --name main_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Slave库:

docker run -p 3340:3306 --name slave_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

查询启动两个mysql容器:
在这里插入图片描述
使用工具连接测试:
在这里插入图片描述

配置Master(主)

通过docker exec -it 35d587e3438a /bin/bash命令进入到Master容器内部,也可以通过docker exec -it main_mysql /bin/bash命令进入。3330ed3c6cde是容器的id,而main_master是容器的名称。

cd /etc/mysql切换到/etc/mysql目录下,然后vi my.cnf对my.cnf进行编辑。

报错:

bash: vi: command not found,

升级系统解决:

apt-get update
apt-get install vim命令安装vim

在my.cnf中添加如下配置:

[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

重启mysql服务使配置生效

service mysql restart

重启容器

docker start main_mysql

REPLICATION

下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

进入容器:

docker exec -it main_mysql 

连接数据库:

mysql -u root -p 123456

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

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

在这里插入图片描述

配置从数据库slaveMySQL

基本操作和主数据库一样

cd /etc/mysql修改从数据库的my.cnf配置文件:

[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin  

配置完成后也需要重启mysql服务和docker容器,操作和配置Master(主)一致。

重启mysql服务使配置生效

service mysql restart

重启容器

docker start slave_mysql

连接Master(主)和Slave(从)

在Master进入mysql,执行show master status;
在这里插入图片描述
File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。

master_host查询 后面跟容器名字或者容器ID:

docker inspect --format='{{.NetworkSettings.IPAddress}} main_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.000001', master_log_pos= 617, master_connect_retry=30;

在这里插入图片描述
在这里插入图片描述
在从数据库查询从数据库状态:

show slave status \G;

在这里插入图片描述
此时这两状态都是NO:

Slave_IO_Running: No
Slave_SQL_Running:No

因为此时从数据库还未开启主从服务

开启数据库主从服务:

start slave;

在这里插入图片描述

再次查看:

show slave status \G;

在这里插入图片描述
主从配置成功。

测试主从同步:

连接主数据库,创建数据库
进入主库,创建一个mysql数据库:

create database gene

Master:

在这里插入图片描述

Slave:

在这里插入图片描述
操作Master库则Slave库跟着也会变化,表示主从配置 搭建完成。

mysql主从不同步的解决方式

先停掉主从模式:

stop slave;

#表示跳过第n步错误,n就是后面的数字

set global sql_slave_skip_counter =1;

再次启动主从:

start slave;

之后再用mysql> show slave status\G 查看:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

主从同步状态恢复正常

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值