Mysql基础——复制

2020-07-11  本文已影响0人  chase_lwf

内容

一 复制的方式有哪些

二 异步复制基本过程

2.1主从同步涉及的几个主要关键点:

三个线程:

两种binlog消费点记录方式:

2.2 复制过程:
1.从库change to master,连接上master,并发送相关账号 密码 binlog 同步位置点等给master;
2.master收到从库来的binlog接收消息,开启dump线程,dump线程将binlog event从1中的位置点源源不断的发送给从库;
3.从库io线程将接收到binlog event写入到relay-log;
4.从库sql线程从relay-log消费binlog event,解析event,将变更同步到从数据库,完成同步;

具体实现步骤:
1. 主库锁库: FLUSH TABLES WITH READ LOCK,防止在dumper过程中主库有数据写入;
2. dump主库全量数据到sql;
3. 查看主库现在的binlog文件和位置(找出File和Position) ,并记录好这个信息;
show master status; 
4. 主库解锁-》UNLOCK TABLES;
5. 从库全量同步主库的数据;
6. 从库全量同步主库数据完毕,进行检查,show slave status \G;
7. 如果数据一致,开始增量同步,change master,连接上master,并发3中记录的binlog位置信息发送给master;
CHANGE MASTER TO
MASTER_HOST='....',
MASTER_USER='....',
MASTER_PASSWORD='..',
MASTER_LOG_FILE='mysql-bin.0000001',
MASTER_LOG_POS=1;
8.start slave

注:更详细步骤可以看:[https://www.jianshu.com/p/7bfacf149d55](https://www.jianshu.com/p/7bfacf149d55)

三 binlog

3.1 binlog查看基本语句

show master status :查看主当前使用的binlog文件、写入的位置点、gtid等
show binary logs: 查看binlog 列表;
show binlog events in 'binlog.000003': 查看某个binlog 文件的详细event;
flush logs: 从新开始写一个新的binlog;
mysqlbinlog --base64-output=DECODE-ROWS -v binlog.000001 :查看binlog详细内容

3.2 binlog 有哪些类型?

binlog 有三种格式, 由binlog_format参数指定,binlog_format=ROW/STATEMENT/MIXED

3.3 和binlog相关的主要参数有哪些?

3.3 binlog event

  1. 事务开始时,执行的BEGIN操作。
  2. STATEMENT格式中的DML操作(STATEMENT 增删改)
  3. ROW格式中的DDL操作

用于row格式,在记录DML语句的数据时,总会先写入一个table_map_event,这种类型的event用于记录表结构相关元数据信息,比如数据库名称,表名称,表的字段类型,表的字段元数据等等

四 gtid

4.1 gtid是什么

4.2 使用gtid进行主从复制

gtid_mode=ON#(必选)  ,开启gtid模式
log_bin=ON   #(必选)    
log-slave-updates=ON
enforce-gtid-consistency=ON  #强制gtid一致性(必选), 保证gtid安全,因为开启grid_mode以后,许多MySQL的SQL和GTID是不兼容的。比如开启ROW 格式时,CREATE TABLE ... SELECT,在binlog中会形成2个不同的事务,GTID无法唯一

MySQL5.7.13 or higher

gtid_mode=ON(必选)  
enforce-gtid-consistency=ON(必选)
log_bin=ON(可选)--高可用切换,最好设置ON  
log-slave-updates=ON(可选)--高可用切换,最好设置ON

开启gtid模式后,就可以使用gtid来进行主从复制,在从库执行以下语句就可以自动的进行复制:

mysql> CHANGE MASTER TO \
    -> MASTER_HOST = '', \
    -> MASTER_PORT = 3306, \
    -> MASTER_USER = 'test', \
    -> MASTER_PASSWORD = '', \
    -> MASTER_AUTO_POSITION = 1;

4.3 gtid原理

4.4 mariadb gtid复制

mariadb的gtid有domainId serverId和tranctionId组成,长domainId-serverId-tranctionId这个样子,如下:0-2967541547-12869203,每个gtid event标识下一个事务event group所使用的全局事务id。mariadb可以通过如下语句一个slave加入某个master的备机中,进行主从复制:

CHANGE MASTER TO master_host="127.0.0.1", master_port=3306, master_user="root", master_use_gtid={ slave_pos | current_pos | no };
MariaDB [(none)]> show variables like '%gtid%';
+-------------------------+--------------------------------------------+
| Variable_name           | Value                                      |
+-------------------------+--------------------------------------------+
| gtid_binlog_pos         | 0-2967541547-12869500                      |
| gtid_binlog_state       | 0-622864171-10710441,0-2967541547-12869500 |
| gtid_cleanup_batch_size | 64                                         |
| gtid_current_pos        | 0-2967541547-12869500                      |
| gtid_domain_id          | 0                                          |
| gtid_ignore_duplicates  | OFF                                        |
| gtid_pos_auto_engines   |                                            |
| gtid_seq_no             | 0                                          |
| gtid_slave_pos          | 0-622864171-10710441                       |
| gtid_strict_mode        | OFF                                        |
| last_gtid               |                                            |
| wsrep_gtid_domain_id    | 0                                          |
| wsrep_gtid_mode         | OFF                                        |
+-------------------------+--------------------------------------------+

引用

上一篇下一篇

猜你喜欢

热点阅读