复制状态与变量记录表,C与援用和变量复制

日期:2019-09-17编辑作者:科技

原标题:复制状态与变量记录表 | performance_schema全方位介绍(六)

server_id是必得设置在master和每种slave上的独一标记ID,其取值范围 是1~4294967295里面,且同三个复制组之内不能够重复
server_uuid:server_uuid会在GTID复制中应用。当MySQL运行之后,会 首先到数据文件目录下的auto.cnf中追寻是还是不是有钦点的server_uuid,如果未有找到,则本身生成三个server_uuid并保存到那一个文件中

server_id是必需设置在master和各种slave上的独一标志ID,其取值范围 是1~4294967295之内,且同三个复制组之内不能重复
server_uuid:server_uuid会在GTID复制中接纳。当MySQL运营之后,会 首先到数据文件目录下的auto.cnf中搜索是或不是有钦命的server_uuid,若无找到,则自个儿生成贰个server_uuid并保存到那一个文件中

int& r = i; 和 int r = i; 差异之处应该是内部存款和储蓄器的分红吧,前面一个会再开拓二个内部存款和储蓄器空间

图片 1

log_slave_updates:该参数用来决定是还是不是将吸收接纳的主库的翻新数据的口舌也记录在slave本人的bin log中。平常情状下是无需记录的,但倘使是想 创造级联复制关系,比方A -> B -> C,这里面B既要作为A的从库,也要作 为C的主库,则须要既开启log-bin参数,也要拉开log_slave_updates参数
relay-log:该参数用来钦点relay-log文件的根基名称,暗中认可的称号为 host_name-relay-bin.xxxx,个中的xxxx结尾是逐条递增的数字

log_slave_updates:该参数用来调整是不是将接收的主库的更新数据的讲话也记录在slave本身的bin log中。平常处境下是无需记录的,但就算是想 创制级联复制关系,比方A -> B -> C,那在那之中B既要作为A的从库,也要作 为C的主库,则必要既开启log-bin参数,也要展开log_slave_复制状态与变量记录表,C与援用和变量复制。updates参数
relay-log:该参数用来钦命relay-log文件的基本功名称,默许的称呼为 host_name-relay-bin.xxxx,个中的xxxx结尾是各样递增的数字

图片 2

出品 沃趣科学和技术

replicate-do-db:该参数用来钦赐需求复制的数据库。 在依据语句复制的条件中,钦赐该参数之后,则slave的SQL thread进程只会选拔在本数据库下的目的相关的语句。假使有多少个数据库必要复制,则这几个参数要使用频仍。但如倘诺关联到跨库操作语句,则复制会放弃,举个例子: replicate-do-db=sales

replicate-do-db:该参数用来钦点必要复制的数据库。 在遵照语句复制的条件中,钦定该参数之后,则slave的SQL thread进度只会采纳在本数据库下的指标相关的讲话。假若有三个数据库需求复制,则那个参数要使用频仍。但假如是关联到跨库操作语句,则复制会放任,比方: replicate-do-db=sales

#includeusing namespace std;

IT从业多年,历任运转技术员,高端运转程序猿,运转CEO,数据库程序猿,曾到场版本发表体系,轻量级监控体系,运行管理平台,数据库管理平台的安插与编辑,熟识MySQL的体系布局时,InnoDB存款和储蓄引擎,喜好专研开源本事,追求完善。

USE prices;
UPDATE sales.january SET amount=amount 1000; 
USE prices;
UPDATE sales.january SET amount=amount 1000; 

int main ()

神不知鬼不觉中,performance_schema种类快要临近尾声了,今日将辅导我们共同踏上密密麻麻第六篇的道路(全系共6个篇章),在这一期里,我们将为我们无所不至授课performance_schema中的复制状态与变量计算表。下面,请随行大家一块起来performance_schema系统的学习之旅吧~

在凭仗行复制的意况中,只要数据库对象是点名的库,则复制都能健康,比方上述update语句由于january表是属于sales库的,则slave会复制并应用 ,同样上面包车型客车口舌在依靠行复制的条件中也不会执行:

在依据行复制的条件中,只要数据库对象是钦赐的库,则复制都能平常,举例上述update语句由于january表是属于sales库的,则slave会复制并应用 ,同样上边包车型客车言辞在根据行复制的情状中也不会推行:

