您的位置:新萄亰赌场 > 现代科技 > MySQL复制相关变量,C与引用和变量复制

MySQL复制相关变量,C与引用和变量复制

2019-04-11 17:59

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

server_id是必须设置在master和每种slave上的唯一标识ID,其取值范围 是1~42949672九五之内,且同2个复制组之内不能够再度
server_uuid:server_uuid会在GTID复制中选择。当MySQL运营之后,会 首先到数据文件目录下的auto.cnf中追寻是还是不是有钦定的server_uuid,要是未有找到,则温馨生成二个server_uuid并保存到这些文件中

server_id是必须设置在master和各种slave上的绝无仅有标识ID,其取值范围 是1~429496729伍时期,且同三个复制组之内不能够再度
server_uuid:server_uuid会在GTID复制中运用。当MySQL运营未来,会 首先到数据文件目录下的auto.cnf中摸索是不是有钦定的server_uuid,借使未有找到,则温馨生成3个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_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从业多年,历任运营工程师,高级运营工程师,运营主任,数据库工程师,曾子与版本公布系统,轻量级监察和控制系统,运转管理平台,数据库管理平台的宏图与编写制定,熟习MySQL的系统布局时,InnoDB存款和储蓄引擎,喜好专研开源技术,追求完善。

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

int main ()

无意中,performance_schema体系快要接近尾声了,明日将辅导大家壹齐踏上一而再串第伍篇的征程(全系共陆个篇章),在那一期里,大家将为我们无微不至授课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;

在开班详细介绍每一张复制新闻表此前,我们先成本1些篇幅来完全认识一下这一个表。

[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语句的复制会将table一和table2都在备库修改,而依据行的复制只会在备库修改 table一表

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中的1组提交的事体作为并行粒度
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.七及未来,则暗许是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 |
 ------ ------ 

另2个基于SQL语句复制和依照行复制的区分在于当语句中包括对多个数据库的表实行操作时。比如设置replicate-do-db=db壹,

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

依照SQL语句的复制会将table1和table二都在备库修改,而依照行的复制只会在备库修改 table一表

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

而对于上述讲话来说,基于SQL语句的复制不会在备库修改任何表,而据书上说行的复制会 在备库修改table一表 假若希望跨库的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]MySQL复制相关变量,C与引用和变量复制。 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语句的复制,基于行复制和依据混合复制。在五.七.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 MASTEPRADO TO以前,那些表是空的
  • 进行CHANGE MASTE安德拉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多少个表中)
  • 施行STA牧马人T SLAVE后,能够看看连接线程和协调器线程,工作线程状态表中的THREAD_ID字段被分配了贰个值,且SE昂科拉VICE_STATE字段被改动为ON了,THREAD_ID字段值与show processlist语句中见到的线程id相同。 * 要是IO线程空闲或正在从主库接收binlog时,线程的SELANDVICE_STATE值会平昔为ON,THREAD_ID线程记录线程ID值,假诺IO线程正在尝试连接主库但还平昔不中标建立连接时,THREAD_ID记录CONNECTING值,THREAD_ID字段记录线程ID,如若IO线程与主库的连日断开,大概主动停止IO线程,则SERAV肆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表记录一条WO大切诺基KECRUISER_ID=0的记录,replication_applier_status_by_coordinator表与mysql.slave_wroker_info表为空(使用102线程复制,该表中才有记录)。即,假若slave_parallel_workers系统变量大于0,则在推行STA宝马X3T SLAVE时这几个表就被填充相应二十多线程工作线程的音信

int x;

performance_schema 系统库中保留的复制音讯与SHOW SLAVE STATUS输出的音信有所分歧(performance_schema 中著录的一部分复制信息是show slave status语句输出新闻中绝非的,但是也1如既往有局地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 五.7.伍版在此以前使用以下状态变量查看):

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字段记录某些复制通道是或不是须求履行延迟复制,借使是MGKuga集群,则记录组复制从节点的推移复制配置参数),该表中的记录在Server运营时得以使用CHANGE MASTE哈弗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

# 假使是MG索罗德集群,则该表中会记录类似如下MGPAJERO集群音讯

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表中的记录类似)

咱俩先来探望表中记录的总结音讯是怎么体统的。

# 单线程复制和二十多线程复制时表中的记录同1,借使是多主复制,则每一个复制通道记录1行音讯

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福睿斯集群,则该表会记录如下MG奇骏集群新闻

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)

# 假使是名爵CR-V集群,则该表中会记录类似如下MG奔驰G级集群消息

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表

设若从库是单线程,则该表记录一条WOLANDKELacrosse_ID=0的SQL线程的意况。假设从库是拾贰线程,则该表记录系统参数slave_parallel_workers钦定个数的工作线程状态(WO哈弗KE牧马人_ID从一起来编号),此时协调器/SQL线程状态记录在replication_applier_status_by_coordinator表,每叁个大路都有协调独自的做事线程和协调器线程(各种通道的做事线程个数由slave_parallel_workers参数变量钦定,假如是MG昂Cora集群时,则该表中著录的干活线程记录为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 |

本文由新萄亰赌场发布于现代科技,转载请注明出处:MySQL复制相关变量,C与引用和变量复制

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