mysql gtid 主从配置_mysql 通过GTID配置主从复制(windows版本)

mysql版本:mysql-5.7.20-winx64

主从复制介绍:

1 复制概述

Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

1.1 mysql支持的复制类型:

(1):基于语句的复制:  在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。

一旦发现没法精确复制时,   会自动选着基于行的复制。

(2):基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持

(3):混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

1.2 . 复制解决的问题

MySQL复制技术有以下一些特点:

(1)    数据分布 (Data distribution )

(2)    负载平衡(load balancing)

(3)    备份(Backups)

(4)    高可用性和容错行 High availability and failover

1.3 复制如何工作

整体上来说,复制有3个步骤:

(1)    master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

(2)    slave将master的binary log events拷贝到它的中继日志(relay log);

(3)    slave重做中继日志中的事件,将改变反映它自己的数据。

下图描述了复制的过程:

0_1330439010P7lI.gif

该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

2 主从配置

配置主mysql的my.ini文件。上代码:

1 [mysql]2 # 设置mysql客户端默认字符集3 default-character-set=utf84 [mysqld]5 #设置3306端口6 port = 3306

7 # 设置mysql的安装目录8 basedir=E:\mysql\mysql-5.7.20-winx649 # 设置mysql数据库的数据的存放目录10 datadir=E:\mysql\mysql-5.7.20-winx64\data11 # 允许最大连接数12 max_connections=200

13 # 服务端使用的字符集默认为8比特编码的latin1字符集14 character-set-server=utf815 # 创建新表时将使用的默认存储引擎16 default-storage-engine=INNODB17 #GTID:主18 #服务器id19 server_id=1

20 #开启gtid模式21 gtid_mode=on22 #强制gtid一致性,开启后对于特定create table不被支持23 enforce_gtid_consistency=on24

25 #binlog26 log_bin=master-binlog27 log-slave-updates=1

28 #强烈建议,其他格式可能造成数据不一致29 binlog_format=row30

31 #relay log32 skip_slave_start=1

配置从mysql的my.ini文件

上代码:

[mysql]

# 设置mysql客户端默认字符集default-character-set=utf8

[mysqld]

#设置3306端口

port= 3306# 设置mysql的安装目录

basedir=E:\mysql\mysql-5.7.20-winx64

# 设置mysql数据库的数据的存放目录

datadir=E:\mysql\mysql-5.7.20-winx64\data

# 允许最大连接数

max_connections=200# 服务端使用的字符集默认为8比特编码的latin1字符集

character-set-server=utf8

# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB

#GTID:从

#服务器id

server_id=2#开启gtid模式

gtid_mode=on

#强制gtid一致性,开启后对于特定create table不被支持

enforce_gtid_consistency=on

#binlog

log_bin=master-binlog

log-slave-updates=1#强烈建议,其他格式可能造成数据不一致

binlog_format=row

#relay log

skip_slave_start=1

操作:

主库进入mysql:

#如果配置了mysql环境变量,直接CMD管理员。

mysql-u root -p

#赋权 给从库salve权限

GRANT REPLICATION SLAVE ON*.* to 'slave'@'从库IP地址' identified by 'password';

#刷新权限

flush privileges

从库进入mysql

change master to master_host='主库IP地址',master_user='user',master_password='password',master_port=3306,master_auto_position=1;

注意: 以上操作适用于主库和从库数据一致,或者主从都没有数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值