{

01

USE sales;
UPDATE prices.march SET amount=amount-25;
USE sales;
UPDATE prices.march SET amount=amount-25;

int i;

复制音讯总括表

在slave的my.cnf上设置replicate-do-db=test,重启mysql

在slave的my.cnf上设置replicate-do-db=test,重启mysql

int& r = i;

一般说来,DBA或有关数据库运转人士在翻看从库的复制相关的音讯,都习惯性的利用show slave status语句查看。只怕你会说,笔者也会用performance_schema下的表查看一些复制报错新闻什么的。不过,你了解show slave status语句、mysql系统库下的复制消息记录表、performance_schema系统库下的复制音讯记录表之间有怎么样不相同吗?不知晓?别急,本文就要为您详细介绍show slave status语句与performance_schema系统库下的复制新闻记录表的界别(mysql系统库下的复制表差距详见后续 "mysql系统库全方位介绍"连串)。

在讲话复制情况下查看对点名数据库的修改操作:

在讲话复制遇到下查看对点名数据库的修改操作:

i = 5;

在始发详细介绍每一张复制音讯表此前,大家先开销一些篇幅来完全认知一下这个表。

[mysqld]
binlog-format=statement
主库上执行:
mysql> use test;
mysql> update test2.temp set name='ddd';
mysql> use test2;
mysql> update test.temp set name='eee';
在从库上查看复制结果:
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from temp; 
-- 虽然是指定的同步数据库但并没有同步
  ------ ------ 
 | id | name |
  ------ ------ 
 | 1|abc|
 | 2|abc|
 | 3|abc|
 | 4|abc|
 | 5|abc|
  ------ ------ 
mysql> use test2;
mysql> select * from temp;
  ------ ------ 
 | id | name |
  ------ ------ 
 |10|ddd|
 |11|ddd|
 |12|ddd|
##虽然不是指定的同步数据库但数据有同步
[mysqld]
binlog-format=statement
主库上执行:
mysql> use test;
mysql> update test2.temp set name='ddd';
mysql> use test2;
mysql> update test.temp set name='eee';
在从库上查看复制结果:
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from temp; 
-- 虽然是指定的同步数据库但并没有同步
  ------ ------ 
 | id | name |
  ------ ------ 
 | 1|abc|
 | 2|abc|
 | 3|abc|
 | 4|abc|
 | 5|abc|
  ------ ------ 
mysql> use test2;
mysql> select * from temp;
  ------ ------ 
 | id | name |
  ------ ------ 
 |10|ddd|
 |11|ddd|
 |12|ddd|
##虽然不是指定的同步数据库但数据有同步

cout << "Value of i : " << i << endl;

performance_schema 系统库下提供了如下多少个与复制状态相关的表(表含义详见本文后续小节):

在行复制情况下查看对点名数据库的退换操作:

 mysql> show variables like '%binlog_format%';
  --------------- ------- 
 | Variable_name | Value |
  --------------- ------- 
 | binlog_format | ROW |
  --------------- ------- 

主库上实践:

mysql> use test;
mysql> update test2.temp set name='bcd';
mysql> use test2;
mysql> update test.temp set name='abc';
在从库上查看复制结果:
mysql> use test;
mysql> select * from temp; ##数据已复制
  ------ ------ 
 | id | name |
  ------ ------ 
 | 1|abc|
 | 2|abc|
 | 3|abc|
 | 4|abc|
 | 5|abc|
  ------ ------ 
mysql> use test2;
mysql> select * from temp; ##数据未复制
 ------ ------ 
| id | name |
 ------ ------ 
| 10 | aa |
| 11 | bb |
| 12 | cc |
 ------ ------ 

另五个依照SQL语句复制和依照行复制的界别在于当语句中包含对多少个数据库的表进行操作时。比方设置replicate-do-db=db1,

USE db1;
UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20; 

依据SQL语句的复制会将table1和table2都在备库修改,而凭借行的复制只会在备库修改 table1表

USE db4;
UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20; 

而对于上述讲话来讲,基于SQL语句的复制不会在备库修改任何表,而据书上说行的复制会 在备库修改table1表 若是期待跨库的update语句在多少个库上都起效果,能够行使replicate-do- table=db_name.tbl_name

replicate-ignore-db:该参数决定了忽略钦命数据库的复制,其一颦一笑和replicate-do-db 正好相反
replicate-do-table=db_name.tbl_name:通过该参数告知slave的SQL thread仅复制指 定表上的数量。倘使有多个表,则该参数要运用频繁
replicate-ignore-table=db_name.tbl_name:通过该参数告知slave的SQL thread将指 定表上的多寡过滤掉
replicate-wild-do-table=db_name.tbl_name:通过该参数告知SQL的SQL thread仅复 制符合相称的表,能够动用_和%作为通配符。比方replicate-wild-do- table=foo%.bar%意味复制以foo打头的数据库下有所bar打头的表数据。即便是 replicate-wild-do-table=foo%.%,则象征即复制foo打头的全体表的数量,也复制 create/drop/alter database foo打头的命令
replicate-wild-ignore-table=db_name.tbl_name:通过该参数告知SQL的SQL thread 过滤掉符合相称的表

设置replicate-do-table参数,重启mysql:
[mysqld]
replicate-do-db=test
replicate-do-table=test.temp

slave-parallel-workers: 该参数决定了slave上运维多少个SQL thread线程来并行应用数据的。私下认可值是0代表不容许并行,取值范围能够是0~1024
[mysqld] slave-parallel-workers=5

skip-slave-start :该参数决定了在MySQL运转时是不是先不运维slave线程,即暂停复 制

[mysqld] 
skip-slave-start=1

slave-parallel-type=type :该参数决定了当运营了互动之后,选拔什么粒度的并行格局。暗中同意值database代表依据分裂的数据库施行并行,LOGICAL_CLOCK则意味着依照在binlog中的一组提交的业务作为并行粒度
slave-skip-errors=[err_code1,err_code2,...|all|ddl_exist_errors]:该参数决定了当slave的SQL thread实践进度中遭受何种错误时得以忽略并承接袭下去的数码复制。经常状态下当有荒唐发生时,复制会甘休而要求人工干预修复才干继续开展。除非特别自信能够忽略有个别错误,不然不要选择这些参数,不然会产生固然复制实践平日,但其实当中的数目已经完全不雷同

sql_slave_skip_counter代表在非GTID复制意况下,通过安装此参数来跳过多少个复制事件。 设置完该参数实际不是登时生效,而是要等待后一次start slave命令的实行生效,并将该参数再度设 置为0
log-bin[=base_name]:该参数表示是还是不是开启binary log。暗中认可景况下MySQL会利用 host_name-bin.xxxx作为文件的名字,当中xxxx是以数字递增的后缀。固然该参数钦定了 base_name,则二进制文件会以base_name.xxxx来命名
binlog-do-db=db_name: 该参数决定了怎样库下的改换会被记录到bin log中。其表现与 replicate-do-db类型,在根据SQL语句复制的境况下,只记录在当下数据库下的改动。比方钦命binlog-do-db=sales,一下语句不会被记录到bin log中:

USE prices;
UPDATE sales.january SET amount=amount 1000;

而以下语句则会被记录到bin log中:

USE sales; UPDATE prices.discounts SET percentage = percentage   10; 

而听说行复制的条件下,独有属于钦点数量的语句才会被记录到bin log中。举个例子下边的语句会被记录:

USE prices; 
UPDATE sales.february SET amount=amount 100; 
-- 而下面的语句则不会被记录:
USE sales; 
UPDATE prices.march SET amount=amount-25; 
-- 针对跨库的语句来说,行为和replicate-do-db相同

binlog-ignore-db=db_name:该参数决定了在bin log中不经意的数据库,其一言一动与 replicate-ignore-db类型

binlog_format:该参数决定了bin log中著录的格式,能够是statement,row,mixed,分别 代表基于SQL语句的复制,基于行复制和基于混合复制。在5.7.7本子从前的默许设置是 statement,在5.7.7及今后,则暗许是row。当设置为混合格局时,则优先利用statement, 只有当基于语句的复制不可能担保复制的标准时会自动替换为row

反省复制状态方法

SHOW SLAVE STATUSG
Slave_IO_State:    -- 代表当前slave的状态
Slave_IO_Running:     -- 代表负责读取主库bin log的IO线程是否是运行状态,正常情况下应 该是YES
Slave_SQL_Running:    -- 代表负责执行备库relay log的SQL线程是否是运行状态,正常情 况下应该是YES
Last_IO_Error, Last_SQL_Error:    -- 分别代表最后一次IO线程和SQL线程所发生的错误, 正常情况下应该是空代表没有错误 
Seconds_Behind_Master:    -- 代表备库的SQL线程比主库的bin log晚多少秒。0代表目前 没有复制延迟
(Master_Log_file, Read_Master_Log_Pos):    -- 表示IO线程在主库bin log中的坐标位置 
(Relay_Master_Log_File, Exec_Master_Log_Pos):    -- 表示SQL线程在主库bin log中的坐 标位置
(Relay_Log_File, Relay_Log_Pos):    -- 表示SQL线程在备库relay log中的坐标位置

在主库能够由此试行show processlist命令查看主库的bin log日志生成进程

mysql> SHOW PROCESSLIST G;
*************************** 4. row ***************************
Id: 10
User: root
Host: slave1:58371
db: NULL
Command: Binlog Dump
Time: 777
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL

在行复制情况下查看对点名数据库的更动操作:

 mysql> show variables like '%binlog_format%';
  --------------- ------- 
 | Variable_name | Value |
  --------------- ------- 
 | binlog_format | ROW |
  --------------- ------- 

主库上实行:

mysql> use test;
mysql> update test2.temp set name='bcd';
mysql> use test2;
mysql> update test.temp set name='abc';
在从库上查看复制结果:
mysql> use test;
mysql> select * from temp; ##数据已复制
  ------ ------ 
 | id | name |
  ------ ------ 
 | 1|abc|
 | 2|abc|
 | 3|abc|
 | 4|abc|
 | 5|abc|
  ------ ------ 
mysql> use test2;
mysql> select * from temp; ##数据未复制
 ------ ------ 
| id | name |
 ------ ------ 
| 10 | aa |
| 11 | bb |
| 12 | cc |
 ------ ------ 

另二个遵照SQL语句复制和依赖行复制的分裂在于当语句中包蕴对七个数据库的表实行操作时。举个例子设置replicate-do-db=db1,

USE db1;
UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20; 

基于SQL语句的复制会将table1和table2都在备库修改,而传说行的复制只会在备库修改 table1表

USE db4;
UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20; 

而对于上述讲话来讲,基于SQL语句的复制不会在备库修改任何表,而基于行的复制会 在备库修改table1表 假设期望跨库的update语句在五个库上都起成效,能够运用replicate-do- table=db_name.tbl_name

replicate-ignore-db:该参数决定了忽略内定数据库的复制,其作为和replicate-do-db 正好相反
replicate-do-table=db_name.tbl_name:通过该参数告知slave的SQL thread仅复制指 定表上的数码。若是有多少个表,则该参数要利用频仍
replicate-ignore-table=db_name.tbl_name:通过该参数告知slave的SQL thread将指 定表上的数量过滤掉
replicate-wild-do-table=db_name.tbl_name:通过该参数告知SQL的SQL thread仅复 制符合相称的表,能够行使_和%当作通配符。举个例子replicate-wild-do- table=foo%.bar%代表复制以foo打头的数据库下具备bar打头的表数据。假诺是 replicate-wild-do-table=foo%.%,则意味即复制foo打头的全体表的数额,也复制 create/drop/alter database foo打头的授命
replicate-wild-ignore-table=db_name.tbl_name:通过该参数告知SQL的SQL thread 过滤掉符合相称的表

设置replicate-do-table参数,重启mysql:
[mysqld]
replicate-do-db=test
replicate-do-table=test.temp

slave-parallel-workers: 该参数决定了slave上运营七个SQL thread线程来并行应用数据的。私下认可值是0代表不容许并行,取值范围能够是0~1024
[mysqld] slave-parallel-workers=5

skip-slave-start :该参数决定了在MySQL运维时是还是不是先不运行slave线程,即暂停复 制

[mysqld] 
skip-slave-start=1

slave-parallel-type=type :该参数决定了当运转了互相之后,采Nash么样粒度的并行方式。暗中认可值database表示遵照分化的数据库实行并行,LOGICAL_CLOCK则代表遵照在binlog中的一组提交的政工作为并行粒度
slave-skip-errors=[err_code1,err_code2,...|all|ddl_exist_errors]:该参数决定了当slave的SQL thread实践进度中相遇何种错误时得以忽略并继承接下去的数量复制。平常状态下当有荒唐发生时,复制会结束而必要人工干预修复才具持续开展。除非特别自信能够忽略某个错误,不然不要使用那些参数,否则会变成即便复制试行常规,但其实个中的多寡已经完全不雷同

sql_slave_skip_counter代表在非GTID复制情况下,通过设置此参数来跳过多少个复制事件。 设置完该参数并非立时生效,而是要等待下一次start slave命令的进行生效,并将该参数再度设 置为0
log-bin[=base_name]:该参数表示是还是不是开启binary log。暗中认可情况下MySQL会利用 host_name-bin.xxxx作为文件的名字,个中xxxx是以数字递增的后缀。要是该参数钦点了 base_name,则二进制文件会以base_name.xxxx来命名
binlog-do-db=db_name: 该参数决定了什么库下的修改会被记录到bin log中。其一坐一起与 replicate-do-db类型,在凭仗SQL语句复制的景况下,只记录在脚下数据库下的修改。比方内定binlog-do-db=sales,一下语句不会被记录到bin log中:

USE prices;
UPDATE sales.january SET amount=amount 1000;

而以下语句则会被记录到bin log中:

USE sales; UPDATE prices.discounts SET percentage = percentage   10; 

而依据行复制的条件下,独有属于钦赐数量的语句才会被记录到bin log中。举例上面包车型客车语句会被记录:

USE prices; 
UPDATE sales.february SET amount=amount 100; 
-- 而下面的语句则不会被记录:
USE sales; 
UPDATE prices.march SET amount=amount-25; 
-- 针对跨库的语句来说,行为和replicate-do-db相同

binlog-ignore-db=db_name:该参数决定了在bin log中忽略的数据库,其一举一动与 replicate-ignore-db类型

binlog_format:该参数决定了bin log中记录的格式,能够是statement,row,mixed,分别 代表基于SQL语句的复制,基于行复制和依照混合复制。在5.7.7本子以前的私下认可设置是 statement,在5.7.7及之后,则暗许是row。当设置为混合形式时,则优用statement, 只有当基于语句的复制不能确认保证复制的标准时会自动替换为row

自己商讨复制状态方法

SHOW SLAVE STATUSG
Slave_IO_State:    -- 代表当前slave的状态
Slave_IO_Running:     -- 代表负责读取主库bin log的IO线程是否是运行状态,正常情况下应 该是YES
Slave_SQL_Running:    -- 代表负责执行备库relay log的SQL线程是否是运行状态,正常情 况下应该是YES
Last_IO_Error, Last_SQL_Error:    -- 分别代表最后一次IO线程和SQL线程所发生的错误, 正常情况下应该是空代表没有错误 
Seconds_Behind_Master:    -- 代表备库的SQL线程比主库的bin log晚多少秒。0代表目前 没有复制延迟
(Master_Log_file, Read_Master_Log_Pos):    -- 表示IO线程在主库bin log中的坐标位置 
(Relay_Master_Log_File, Exec_Master_Log_Pos):    -- 表示SQL线程在主库bin log中的坐 标位置
(Relay_Log_File, Relay_Log_Pos):    -- 表示SQL线程在备库relay log中的坐标位置

在主库能够通过试行show processlist命令查看主库的bin log日志生成进度

mysql> SHOW PROCESSLIST G;
*************************** 4. row ***************************
Id: 10
User: root
Host: slave1:58371
db: NULL
Command: Binlog Dump
Time: 777
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL

cout << "Value of i reference : " << r  << endl;

  • replication_applier_configuration
  • replication_applier_status
  • replication_applier_status_by_coordinator
  • replication_applier_status_by_worker
  • replication_connection_configuration
  • replication_connection_status
  • replication_group_member_stats
  • replication_group_members

cout << "Addr of i: " << &i << endl;

这几个复制表中著录的音信生命周期如下(生命周期即指的是那么些表中的音信曾几何时写入,哪天会被涂改,何时会被清理等):

cout << "Addr of r: " << &r << endl;

  • 在试行CHANGE MASTE奥迪Q5 TO在此以前,那些表是空的
  • 实施CHANGE MASTER TO之后,在布署参数表replication_applier_configuration和replication_connection_configuration中能够查阅到安顿消息了。此时,由于并未运维复制,所以表中THREAD_ID列为NULL,SERVICE_STATE列的值为OFF(那多少个字段存在与表replication_applier_status、replication_applier_status_by_coordinator、replication_applier_status_by_worker、replication_connection_status几个表中)
  • 实施START SLAVE后,能够观察连接线程和协和器线程,专门的学业线程状态表中的THREAD_ID字段被分配了叁个值,且SE本田UR-VVICE_STATE字段被涂改为ON了,THREAD_ID字段值与show processlist语句中来看的线程id同样。 * 固然IO线程空闲或正在从主库接收binlog时,线程的SEENVISIONVICE_STATE值会向来为ON,THREAD_ID线程记录线程ID值,即使IO线程正在尝试连接主库但还一直不中标建构连接时,THREAD_ID记录CONNECTING值,THREAD_ID字段记录线程ID,固然IO线程与主库的接连断开,或许主动甘休IO线程,则SE途睿欧VICE_STATE字段记录为OFF,THREAD_ID字段被涂改为NULL
  • 进行 STOP SLAVE之后,全数复制IO线程、和煦器线程、专门的职业线程状态表中的THREAD_ID列变为NULL,SERVICE_STATE列的值变为OFF。注意:甘休复制相关线程之后,这个记录并不会被清理 ,因为复制意外终止大概暂时须要会实行结束操作,或者须求获得一些情状消息用于排错只怕其余用途。
  • 推行RESET SLAVE之后,全体记录复制配置和复制状态的表中记录的消息都会被免除。不过show slave status语句仍是可以查看到一些复制状态和配备音讯,因为该语句是从内部存款和储蓄器中获取,RESET SLAVE语句并未清理内部存款和储蓄器,而是清理了磁盘文件、表(还包罗mysql.slave_master_info和mysql.slave_relay_log_info多少个表)中著录的消息。假使须求清理内部存储器里报错的复制音讯,必要利用RESET SLAVE ALL;语句
  • 注意:对于replication_applier_status_by_worker、replication_applier_status_by_coordinator表(以及mysql.slave_wroker_info表)来讲,假使是以单线程复制运维,则replication_applier_status_by_worker表记录一条WOGL450KE本田UR-V_ID=0的记录,replication_applier_status_by_coordinator表与mysql.slave_wroker_info表为空(使用二十多线程复制,该表中才有记录)。即,假诺slave_parallel_workers系统变量大于0,则在推行START SLAVE时这一个表就被填充相应多线程职业线程的消息

int x;

performance_schema 系统库中保存的复制音讯与SHOW SLAVE STATUS输出的音信有所分化(performance_schema 中记录的局地复制音讯是show slave status语句输出音讯中未有的,可是也如故有局地show slave status语句输出的复制消息是performance_schema 中绝非的),因为那些外界向全局职业标志符(GTID)使用,并非基于binlog pos地方,所以这几个回看录server UUID值,并非server ID值。show slave status语句输出的音信在performance_schema 中缺点和失误的从头到尾的经过如下:

int y = x;

用来援用binlog file、pos和relay log file、pos等新闻选项,在performance_schema表中不记录 。

x = 6;

PS1:一般来说系统状态变量被移位到了这几个复制状态表中进行记录(MySQL 5.7.5版此前运用以下状态变量查看):

cout << "Value of x : " << x << endl;

  • Slave_retried_transactions
  • Slave_last_heartbeat
  • Slave_received_heartbeats
  • Slave_heartbeat_period
  • Slave_running

cout << "Value of y : " << y  << endl;

PS2:对此组复制架构,组复制的监督新闻传布在如下几张表中

cout << "Addr of x: " << &x << endl;

  • replication_group_member_stats
  • replication_group_members
  • replication_applier_status
  • replication_connection_status
  • threads

cout << "Addr of y: " << &y << endl;

因此上述内容,我们从全体上能够轮廓通晓了performance_schema中的复制音讯表记录了哪些音信,上面依次详细介绍这一个复制音讯表。

return 0;

1.replication_applier_configuration表

}

