一:GTID工作流程图

二:什么是GTID

三:配置主从复制

四:说明




1.1 GTID工作流程图

wKiom1WhIrPzlen4AAE6CZfkVPc295.jpg




2.1 什么是GTID

GTID:是一个全局唯一标识,128位的随机符,并结合事务的ID号来组合成一个唯一的标识某一个主机上某一个事务的标识码


在binlog中,每一个事务的首部,都会写上GTID的标识,因此,GTID使得追踪和比较复制事务,变得非常简单,而且能够从奔溃中快速进行恢复




3.1主从配置以及参数说明

【Master】

#数据目录位置
datadir = /MySQL_DATA
 
#端口
port = 3306
 
#server_id
server_id = 1
 
#sock文件位置
socket= /tmp/mysql.sock
 
 
#每张表一个表文件
innodb_file_per_table=1
 
#区分大小写
lower_case_table_names=1
 
#PID文件位置
pid_file=/tmp/master.pid
 
#二进制日志文件位置
log_bin=/MySQL_BIN_LOG/master-bin
 
#二进制日志索引文件
log_bin_index=/MySQL_BIN_LOG/maste-bin.index
 
#二进制日志文件格式
binlog_format=ROW
 
 
#当从服务器上从中继日志中读取事件在本地应用的时候,是否把这个事件写操作的相关操作记录到本地的二进制日志,
#为了GTID的复制安全,需要启用此选项
log_slave_updates=true
 
#是否启用GTID的功能
gtid_mode=on
 
 
 
#是否强制GTID具有其的一致×××
enforce_gtid_consistency=true
 
#在GTID模式下,每一个从服务器,在联入主服务器的时候,必须要告诉主服务器,自己是谁
report_port=3306
report_host=192.168.1.112
 
 
#master_info_repository,relay_log_info_repository启动此两项,可用于实现在奔溃时保证二进制及从服务器的安全的功能
 
#用于让主服务器记录,每一个从服务器的连接信息,
#以及每一个从服务器所复制的二进制日志文件文件名及其相关的事件位置等,
#记录到文件中(master.info)还是记录到表中(mysql.slave_master_info)
master_info_repository=TABLE
 
 
 
#让从服务器自己记录,自己连的主服务器是谁,
#主服务器哪一个二进制日志文件以及这个二进制日志文件的什么位置,
#记录到文件中(relay-log.info)还是表中(mysql.slave_relay_log_info)
relay_log_info_repository=TABLE
 
 
#启用可确保无信息丢失,每个事件都同步master_info_repository,
relay_log_info_repository的信息到表
sync_master_info=1
 
 
 
#设定从服务器的SQL线程数,0表示关闭多线程复制功能
slave_parallel_workers=2
 
 
#binlog_checksum,master_verify_checksum, 
#slave_sql_verify_checksum启用复制有关的所有校验功能
#binlog_checksum主服务器端在启动的时候是否校验binlog的校验码,比如主服务器奔溃了,
#下次启动的时候,
#如果它发现这个binlog的校验码和上一次宕机时候的校验码不一样的话,它会拒绝读取
binlog_checksum=CRC32
master_verify_checksum=1
slave_sql_verify_checksum=1
 
 
#启用可用于在二进制日志详细记录事件相关信息,可降低故障排除的复杂度
binlog_rows_query_log_events=1
 
 
#数据不在二进制日志缓冲区中缓冲,直接写到二进制日志文件
sync_binlog=1
 
 
#半同步配置
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
 
 
 
#SSL加密配置
ssl
ssl_ca  = /usr/local/mysql/ssl/cacert.pem      #指定CA文件位置
ssl_cert= /usr/local/mysql/ssl/master.crt      #指定证书文件位置
ssl_key  = /usr/local/mysql/ssl/master.key      #指定密钥所在位置






【Slave】

#数据目录
datadir = /MySQL_DATA
 
#端口
port = 3306
 
#server_id
server_id = 2
 
#sock文件位置
socket = /tmp/mysql.sock
 
 
#二进制日志
log-bin=/MySQL_BIN_LOG/slave-bin
 
#二进制日志格式
binlog_format=ROW
 
#每张表一个表文件
innodb_file_per_table=1
#区分大小写
lower_case_table_names=1
 
#PID文件位置
pid_file=/tmp/slave.pid
 
#中继日志
relay_log=/MySQL_DATA/relay-log
 
#中继日志索引文件
relay_log_index=/MySQL_DATA/relay-log.index
 
 
#当从服务器上从中继日志中读取事件在本地应用的时候,是否把这个事件写操作的相关操作记录到本#地的二进制日志,
#为了GTID的复制安全,需要启用此选项
log_slave_updates=true
 
#是否启用GTID的功能
gtid_mode=on
 
 
#是否强制GTID具有其的一致×××
enforce_gtid_consistency=true
 
#在GTID模式下,每一个从服务器,在联入主服务器的时候,必须要告诉主服务器,自己是谁
report_port=3306
report_host=192.168.1.113
 
 
#master_info_repository,relay_log_info_repository启动此两项,
#可用于实现在奔溃时保证二进制及从服务器的安全的功能
 
#用于让主服务器记录,每一个从服务器的连接信息,
#以及每一个从服务器所复制的二进制日志文件文件名及其相关的事件位置等,
#记录到文件中(master.info)还是记录到表中(mysql.slave_master_info)
master_info_repository=TABLE
 
 
#让从服务器自己记录,自己连的主服务器是谁,
#主服务器哪一个二进制日志文件以及这个二进制日志文件的什么位置,
#记录到文件中(relay-log.info)还是表中(mysql.slave_relay_log_info)
relay_log_info_repository=TABLE
 
 
#启用可确保无信息丢失,每个事件都同步master_info_repository,
#relay_log_info_repository的信息到表
sync_master_info=1
 
#binlog_checksum,master_verify_checksum, 
#slave_sql_verify_checksum启用复制有关的所有校验功能
#binlog_checksum主服务器端在启动的时候是否校验binlog的校验码,比如主服务器奔溃了,
#下次启动的时候,
#如果它发现这个binlog的校验码和上一次宕机时候的校验码不一样的话,它会拒绝读取
binlog_checksum=CRC32
master_verify_checksum=1
slave_sql_verify_checksum=1
 
#启用可用于在二进制日志详细记录事件相关信息,可降低故障排除的复杂度
binlog_rows_query_log_events=1
 
 
#半同步设置
rpl_semi_sync_slave_enabled=1
 
 
#设置从服务器只读
read_only=1
 
 
#SSL配置
ssl
ssl_ca  = /usr/local/mysql/ssl/cacert.pem
ssl_cert= /usr/local/mysql/ssl/slave.crt
ssl_key  = /usr/local/mysql/ssl/slave.key




3.2从服务器连接主服务器

mysql>CHANGE MASTER TO
    -> MASTER_HOST='192.168.1.112',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_AUTO_POSITION=1,
    -> MASTER_SSL=1,
    ->MASTER_SSL_CA='/usr/local/mysql/ssl/cacert.pem',
    ->MASTER_SSL_CERT='/usr/local/mysql/ssl/slave.crt',
    ->MASTER_SSL_KEY='/usr/local/mysql/ssl/slave.key';




4.1说明

MySQL5.6的半同步复制,和配置SSL和MySQL5.5一样