mysql5.6版本基于GTID双主-docker方式-主库有数据

#(0)环境规划

mysql版本:5.6
master01 :  192.168.19.131
master02 : 192.168.19.132

#(1)安装docker和docker-compose

curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce-17.06.0.ce-1.el7.centos.x86_64 -y
systemctl enable docker
systemctl  start docker
cat > /etc/docker/daemon.json <<EOF
{
     "registry-mirrors": ["https://ui5lsypg.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

sudo curl -L https://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

#(2)准备目录

mkdir /mysql3307/{data,conf} -pv
mkdir /temp/docker/compose/ -pv 

#(3)master01 和 master02 的配置文件
注意修改server-id和 auto_increment_offset

#cat /mysql3307/conf/my.cnf
[mysqld]
#basic
character-set-server=utf8
lower_case_table_names=1
skip-name-resolve
max_connections = 10000
user=mysql
port=3306
datadir=/mysql3307/data
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysql/mysql.pid
log_error=/var/log/mysql/error.log
default_time_zone = ‘+8:00‘
explicit_defaults_for_timestamp=true

#slow log
slow_query_log = 1
long_query_time = 1

#lock
innodb_lock_wait_timeout=50
lock_wait_timeout=50
innodb_autoinc_lock_mode=2

#innodb
innodb_file_per_table=ON
innodb_buffer_pool_size=128M

#redo log
innodb_flush_log_at_trx_commit=1
innodb_support_xa=ON
innodb_log_file_size=16M
innodb_log_files_in_group=2
innodb_log_group_home_dir=./ 

#binlog
sync_binlog=1
binlog_format=row
max_binlog_size=1073741082
log-bin=master01
expire_logs_days = 7

#Replication availability
master-info-repository=TABLE
relay-log-info-repository=TABLE
relay_log_recovery=1
sync_relay_log=1
sync_relay_log_info=1

#flush
innodb_io_capacity=200
innodb_flush_neighbors=0 

#gtid
server-id=1
gtid-mode=on
enforce-gtid-consistency=true
auto_increment_offset=1
auto_increment_increment=2
log-slave-updates=true

#(4)compose文件

#cat /temp/docker/mysql3307/mysql3307.yaml
version: ‘2.2‘
services:
    mysql3307:
        hostname: mysql3307
        container_name: mysql3307
        restart: always
        image: registry.cn-hangzhou.aliyuncs.com/wangfang-dev/mysql:5.6
        ports:
            - 3307:3306
        volumes:
            - /mysql3307/conf:/etc/mysql/conf.d
            - /mysql3307/data:/var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: 123456
        cpus: 1
        mem_limit: 2048m

#(5)先启动master01和准备一些数据

docker-compose -f /temp/docker/mysql3307/mysql3307.yaml up -d
启动成功, 进入容器里面的数据库先创建一些数据
docker exec -it mysql3307 bash
mysql -uroot -p123456

创建复制和备份账户
grant replication slave,replication client on *.* to ‘rep‘@‘%‘ identified by ‘rep‘;
grant reload,process,lock tables,replication client on *.* to backup@‘%‘ identified by ‘backup‘;

#(6)在master01和master02上创建备份目录和安装percona备份软件

mkdir -pv /backup/db3307
yum install epel-release -y
yum install percona-xtrabackup.x86_64 -y

#(7)在master01上进行完整备份

innobackupex --defaults-file=/mysql3307/conf/my.cnf  --user=backup --password=backup --host=192.168.19.131 --port=3307 /backup/db3307
同时把备份传到master02上:scp -r /backup/db3307/2019-03-02_23-13-39/ 192.168.19.132:/backup/db3307/

#(8)在master02上进行恢复备份和启动mysql容器

docker-compose -f /temp/docker/mysql3307/mysql3307.yaml down
rm -rf /mysql3307/data/*
innobackupex --defaults-file=/mysql3307/conf/my.cnf --apply-log --redo-only /backup/db3307/2019-03-02_23-13-39/
innobackupex --defaults-file=/mysql3307/conf/my.cnf --copy-back /backup/db3307/2019-03-02_23-13-39/
docker-compose -f /temp/docker/mysql3307/mysql3307.yaml up -d

#(9)在master02上查看完整备份的已执行过的gtid

[root@fs02 ~]# cat /backup/db3307/2019-03-02_23-13-39/xtrabackup_binlog_info
master01.000004 2028    97c3fe88-3cfc-11e9-b08a-0242ac120002:1-7147

#(10)在master02上进入容器的mysql, 跳过已执行过的GTID和设置master01作为master02的从

docker exec -it mysql3307 bash
root@mysql3307:/# mysql -uroot -p123456
mysql> reset master;
mysql> set @@global.gtid_purged=‘97c3fe88-3cfc-11e9-b08a-0242ac120002:1-7147‘;
mysql> change master to master_host=‘192.168.19.131‘,master_user=‘rep‘,master_password=‘rep‘,master_port=3307,master_auto_position=1;
mysql> start slave;


主从复制没有问题

#(11)回到master01上, 配置master02作为master01的从

docker exec -it mysql3307 bash
mysql -uroot -p123456
mysql>change master to master_host=‘192.168.19.132‘,master_user=‘rep‘,master_password=‘rep‘,master_port=3307,master_auto_position=1;
mysql>start slave


主从复制没有问题

#(12)分别在master01上和master02上创建一些数据进行验证

原文地址:https://blog.51cto.com/1000682/2357165

时间: 2024-08-05 13:02:32

mysql5.6版本基于GTID双主-docker方式-主库有数据的相关文章

mysql5.6版本基于GTID双主-docker方式-新环境没有数据

#(0)环境规划 mysql版本:5.6 master01 : 192.168.19.131 master02 : 192.168.19.132 #(1)安装docker和docker-compose curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce-17.06.0.ce-1.el7.cento

mysql5.7.24 gtid双主复制+atlas+keepalived

一环境介绍: 系统: centos7 [root@mgr01 ~]# cat /etc/hosts 10.0.0.6 pxc01 10.0.0.7 pxc02 [root@pxc02 ~]# cat /etc/hosts 10.0.0.6 pxc01 10.0.0.7 pxc02 关闭selinux:vim /etc/sysconfig/selinuxgetenforce 保证服务器时间同步: ntpdate ntp1.aliyun.com */5 * * * * ntpdate ntp1.al

mysql5.6,基于GTID的主从同步与延迟复制

GTID相关: 在mysql5.6之前,mysql主从复制是slave通过配置master的binlog位置实现的,且每一个slave自身的binlog却不同.而在mysql5.6版本后引入了GTID(全局事务标识符),这个值在master生成,slave只要在开启主从复制时指定master的用户,密码,就可获取master的GTID实现同步,而无需再每次去查看master的binlog位置,大大方便了主从同步的配置.GTID的唯一性强化了数据的主备一致性,故障恢复,以及容错能力. 延迟复制相关

MySQL5.6.x 基于GTID的多线程复制-安装配置

操作系统: RHEL6 Or CentOS6 x86_64 mysql 版本: mysql-5.6.20 服务器IP: 10.57.1.131 MySQL-Master 10.57.1.132 MySQL-Slave 一.yum安装mysql # 下载mysql的rpm包 mkdir -pv /root/soft cd /root/soft #这里提供三个版本的官方64位rpm下载路径,根据自己的系统平台选择对应的rpm下载 # RHEL6 And CentOS6 x86_64 的rpm包 wg

初识MariaDB之9——keepalive+GTID双主实现高可用

一.背景介绍 传统的主从复制架构下,尽管可以使用半同步的方式进行读写分离,但是主节点仍然存在单点隐患,在规模不大的情况下可以采用keepalive+双主的模式对主节点进行高可用保护,客户端通过VIP访问MySQL服务器 二.实现方式 keepalive是通过vrrp协议实现,之前有过介绍这里不多赘述,要注意的是在云主机是禁用vrrp协议的.本次实验采用CentOS7.4,数据库版本为MariaDB-10.2.14,2台MySQL服务器互为主从,172.16.10.30/24为keepalived

MySQL-5.6.14基于GTID及多线程的复制

实验环境 RHEL-6.6-x86_64 两台主机 MASTER 192.168.1.5      hostname : master.mingxiao.info SLAVE 192.168.1.6         hostname : slave.mingxiao.info GTID简介 GTID(Global Transaction Identifier)是每一个事务提交时创建的一个全局唯一的标示符. GTID由UUID:TID组成. MySQL的UUID是怎么获得的呢?当启动MySQL时,

CentOS6.8下MySQL5.6.40基于GTID主从及多线程复制

大纲 一 GTID简介 二 环境准备 三 数据库的安装 四 基于GTID主从配置步骤 五 验证GTID复制功能 一 GTID简介 GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号.GTID实际上是由UUID+TID组成的.其中UUID是一个MySQL实例的唯一标识.TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增.下面是一个GTID的具体形式3E11FA47-71CA-11E1-9E33-C80AA9429562:23更详

MariaDB、MySQL双主互备模型同步数据

MySQL双主互备即两台MySQL服务器同时是主服务器,而同时又是对方的从服务器,这样可以分担主服务器的一部分写请求,因为如果是单主模型的话数据写入只能写入在一台MySQL服务器,而双主模型则可同时写在两台服务器上,有效加快了写入的速度,而且还能提供数据的备份功能. 环境如下: server1:CentOS 6.5 x86_64 mariadb 10.0.10 IP:192.168.10.204 server2:CentOS 6.5 x86_64 mariadb 10.0.10  IP:192.

mysql5.7.26 基于GTID的主从复制环境搭建

简单工作原理: (1)从库执行 change master to 语句,会立即将主库信息记录到master.info中 (2)从库执行 start slave语句,会立即生成IO_T和SQL_T (3)IO_T 读取master.info文件,获取到主库信息 (4)IO_T 连接主库,主库会立即分配一个DUMP_T,进行交互 (5)IO_T 根据master.info binlog信息,向DUMP_T请求最新的binlog (6)主库DUMP_T,经过查询,如果发现有新的,截取并反回给从库IO_