该表中著录从库线程延迟复制的安插参数(延迟复制的线程被称之为普通线程,举个例子CHANNEL_NAME和DESIRED_DELAY字段记录有个别复制通道是或不是须求试行延迟复制,假诺是MG瑞虎集群,则记录组复制从节点的推移复制配置参数),该表中的记录在Server运营时方可应用CHANGE MASTER TO语句进行退换,大家先来拜候表中记录的计算新闻是哪些体统的。

出口结果:

# 假如是单主或多主复制,则该表中会为种种复制通道记录一条看似如下消息

Value of i : 5

admin@localhost : performance_schema 02:49:12> select * from replication_applier_configuration;

Value of i reference : 5

-------------- ---------------

Addr of i: 0x7ffffc9517b4

| CHANNEL_NAME |DESIRED_DELAY |

Addr of r: 0x7ffffc9517b4

-------------- ---------------

Value of x : 6

|| 0 |

Value of y : 4197104

-------------- ---------------

Addr of x: 0x7ffffc9517b0

1row inset ( 0. 00sec)

Addr of y: 0x7ffffc9517ac

# 即使是MGLAND集群,则该表中会记录类似如下MGKoleos集群新闻

root@localhost : performance_schema 10:56:49> select * from replication_applier_configuration;

---------------------------- ---------------

