docker mysql主备_Docker 部署 MySQL 主从同步

一、集群的目标

高可用(High Avaliability),是当一台服务器停止服务后,对于业务及用户毫无影响。停止服务的原因可能由于网卡、路由器、机房、CPU负载过高、内存溢出、自然灾害等不可预期的原因导致,在很多时候也称为单点问题。

突破数据量限制,一台服务器不能存储大量数据,需要多台分担,每个存储一部分,共同存储完整个集群数据,最好能做到互相备份,即使单节点故障,也能在其他节点找到数据。

数据备份容灾,单节点故障后,存储的数据仍然可以在别的地方拉起。

分担压力,由于多个服务器都能完成各自一部分工作,所以尽量的避免了单点压力的存在。

二、集群的基础形式

894d5dcb6df6229b941e9686d322428e.png

三、MySQL集群

MySQL-MMM是Master-Master-Replication Manager for Mysql(MySQL主主复制管理器)的简称。MMM基于MySQL Replication 做的扩展架构,主要用来监控 MySQL 主主复制并做失败转移。其原理是将真实数据库节点的IP(RIP)映射为虚拟的IP(VIP)集。

MySQL 主从同步

1、下载MySQL镜像

sudo docker pull mysql:5.7

2、创建两个实例并启动master和slave

docker run -p 3307:3306 --name mysql-master \

-v /mydata/mysql/master/log:/var/log/mysql \

-v /mydata/mysql/master/data:/var/lib/mysql \

-v /mydata/mysql/master/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

docker run -p 3307:3306 --name mysql-master \

-v /mydata/mysql/master/log:/var/log/mysql \

-v /mydata/mysql/master/data:/var/lib/mysql \

-v /mydata/mysql/master/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

修改master基本配置:

vi /mydata/mysql/master/conf/my.cnf

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

init_connect='SET collation_connection = utf8_unicode_ci'

init_connect='SET NAMES utf8'

character-set-server=utf8

collation-server=utf8_unicode_ci

skip-character-set-client-handshake

skip-name-resolve

修改 slave 基本配置

vi /mydata/mysql/slaver/conf/my.cnf

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

init_connect='SET collation_connection = utf8_unicode_ci'

init_connect='SET NAMES utf8'

character-set-server=utf8

collation-server=utf8_unicode_ci

skip-character-set-client-handshake

skip-name-resolve

4、添加主从复制部分配置

主MySQL配置文件修改

#master-slaver repication

server_id=1

log-bin=mysql-bin

read-only=0

binlog-do-db=gulimall_ums

binlog-do-db=gulimall_pms

binlog-do-db=gulimall_oms

binlog-do-db=gulimall_wms

binlog-do-db=gulimall_admin

replicate-ignore-db=mysql

replicate-ignore-db=sys

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

修改完配置后重启master。

从MySQL配置文件修改:

#master-slaver repication

server_id=2

log-bin=mysql-bin

read-only=1

binlog-do-db=gulimall_ums

binlog-do-db=gulimall_pms

binlog-do-db=gulimall_oms

binlog-do-db=gulimall_wms

binlog-do-db=gulimall_admin

replicate-ignore-db=mysql

replicate-ignore-db=sys

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

配置好之后重启 slaver。

为master授权用户来同步它的数据

1、进入master容器

docker exec -it mysql /bin/bash

2、进入mysql内部

mysql -uroot -p

1)、授权 root可以远程访问(主从无关,为了方便我们远程连接MySQL)

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

flush privileges;

2)、添加用来同步的用户

GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';

3)、查看master状态

show master status\G;

配置slaver同步master数据

1、进入slaver容器

docker exec -it mysql-slaver-01 /bin/bash

2、进入mysql内部

mysql -uroot -p

1)、授权 root可以远程访问(主从无关,为了方便我们远程连接MySQL)

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

flush privileges;

2)、设置主库连接

change master to master_host='192.168.10.10',master_user='backup',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=0,master_port=3307;

3)、启动从库同步

start slave;

4)、查看从从库状态

show slave status\G;

d8e746968c418308f955a5216e0d92f7.png

如果主从库数据不同步,则可以使用如下命令临时解决:

mysql> stop slave;

Query OK, 0 rows

affected (0.00 sec)

mysql> set global sql_slave_skip_counter=1;

Query OK, 0 rows

affected (0.00 sec)

mysql> start slave;

Query OK, 0 rows

affected (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值