mysql 主从复制 row_MySQL主从复制之ROW+GTID

本文介绍了MySQL主从复制的优势,包括负载均衡、数据安全和高可用性。详细阐述了二进制日志的STATEMENT、ROW和MIXED三种格式,推荐使用ROW格式,并解释了ROW格式的优缺点。此外,文章讨论了基于GTID的复制,分析其优缺点,并提供了一主一从部署的详细步骤,包括配置参数、创建复制用户、数据备份与导入、设置change master及启动从库等操作。
摘要由CSDN通过智能技术生成

一、基础:

1.复制主要有3点好处

1)实现在不同服务器上的数据分布,可以将数据读取进行负载均衡;

2)增强了数据安全性,减少主库的connections,可以实现数据高可用和故障切换;

3)实现数据库在线升级

2.二进制日志3种格式

1)STATEMENT格式

优点:日志记录量相对较小,节约磁盘及网络I/0;

缺点:对UUID(),USER(),这样的函数存在BUG

2)ROW格式

优点:使MySQL主从复制更加安全

缺点:记录日志量较大

3)MIXED格式

根据SQL语句由系统决定是基于段还是基于行来进行复制

推荐使用:binlog_format=row

3.MySQL复制原理(直接上图)

e13d0ac22d6b09f3ce8f4d5fca7f1ffb.png

1)主将变更写入二进制日志;

2)从读取主的二进制日志变更,并写入到relay_log中;

3)在从上重放relay_log中的日志,如果基于段的复制,则在从上重新执行记录的SQL。如果基于行的复制,则在从库上直接对数据库进行修改;

4.基于GTID复制的优缺点

1)什么是GTID

GTID即全局事务ID,其保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的ID

GTID=source_id:transaction_id

2)优点:可以很方便的进行故障转移,从库不会丢失主库上的任何修改

3)缺点:故障处理比较复杂,对执行的SQL有一定的限制

二、部署

环境:一主一从

主IP:192.168.20.206

从IP:192.168.20.212

需要3个步骤:

1.修改主库的my.cnf参数,并创建复制账户,备份出数据库数据,导入到从库中;

2.修改从库的my.cnf参数,导入备份数据;

3.在从库中执行使用change master 、start slave命令搞定

1.1)修改主库my.cnf文件

vim /etc/my.cnf

[mysqld]

server_id                                           = 1

#: for binlog

binlog_format                                = row

log_bin                                           = /data/mysql/mysql3306/logs/mysql-bin

binlog_rows_query_log_events      = on

log_slave_updates                          = on

expire_logs_days                             = 7

binlog_cache_size                           = 65536

sync_binlog                                      =1

slave-preserve-commit-order         =ON

#: for gtid

gtid_mode                                       = on

enforce_gtid_consistency                = on

1.2)重启MySQL服务

service mysqld restart

1.3)创建复制用户

create user 'repl'@'192.168.20.%';

grant replication slave on *.* to 'repl'@'192.168.20.%' identified by '666666';

flush privileges;

1.4)备份数据,导入到从库中

mysqldump -uroot -p --master-data=2  --events --single-transaction --routines --triggers -S /tmp/mysql3306.sock -A -B >/opt/all.sql

scp all.sql 192.168.20.212:/opt/

2.1)修改从库my.cnf文件

[mysqld]

server_id                                           = 2

#: for binlog

binlog_format                                = row

log_bin                                           = /data/mysql/mysql3306/logs/mysql-bin

binlog_rows_query_log_events      = on

log_slave_updates                          = on

expire_logs_days                             = 7

binlog_cache_size                           = 65536

sync_binlog                                      =1

slave-preserve-commit-order         =ON

#: for gtid

gtid_mode                                       = on

enforce_gtid_consistency                = on

2.2)重启MySQL服务

service mysqld restart

2.3)在从库清空二进制日志,记住是在从库执行,需要反复确认,慎用!

reset master;

2.4)将备份数据导入到从库中

mysql -uroot -p -S /tmp/mysql3306.sock

3.1)在从库中执行change master语句

change master to master_host='192.168.20.206',master_user='repl',master_password='666666',master_auto_position=1;

3.2)在从库中执行start slave;

start slave;

083baac08978125d37473b1cbf53229e.png

如果执行show slave status \G

出现这样的两个Yes

搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值