- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章percona-toolkit对MySQL的复制和监控类操作教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
复制类工具 1. pt-heartbeat 功能介绍: 监控mysql复制延迟 用法介绍: pt-heartbeat [OPTION...] [DSN] --update|--monitor|--check|--stop 测量复制落后主mysql或者主PostgreSQL多少时间,你可以使用这个脚本去更新主或者监控复制,具体用法见后面的示例. 原理:pt-heartbeat通过真实的复制数据来确认mysql和postgresql复制延迟,这个避免了对复制机制的依赖,从而能得出准确的落后复制时间,包含两部分:第一部分在主上pt-heartbeat的--update线程会在指定的时间间隔更新一个时间戳,第二部分是pt-heartbeat的--monitor线程或者--check线程连接到从上检查复制的心跳记录(前面更新的时间戳),并和当前系统时间进行比较,得出时间的差异。 你可以手工创建heartbeat表或者添加--create-table参数,推荐使用MEMORY引擎。表结构为:
1
2
3
4
5
6
7
8
|
CREATE
TABLE
heartbeat (
ts
varchar
(26)
NOT
NULL
,
server_id
int
unsigned
NOT
NULL
PRIMARY
KEY
,
file
varchar
(255)
DEFAULT
NULL
,
-- SHOW MASTER STATUS
position
bigint
unsigned
DEFAULT
NULL
,
-- SHOW MASTER STATUS
relay_master_log_file
varchar
(255)
DEFAULT
NULL
,
-- SHOW SLAVE STATUS
exec_master_log_pos
bigint
unsigned
DEFAULT
NULL
-- SHOW SLAVE STATUS
);
|
使用示例: 范例1:创建一个后台进程定期更新主上的test库的heartbeat表()默认是1s,可以--interval指定,执行后会成一个heartbeat表,test库为我监控的同步库:
1
|
pt-heartbeat -D
test
--update --user=root --password=zhang@123 -h192.168.3.135 --create-table –daemonize
|
范例2:监控复制在slave上的落后程度(会一直监控):
1
|
pt-heartbeat -D
test
--monitor --user=root --password=zhang@123 -h192.168.3.92
|
监控结果如下:
1
2
3
4
5
6
|
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
|
范例3:监控复制在slave上的落后程度(监控一次退出):
1
|
pt-heartbeat -D
test
--check --user=root --password=zhang@123 -h192.168.3.92
|
范例4:监控PostgreSQL需要添加--dbi-driver Pg:
1
|
pt-heartbeat -D
test
--check --user=root --password=zhang@123 -h192.168.3.92 --dbi-driver Pg
|
2. pt-slave-delay 功能介绍: 设置从服务器落后于主服务器指定时间。 用法介绍: pt-slave-delay [OPTION...] SLAVE-HOST [MASTER-HOST] 原理:通过启动和停止复制sql线程来设置从落后于主指定时间。默认是基于从上relay日志的二进制日志的位置来判断,因此不需要连接到主服务器,如果IO进程不落后主服务器太多的话,这个检查方式工作很好,如果网络通畅的话,一般IO线程落后主通常都是毫秒级别。一般是通过--delay and --delay"+"--interval来控制。--interval是指定检查是否启动或者停止从上sql线程的频繁度,默认的是1分钟检查一次。 使用示例: 范例1:使从落后主1分钟,并每隔1分钟检测一次,运行10分钟 。
1
|
pt-slave-delay --user=root --password=zhang@123 --delay 1m --run-
time
10m --host=192.168.3.92
|
如果不加--run-time参数会一直执行。 范例2:使从落后主1分钟,并每隔15秒钟检测一次,运行10分钟 。
1
|
pt-slave-delay --user=root --password=zhang@123 --delay 1m --interval 15s --run-
time
10m --host=192.168.3.92
|
运行结果如下:
1
2
3
4
5
6
7
|
2012-05-20T16:34:50 slave running 0 seconds behind
2012-05-20T16:34:50 STOP SLAVE until 2012-05-20T16:35:50 at master position mysql-bin.000032/4392054
2012-05-20T16:35:05 slave stopped at master position mysql-bin.000032/4397124
2012-05-20T16:35:20 slave stopped at master position mysql-bin.000032/4402194
2012-05-20T16:35:35 slave stopped at master position mysql-bin.000032/4407264
2012-05-20T16:35:50 no new binlog events
2012-05-20T16:36:05 START SLAVE until master 2012-05-20T16:35:05 mysql-bin.000032/4397124
|
3. pt-slave-find 功能介绍: 查找和打印mysql所有从服务器复制层级关系 用法介绍: pt-slave-find [OPTION...] MASTER-HOST 原理:连接mysql主服务器并查找其所有的从,然后打印出所有从服务器的层级关系。 使用示例: 范例1:查找主服务器为192.168.3.135的mysql有所有从的层级关系:
1
|
pt-slave-
find
--user=root --password=zhang@123 --host=192.168.3.135
|
4. pt-slave-restart 功能介绍: 监视mysql复制错误,并尝试重启mysql复制当复制停止的时候 用法介绍: pt-slave-restart [OPTION...] [DSN] 监视一个或者多个mysql复制错误,当从停止的时候尝试重新启动复制。你可以指定跳过的错误并运行从到指定的日志位置。 使用示例: 范例1:监视192.168.3.92的从,跳过1个错误 。
1
|
pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.92 --skip-count=1
|
范例2:监视192.168.3.92的从,跳过错误代码为1062的错误.
1
|
pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.92 --error-numbers=1062
|
5. pt-table-checksum 功能介绍: 检查mysql复制一致性 用法介绍: pt-table-checksum [OPTION...] [DSN] 工作原理:pt-table-checksum在主上执行检查语句在线检查mysql复制的一致性,生成replace语句,然后通过复制传递到从,再通过update更新master_src的值。通过检测从上this_src和master_src的值从而判断复制是否一致。 注意:使用的时候选择业务地峰的时候运行,因为运行的时候会造成表的部分记录锁定。使用--max-load来指定最大的负载情况,如果达到那个负载这个暂停运行。如果发现有不一致的数据,可以使用pt-table-sync工具来修复。 注意:和1.0版本不同,新版本的pt-table-checksum只需要在master上执行即可。 通过 –explain参数再结合二进制日志就可以看出脚本的工作原理,如我的test库有一个名字为zhang的表,我们通过抓取二进制日志来查看脚本的原理:
1
2
|
REPLACE
INTO
`test`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc)
SELECT
'test'
,
'zhang'
,
'1'
,
NULL
,
NULL
,
NULL
,
COUNT
(*)
AS
cnt,
COALESCE
(
LOWER
(CONV(BIT_XOR(
CAST
(CRC32(CONCAT_WS(
'#'
, `id`, `
name
`, CONCAT(
ISNULL
(`
name
`))))
AS
UNSIGNED)), 10, 16)), 0)
AS
crc
FROM
`test`.`zhang` /*checksum
table
*/;
UPDATE
`test`.`checksums`
SET
chunk_time =
'0.000563'
, master_crc =
'31012777'
, master_cnt =
'4'
WHERE
db =
'test'
AND
tbl =
'zhang'
AND
chunk =
'1'
|
从这里可以很明显的看出原理了,前面已经说了,这里就不赘述了。 使用示例: 范例1:比较test数据库同步是否一致,结果显示所有的表.
1
|
pt-table-checksum --nocheck-replication-filters --databases=
test
--replicate=
test
.checksums --create-replicate-table --host=192.168.3.135 --port 3306 -uroot -pzhang@123
|
参数说明:第一次运行的时候需要添加--create-replicate-table参数,如果不加这个就需要手工运行添加表结构的SQL,表结构SQL如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
CREATE
TABLE
checksums (
db
char
(64)
NOT
NULL
,
tbl
char
(64)
NOT
NULL
,
chunk
int
NOT
NULL
,
chunk_time
float
NULL
,
chunk_index
varchar
(200)
NULL
,
lower_boundary text
NULL
,
upper_boundary text
NULL
,
this_crc
char
(40)
NOT
NULL
,
this_cnt
int
NOT
NULL
,
master_crc
char
(40)
NULL
,
master_cnt
int
NULL
,
ts
timestamp
NOT
NULL
,
PRIMARY
KEY
(db, tbl, chunk),
INDEX
ts_db_tbl (ts, db, tbl)
) ENGINE=InnoDB;
|
之所以使用--nocheck-replication-filters参数是因为我的my.cnf配置了replicate-ignore-db和replicate-wild-do-table等参数。另外需要特别注意执行的checksums所在的数据库必须是同步的数据库。我刚开始使用的时候摸索的很久,官网也没有范例。呵呵! 结果如下:
1
2
3
4
5
6
7
8
|
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
05-23T16:19:29 0 1 2 1 0 0.006 test.aaa
05-23T16:19:29 0 0 1 1 0 0.017 test.bbb
05-23T16:19:29 0 0 0 1 0 0.007 test.category_part
05-23T16:19:31 0 0 233617 6 0 1.887 test.collect_data
05-23T16:19:34 0 0 250346 5 0 2.709 test.effective_user
05-23T16:19:34 0 1 1 1 0 0.008 test.heartbeat
05-23T16:19:39 0 0 1000000 11 0 5.353 test.oss_pvinfo2
|
从结果中,我们可以看到test.aaa和test.heartbeat表的DIFFS不为0,那么就是这两个表不同步了。 范例2:比较test数据库同步是否一致,结果只显示数据不一致的表(添加--replicate-check-only参数即可,这个值查看checksums数据不会重新对表进行比较,因此需要先运行上面的比较语句之后再运行这个语句,否则显示不了最新的变化。).
1
|
pt-table-checksum --nocheck-replication-filters --databases=
test
--replicate=
test
.checksums --replicate-check-only --lock-wait-timeout=120 --host=192.168.3.135 --port 3306 --user=root --password=zhang@123
|
结果如下:
1
2
3
4
|
Differences on localhost.localdomain
TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
test.aaa 1 1 1
test.heartbeat 1 0 1
|
从结果可以看出,只显示了两个不同步的表.
6. pt-table-sync 功能介绍: 高效同步mysql表的数据 用法介绍: pt-table-sync [OPTION...] DSN [DSN...] 原理:总是在主上执行数据的更改,再同步到从上,不会直接更改成从的数据,在主上执行更改是基于主上现在的数据,不会更改主上的数据。注意使用之前先备份你的数据,避免造成数据的丢失.执行execute之前最好先换成--print或--dry-run查看一下会变更哪些数据。 使用示例: 范例1:同步3.135的test库的aaa表到192.168.3.92,在执行之前可以用--execute参数换成--print来查看会变更什么东西,后面那个主机必须是master,否则会报错推出.
1
|
pt-table-
sync
--execute --user=root --password=zhang@123 h=192.168.3.135,D=
test
,t=aaa h=192.168.3.92
|
范例2:将主的test数据库同步到192.168.3.92,使从上具有一样的数据.
1
|
pt-table-
sync
--execute --
sync
-to-master --user=root --password=zhang@123 h=192.168.3.92 --database
test
|
范例3:只同步指定的表 。
1
|
pt-table-
sync
--execute --
sync
-to-master --user=root --password=zhang@123 h=192.168.3.92,D=
test
,t=aaa
|
范例4:根据pt-table-checksum的结果进行数据同步 。
1
|
pt-table-
sync
--execute --replicate
test
.checksums --user=root --password=zhang@123 h=192.168.3.135
|
范例5:根据pt-table-checksum使从的数据和主的数据一致 。
1
|
pt-table-
sync
--execute --replicate
test
.checksums --user=root --password=zhang@123 --
sync
-to-master h=192.168.3.92,D=
test
,t=aaa
|
监控类工具 1. pt-deadlock-logger 功能介绍: 提取和记录mysql死锁的相关信息 用法介绍: pt-deadlock-logger [OPTION...] SOURCE_DSN 收集和保存mysql上最近的死锁信息,可以直接打印死锁信息和存储死锁信息到数据库中,死锁信息包括发生死锁的服务器、最近发生死锁的时间、死锁线程id、死锁的事务id、发生死锁时事务执行了多长时间等等非常多的信息。详情见下面的示例。 使用示例: 范例1:打印本地mysql的死锁信息 。
1
|
pt-deadlock-logger --user=root --password=zhang@123 h=localhost –print
|
范例2:将本地的mysql死锁信息记录到数据库的表中,也打印出来 。
1
|
pt-deadlock-logger --user=root --password=zhang@123 h=localhost --print D=
test
,t=deadlocks
|
2. pt-fk-error-logger 功能介绍: 提取和记录mysql外键错误信息 用法介绍: pt-fk-error-logger [OPTION...] SOURCE_DSN 通过SHOW INNODB STATUS提取和保存mysql数据库最近发生的外键错误信息。可以通过参数控制直接打印错误信息或者将错误信息存储到数据库的表中。 使用示例: 我在服务器上运行的时候一直报如下错误:
1
|
Use of uninitialized value
in
concatenation (.) or string at
/usr/bin/pt-fk-error-logger
line 2045
|
我怀疑是这个程序有问题,回头换一个版本试一下或者调试一下那个程序。 3. pt-mext 功能介绍: 并行查看SHOW GLOBAL STATUS的多个样本的信息。 用法介绍: pt-mext [OPTIONS] -- COMMAND 原理:pt-mext执行你指定的COMMAND,并每次读取一行结果,把空行分割的内容保存到一个一个的临时文件中,最后结合这些临时文件并行查看结果。 使用示例: 范例1:每隔10s执行一次SHOW GLOBAL STATUS,并将结果合并到一起查看 。
1
|
pt-mext -- mysqladmin ext -uroot -pzhang@123 -i10 -c3
|
4. pt-query-digest 功能介绍: 分析查询执行日志,并产生一个查询报告,为MySQL、PostgreSQL、 memcached过滤、重放或者转换语句。 用法介绍: pt-query-digest [OPTION...] [FILE] 解析和分析mysql日志文件 使用示例: 范例1:分析本地的慢查询文件 。
1
|
pt-query-digest --user=root --password=zhang@123
/data/dbdata/localhost-slow
.log
|
范例2:重新回顾满查询日志,并将结果保存到query_review中,注意query_review表的表结构必须先建好,表结构如下:
1
2
3
4
5
6
7
8
9
10
|
CREATE
TABLE
query_review (
checksum
BIGINT
UNSIGNED
NOT
NULL
PRIMARY
KEY
,
fingerprint TEXT
NOT
NULL
,
sample TEXT
NOT
NULL
,
first_seen DATETIME,
last_seen DATETIME,
reviewed_by
VARCHAR
(20),
reviewed_on DATETIME,
comments TEXT
);
|
命令如下:
1
|
pt-query-digest --user=root --password=zhang@123 --review h=localhost,D=
test
,t=query_review
/data/dbdata/localhost-slow
.log
|
5. pt-trend 功能介绍: 居于一组时间序列的数据点做统计。 用法介绍: pt-trend [OPTION...] [FILE ...] 读取一个慢查询日志,并输出统计信息。也可以指定多个文件。如果不指定文件的话直接从标准输入中读取信息。 使用示例: 范例1:读取本地慢查询日志并输出统计信息 。
1
|
pt-trend
/data/dbdata/localhost-slow
.log
|
最后此篇关于percona-toolkit对MySQL的复制和监控类操作教程的文章就讲到这里了,如果你想了解更多关于percona-toolkit对MySQL的复制和监控类操作教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Redux Toolkit 在尝试更新嵌套数组上的状态时给了我突变错误,我认为它是使用 immer 来解决这个问题并简化 reducer。 我的商店看起来像: 状态 -> 表单 -> 部分 我想向现有
DragonRuby Game Toolkit 中好像没有按钮的概念。如何创建按钮等 UI 组件? 最佳答案 按钮(和任何其他 UI 组件)可以解构为 primitives: 按钮有一个点击空间(通常
我正在使用 DragonRuby Game Toolkit 构建游戏。 如何检测一个对象(例如 Sprite)是否与另一个 Sprite 发生碰撞? 这是放置在屏幕上的两个 Sprite 。关于如何检
我正在通过 Template Toolkit 文件为 Template Toolkit 制作一些文档。目标是显示我正在使用的代码以及代码的输出。现在,我正在复制代码并将所有“%”字符替换为“%”字符串
我真的很喜欢 Template Toolkit并且喜欢它如何与 Catalyst 一起使用,但我想要更多“网络高级”工具包。 它可能只是 Web 对象的 *.tt 文件包,例如:Selector、Se
我需要为我正在处理的应用程序使用 Surface 项目模板,但我也想使用 MVVM Light Toolkit。我发现我可以“添加 | 新项目...”并为 View 、 View 模型或定位器选择一个
我们一直在使用 google identity toolkit 在我们的 alpha 和 beta 网站上登录,它非常流畅、简单且易于操作(Alpha 和 beta 用户获得了特定的登录说明)。当我们
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我想为 OpenCV 安装 CUDA,但当前的工具包 (7.5) 与 Visual Studio 2015 不兼容。我的问题是 - 安装 VS 2013 Express 是否允许我在 2015 年使用
我在添加 时遇到上述错误extraReducer 到我的 创建切片。 这是一个 react 原生应用程序 这是我的代码: export const login = createAsyncThu
使用 RTK Query , 如何使用获取功能来更新另一个切片的状态? 本质上,我试图让所有相关状态彼此相邻,因此在使用 useLazyGetQuery 查询数据后,我想使用结果并将其存储在现有切片中
我想使用模板工具包获取一个随机数。它不必特别随机。我该怎么做? 最佳答案 嗯,如果您没有(或无法导入)Slash::Test,您可能会遇到问题。 从 TT 的“vanilla”安装,您可以简单地使用
我的计算机上插入了两个屏幕,想知道 JFrame 或 Toolkit 中是否有检测窗口在哪个屏幕上的方法? 我有这个代码: java.awt.Toolkit.getDefaultToolkit().g
我正在使用 java 获取屏幕的尺寸和分辨率。当我运行以下代码时,我得到以下输出。 Toolkit toolkit = Toolkit.getDefaultToolkit (); Dimension
import { createSlice } from '@reduxjs/toolkit' export const countersSlice = createSlice({ name:
我有一个 azure 函数,我想在 IntelliJ IDEA 中本地运行和测试。我按照此处列出的所有步骤进行操作:https://learn.microsoft.com/en-us/azure/az
使用 VBA 我想将当前 word 文档的副本发送到 Web 服务?如何将当前文档作为字节数组获取? 我知道如何使用网络服务只是不确定如何将当前文件作为二进制对象发送? 附言从今天早上开始我一直在使用
如果要通过插件系统添加函数和/或虚拟方法,我想将自己的指令添加到Template Toolkit中。在不深入Template::Grammar的情况下,是否容易做到这一点?还有什么我可以在CPAN上学
如何使用 RTK 将整个数组分配给我的 intialState 对象? 做state = payload或 state = [...state, ...payload]不更新任何东西。 例子: con
我正在为我的网站使用谷歌翻译器。我想隐藏谷歌翻译器的顶部栏让我知道如何隐藏那个? 请在此处查看我的网站链接 http://www.rewords.com让我知道我要隐藏那个酒吧? 谢谢 最佳答案 通过
我是一名优秀的程序员,十分优秀!