| CHANNEL_NAME |DESIRED_DELAY |

---------------------------- ---------------

|group_replication_applier | 0 |

| group_replication_recovery |0|

---------------------------- ---------------

2 rows inset (0.00 sec)

表中各字段含义及与show slave status输出字段对应关系如下:

图片 3

对于replication_applier_configuration表,不允许推行TRUNCATE TABLE语句。

2. replication_applier_status表

该表中记录的是从库当前的貌似专门的学问执市价况(该表也记录组复制架构中的复制状态音讯)

  • 此表提供了全体线程binlog回看事务时的无独有偶状态消息。线程重播事务时特定的动静新闻保存在replication_applier_status_by_coordinator表(单线程复制时该表为空)和replication_applier_status_by_worker表(单线程复制时表中记录的新闻与八线程复制时的replication_applier_status_by_coordinator表中的记录类似)

咱俩先来看看表中记录的计算音信是咋样样子的。

# 单线程复制和多线程复制时表中的记录同一,若是是多主复制,则每一种复制通道记录一行消息

admin@localhost : performance_schema 02:49:28> select * from replication_applier_status;

-------------- --------------- ----------------- ----------------------------

| CHANNEL_NAME |SERVICE_STATE | REMAINING_DELAY |COUNT_TRANSACTIONS_RETRIES |

-------------- --------------- ----------------- ----------------------------

|| ON |NULL | 0 |

-------------- --------------- ----------------- ----------------------------

1row inset ( 0. 00sec)

# 要是是MG奥迪Q3集群,则该表会记录如下MGWrangler集群音信

root@localhost : performance_schema 10:58:33> select * from replication_applier_status;

---------------------------- --------------- ----------------- ----------------------------

| CHANNEL_NAME |SERVICE_STATE | REMAINING_DELAY |COUNT_TRANSACTIONS_RETRIES |

---------------------------- --------------- ----------------- ----------------------------

|group_replication_applier | ON |NULL | 0 |

| group_replication_recovery |OFF | NULL |0|

---------------------------- --------------- ----------------- ----------------------------

2 rows inset (0.00 sec)

表中各字段含义及与show slave status输出字段对应关系如下:

图片 4

对于replication_applier_status表,分化意实施TRUNCATE TABLE语句。

3. replication_applier_status_by_coordinator表

该表中著录的是从库使用多线程复制时,从库的协调器工作情状记录,当从库使用十六线程复制时,各个通道下将开创一个和谐器和多个办事线程,使用和睦器线程来管理那个干活儿线程。要是从库使用单线程,则此表为空(对应的记录转移到replication_applier_status_by_worker表中记录),我们先来拜谒表中著录的总括新闻是如何体统的。

# 单线程主从复制时,该表为空,为八线程主从复制时表中记录和睦者线程状态音讯,多主复制时每一种复制通过记录一行音信

admin@localhost : performance_schema 02:49:50> select * from replication_applier_status_by_coordinator;

-------------- ----------- --------------- ------------------- -------------------- ----------------------

| CHANNEL_NAME |THREAD_ID | SERVICE_STATE |LAST_ERROR_NUMBER | LAST_ERROR_MESSAGE |LAST_ERROR_TIMESTAMP |

-------------- ----------- --------------- ------------------- -------------------- ----------------------

|| 43 |ON | 0 || 0000-00-00 00:00:00 |

-------------- ----------- --------------- ------------------- -------------------- ----------------------

1row inset ( 0. 00sec)

# 尽管是MG奥迪Q5集群,则该表中会记录类似如下MGEvoque集群音信

root@localhost : performance_schema 11:00:11> select * from replication_applier_status_by_coordinator;

--------------------------- ----------- --------------- ------------------- -------------------- ----------------------

| CHANNEL_NAME |THREAD_ID | SERVICE_STATE |LAST_ERROR_NUMBER | LAST_ERROR_MESSAGE |LAST_ERROR_TIMESTAMP |

--------------------------- ----------- --------------- ------------------- -------------------- ----------------------

|group_replication_applier | 91 |ON | 0 || 0000-00-00 00:00:00 |

--------------------------- ----------- --------------- ------------------- -------------------- ----------------------

1row inset ( 0. 00sec)

表中各字段含义及与show slave status输出字段对应关系如下:

图片 5

对于replication_applier_status_by_coordinator表,不允许实践TRUNCATE TABLE语句。

4. replication_applier_status_by_worker表

假如从库是单线程,则该表记录一条WO奇骏KE帕杰罗_ID=0的SQL线程的情事。假诺从库是十六线程,则该表记录系统参数slave_parallel_workers钦命个数的专业线程状态(WOEscortKESportage_ID从1始发编号),此时和煦器/SQL线程状态记录在replication_applier_status_by_coordinator表,每三个通道都有谈得来独立的行事线程和和煦器线程(每种通道的办事线程个数由slave_parallel_workers参数变量钦命,假设是MGSportage集群时,则该表中著录的做事线程记录为slave_parallel_workers个group_replication_applier线程 1个group_replication_recovery线程),大家先来探视表中记录的总结消息是什么样体统的。

# 单线程主从复制时表中记录的开始和结果如下

root@localhost : performance_schema 12:46:10> select * from replication_applier_status_by_worker;

-------------- ----------- ----------- --------------- ----------------------- ------------------- -------------------- ----------------------

| CHANNEL_NAME |WORKER_ID | THREAD_ID |SERVICE_STATE | LAST_SEEN_TRANSACTION |LAST_ERROR_NUMBER | LAST_ERROR_MESSAGE |LAST_ERROR_TIMESTAMP |

-------------- ----------- ----------- --------------- ----------------------- ------------------- -------------------- ----------------------

|| 0 |82| ON || 0 || 0000-00-00 00:00:00 |

-------------- ----------- ----------- --------------- ----------------------- ------------------- -------------------- ----------------------

1row inset ( 0. 00sec)

# 多线程主从复制时表中的记录内容如下(假使是多主复制,则每一种复制通道记录slave_parallel_workers参数钦点个数的worker线程音信)

admin@localhost : performance_schema 02:50:18> select * from replication_applier_status_by_worker;

-------------- ----------- ----------- --------------- ----------------------- ------------------- -------------------- ----------------------

| CHANNEL_NAME |WORKER_ID | THREAD_ID |SERVICE_STATE | LAST_SEEN_TRANSACTION |LAST_ERROR_NUMBER | LAST_ERROR_MESSAGE |LAST_ERROR_TIMESTAMP |

本文由mg娱乐平台发布于科技,转载请注明出处:复制状态与变量记录表,C与援用和变量复制

关键词: 科技 AR NEC 02-数据库系列 C/C++

【科技】One plus真盘算好了,一加16x和中兴8年青

原标题:Samsung16X和One plus8青春版同一时间到来 五款联发科710新机上演龙虎之争 【科技】One plus真盘算好了,一加16...

详细>>

performance_schema全方位介绍

原标题:初相识|performance_schema全方位介绍(一)       可能在小河里,或许在湖水中,可能在大洋里,住着她们。...

详细>>

【科技】年的占有率级巨作,的标价是

原标题:索尼(Sony)Xperia XZ2 Premium散景评测:2018最棒双摄潜质全 紧接着辽宁发布会后没多长时间,索尼(Sony)也把...

详细>>

科技:2019苹果五款新小米发布时间,照旧值得买

原标题:新变化,假设魅族售卖价格扩充三千,你们买吧? 历年的十一月份,苹果手提式有线电电话机都会出新产品...

详细>>