SlideShare a Scribd company logo
The MySQL Availability Company
Tungsten Cluster Master Class
Basics: Working with Command Line Tools
Chris Parker, Customer Success Director, EMEA & APAC
Topics
In this short course, we will
• Re-cap the previous Installation
• Explore the main Command Line Tools
• tpm
• cctrl
• trepctl
• thl
Installation Re-Cap
Tungsten Cluster
Standalone Cluster
• Minimum 3 nodes
• 1 Primary
• 2 Replicas
• Odd number of nodes
• Single datacenter/region
Command Line Tools
tpm
• Tungsten Package Manager
• As well as using tpm for installs and updates, it can also be used for a number of other actions. You
can issue tpm help for a list of possible options.
• Most common options:
• tools/tpm validate[-update]
• [tools/]tpm update [--replace-release] [--no-connectors]
• tools/tpm install
• tpm diag – Gathers package of stats for support!
• tpm connector – Launches the MySQL command-line client and connects to the current
Primary node via locally-running Connector process
• tpm mysql – Launches the MySQL command-line client and connects to the MySQL server
process running on the local host
tpm connector
• Simple and quick way to connect to the current MySQL Primary node via the command line
• Only works on hosts where the Connector is running
• Will authenticate using credential supplied via application-user and application-password properties
• Provides additional commands to query database and cluster stats:
• Connector-based Tungsten commands are NOT available in Bridge Mode
• This is a good way to tell if you are in Bridge mode – if no commands are available, then you are in Bridge mode
• `tungsten help` will show all commands available
mysql> tungsten help;
+---------------------------------------------------------------------------------------------------------------------------------+
| Message |
+---------------------------------------------------------------------------------------------------------------------------------+
| tungsten connection status: display information about the connection used for the last request ran |
| tungsten connection count: gives the count of current connections to each one of the cluster datasources |
| tungsten cluster status: prints detailed information about the cluster view this connector has |
| tungsten show [full] processlist: list all running queries handled by this connector instance |
| tungsten show variables [like '<string>']: list connector configuration options in use. The <string> may contain '%' wildcards |
| tungsten flush privileges: reload user.map and refresh user credentials |
| tungsten mem info: display memory information about current JVM |
| tungsten gc: calls garbage collector |
| tungsten help: display this help message |
+---------------------------------------------------------------------------------------------------------------------------------+
9 rows in set (0.00 sec)
cctrl
• cctrl stands for Cluster Control
• Can be executed from any node running the manager in the cluster. For example, running cctrl
on a Connector-only host will fail.
• Allows control of all nodes in the cluster
• Main uses are
• Check cluster state
• Isolate nodes for maintenance
• Switch Primary nodes
• Recover nodes following failure/recovery
• Perform backup/recovery operations
• Requires the Manager to be running
cctrl
help
• Outputs list of commands available in cctrl
• Use help <command> for more detail on each command
cctrl
ls
• COORDINATOR[db3:AUTOMATIC:ONLINE]
• Identifies current Coordinator host and Current Cluster Mode
• ROUTERS:
• Lists all connectors associated with the installation, each connector shows status, and
created/active connection counts
• DATASOURCES:
• Lists all nodes that form the cluster
cctrl
Host, Role, Status
Last seqno
Extracted Latency from DB commit to THL
Last seqno
Applied Latency Applying to Target Database
cctrl
Status of manager process Role and status of replicator process
Status of MySQL DatabaseConnections through Connectors to DB
Role and status of replicator process. On a replica, shows primary the replica is connected to
cctrl
cluster validate
• Checks the validity of the cluster and ensures that all nodes are reachable
cctrl
cluster heartbeat
• Inserts an entry into the Primary ‘heartbeat’ table
• Good way to check that replication is flowing properly
• Check the progress= entries in the ls output
cctrl
Cluster Policy Modes
• AUTOMATIC
• Normal Operational state
• Ensures automatic failover
• Will attempt auto-recovery of components (MySQL server and Replicator)
• MAINTENANCE
• Prevents automatic operations mentioned above
• Should ONLY be used during Maintenance Windows
trepctl
• Used to control and manage the replicator Java process
• Most common uses are
• View replicator status
• Stop/Start replication
• Skip “safe” errors
• trepctl help to see all options
trepctl
• trepctl services
• Short list output of all services running on the host
• Shows basic information
• trepctl [-service SERVICENAME] status [-r N]
• Shows the full status of the replicator
• Specify –service if multiple services available
• Specify –r N to refresh every N seconds or until CTRL+C
• trepctl [-service SERVICENAME] status -name stages
• A more complete status view showing detailed output of each replicator stage
trepctl
• trepctl [-service SERVICENAME] qs [-r N]
• Shows a quick summary of the replicator progress
• Specify –service if multiple services available
• Specify –r N to refresh every N seconds or until CTRL+C
• trepctl [-service SERVICENAME] perf [-r N]
• Shows the status of each stage of the replication pipeline
• Output differs between Primary and Replicas
• Specify –service if there are multiple services available
• Specify –r N to refresh every N seconds or until CTRL+C
trepctl
• trepctl [-service SERVICENAME] reset {OPTIONS}
• Performs a FULL reset of the replicator
• VERY destructive if used incorrectly
• Resets SEQNO to 0
• trepctl [-service SERVICENAME] offline|online {OPTIONS}
• Bring a service online or offline
• Can be used with various options to control how/when
• Used with –skip-seqno to skip errors
trepctl status
appliedLastEventId : mysql-bin.000005:0000000051631947;-1
appliedLastSeqno : 166764
appliedLatency : 0.769
autoRecoveryEnabled : false
autoRecoveryTotal : 0
channels : 1
clusterName : alpha
currentEventId : mysql-bin.000005:0000000051631947
currentTimeMillis : 1578578135591
dataServerHost : trainingdb1
extensions :
host : trainingdb1
latestEpochNumber : 9
masterConnectUri : thl://localhost:/
masterListenUri : thl://trainingdb1:2112/
trepctl status
appliedLastEventId : mysql-bin.000005:0000000051631947;-1
appliedLastSeqno : 166764
appliedLatency : 0.769
autoRecoveryEnabled : false
autoRecoveryTotal : 0
channels : 1
clusterName : alpha
currentEventId : mysql-bin.000005:0000000051631947
currentTimeMillis : 1578578135591
dataServerHost : trainingdb1
extensions :
host : trainingdb1
latestEpochNumber : 9
masterConnectUri : thl://localhost:/
masterListenUri : thl:// trainingdb1 :2112/
On a Primary, the last ending
binary log position written to the
THL along with the Seqno for that
event, and the latency between
the database commit to the
binlog and the THL write
completion.
On a replica, displays the last
event written to the target
database with the corresponding
Seqno, and the latency between
the source database commit and
the completed apply of that
event to the target database.
trepctl status
appliedLastEventId : mysql-bin.000005:0000000051631947;-1
appliedLastSeqno : 166764
appliedLatency : 0.769
autoRecoveryEnabled : false
autoRecoveryTotal : 0
channels : 1
clusterName : alpha
currentEventId : mysql-bin.000005:0000000051631947
currentTimeMillis : 1578578135591
dataServerHost : trainingdb1
extensions :
host : trainingdb1
latestEpochNumber : 9
masterConnectUri : thl://localhost:/
masterListenUri : thl:// trainingdb1 :2112/
Auto-Recovery properties
trepctl status
appliedLastEventId : mysql-bin.000005:0000000051631947;-1
appliedLastSeqno : 166764
appliedLatency : 0.769
autoRecoveryEnabled : false
autoRecoveryTotal : 0
channels : 1
clusterName : alpha
currentEventId : mysql-bin.000005:0000000051631947
currentTimeMillis : 1578578135591
dataServerHost : trainingdb1
extensions :
host : trainingdb1
latestEpochNumber : 9
masterConnectUri : thl://localhost:/
masterListenUri : thl://trainingdb1:2112/
Current Binlog position of the
database (NONE on Replicas)
trepctl status
appliedLastEventId : mysql-bin.000005:0000000051631947;-1
appliedLastSeqno : 166764
appliedLatency : 0.769
autoRecoveryEnabled : false
autoRecoveryTotal : 0
channels : 1
clusterName : alpha
currentEventId : mysql-bin.000005:0000000051631947
currentTimeMillis : 1578578135591
dataServerHost : trainingdb1
extensions :
host : trainingdb1
latestEpochNumber : 9
masterConnectUri : thl://localhost:/
masterListenUri : thl://trainingdb1:2112/
masterConnectUri shows the
source THL server we are
connected to
masterListenUri shows the THL
server listener protocol, host and
port information for replicas to
connect with
trepctl status
maximumStoredSeqNo : 166764
minimumStoredSeqNo : 0
offlineRequests : NONE
pendingError : NONE
pendingErrorCode : NONE
pendingErrorEventId : NONE
pendingErrorSeqno : -1
pendingExceptionMessage: NONE
pipelineSource : /var/lib/mysql
relativeLatency : 580.591
resourceJdbcDriver : org.drizzle.jdbc.DrizzleDriver
resourceJdbcUrl : jdbc:mysql:thin://trainingdb1:13306/${DBNAME}. . .
resourcePrecedence : 99
resourceVendor : mysql
rmiPort : 10000
trepctl status
maximumStoredSeqNo : 166764
minimumStoredSeqNo : 0
offlineRequests : NONE
pendingError : NONE
pendingErrorCode : NONE
pendingErrorEventId : NONE
pendingErrorSeqno : -1
pendingExceptionMessage: NONE
pipelineSource : /var/lib/mysql
relativeLatency : 580.591
resourceJdbcDriver : org.drizzle.jdbc.DrizzleDriver
resourceJdbcUrl : jdbc:mysql:thin:// trainingdb1:13306 /${DBNAME}. . .
resourcePrecedence : 99
resourceVendor : mysql
rmiPort : 10000
When the Replicator goes into an
OFFLINE:ERROR state, these
fields will show all the associated
information. Always check the
trepsvc.log file for more
detail as needed.
trepctl status
maximumStoredSeqNo : 166764
minimumStoredSeqNo : 0
offlineRequests : NONE
pendingError : NONE
pendingErrorCode : NONE
pendingErrorEventId : NONE
pendingErrorSeqno : -1
pendingExceptionMessage: NONE
pipelineSource : /var/lib/mysql
relativeLatency : 580.591
resourceJdbcDriver : org.drizzle.jdbc.DrizzleDriver
resourceJdbcUrl : jdbc:mysql:thin://trainingdb1:13306/${DBNAME}. . .
resourcePrecedence : 99
resourceVendor : mysql
rmiPort : 10000
The current source of THL. Most cases
will match the masterConnectUri
unless using an MSAA topology. A
Primary will show the binary log
directory.
trepctl status
maximumStoredSeqNo : 166764
minimumStoredSeqNo : 0
offlineRequests : NONE
pendingError : NONE
pendingErrorCode : NONE
pendingErrorEventId : NONE
pendingErrorSeqno : -1
pendingExceptionMessage: NONE
pipelineSource : /var/lib/mysql
relativeLatency : 580.591
resourceJdbcDriver : org.drizzle.jdbc.DrizzleDriver
resourceJdbcUrl : jdbc:mysql:thin://trainingdb1:13306/${DBNAME}. . .
resourcePrecedence : 99
resourceVendor : mysql
rmiPort : 10000
Latency between NOW and the
timestamp of the last event in the
local THL.
trepctl status
role : master
seqnoType : java.lang.Long
serviceName : alpha
serviceType : local
simpleServiceName : alpha
siteName : default
sourceId : trainingdb1
state : ONLINE
timeInStateSeconds : 85641.738
timezone : GMT
transitioningTo :
uptimeSeconds : 85673.511
useSSLConnection : false
version : Tungsten Clustering 6.1.4 build 44
trepctl status
role : master
seqnoType : java.lang.Long
serviceName : training1
serviceType : local
simpleServiceName : training1
siteName : default
sourceId : trainingdb1
state : ONLINE
timeInStateSeconds : 85641.738
timezone : GMT
transitioningTo :
uptimeSeconds : 85673.511
useSSLConnection : false
version : Tungsten Clustering 6.1.4 build 44
Current role : master, slave or
relay
Current State, can be :
• ONLINE
• ONLINE:DEGRADED
• ONLINE:DEGRADED-BINLOG-FULLY-READ
• OFFLINE:NORMAL
• SUSPECT
• OFFLINE:ERROR
• GOING-ONLINE:SYNCHRONISING
• GOING-ONLINE:RESTORING
• GOING-ONLINE:PROVISIONING
Applied Latency vs Relative Latency
The appliedLatency is the latency between the commit
time of the source event and the time the last committed
transaction reached the end of the corresponding
pipeline within the replicator.
Within a primary, this indicates the latency between the
transaction commit time and when it was written to the
THL.
In a replica, it indicates the latency between the commit
time on the primary database and when the transaction
has been committed to the destination database.
Clocks must be synchronized across hosts for this
information to be accurate. The latency is measured in
seconds.
Increasing latency may indicate that the destination
database is unable to keep up with the transactions from
the primary. In replicators that are operating with parallel
apply, appliedLatency indicates the latency of the trailing
channel. Because the parallel apply mechanism does not
update all channels simultaneously, the figure shown may
trail significantly from the actual latency.
The relativeLatency is the latency between now and
timestamp of the last event written into the local THL.
This information gives an indication of how fresh the incoming
THL information is.
On a primary, it indicates whether the primary is keeping up
with transactions generated on the primary database.
On a replica, it indicates how up to date the THL read from the
extractor is.
A large value can either indicate that the database is not busy,
that a large transaction is currently being read from the source
database or from the primary replicator, or that the replicator
has stalled for some reason.
An increasing relativeLatency on the replica may indicate that
the replicator may have stalled and stopped applying changes
to the database.
thl
• Interface for viewing the contents of the THL
• thl help to view all command options
• thl info – Show a summary of the THL available on disk
• thl list will product a lot of output, always use with options to filter the result set
• -low|from SEQ – Start from supplied seqno
• -high|to SEQ – Stop at supplie seqno
• -first – Show first seqno available
• -first N – Show first N entries
• -last – Show last seqno available
• -last N – Show last N entries
• thl index – re-index THL – can help to speed up replicator restarts
• thl purge – Use with CARE since this command will REMOVE ALL THL on disk for that service
thl
SEQ# = 2 / FRAG# = 0 (last frag)
- FILE = thl.data.0000000001
- TIME = 2020-01-08 13:50:52.0
- EPOCH# = 0
- EVENTID = mysql-bin.000005:0000000000000939;12297
- SOURCEID = db1
- METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; 
- service=training1;shard=hr]
- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent
- OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, 
unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, 
sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, 
ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, 
collation_connection = 33, collation_server = 8]
- SCHEMA = hr
- SQL(0) = CREATE TABLE regions
( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, region_name VARCHAR(25)
)
thl
SEQ# = 2 / FRAG# = 0 (last frag)
- FILE = thl.data.0000000001
- TIME = 2020-01-08 13:50:52.0
- EPOCH# = 0
- EVENTID = mysql-bin.000005:0000000000000939;12297
- SOURCEID = db1
- METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; 
- service=training1;shard=hr]
- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent
- OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, 
unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, 
sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, 
ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, 
collation_connection = 33, collation_server = 8]
- SCHEMA = hr
- SQL(0) = CREATE TABLE regions
( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, region_name VARCHAR(25)
)
Global Sequence number for the event
thl
SEQ# = 2 / FRAG# = 0 (last frag)
- FILE = thl.data.0000000001
- TIME = 2020-01-08 13:50:52.0
- EPOCH# = 0
- EVENTID = mysql-bin.000005:0000000000000939;12297
- SOURCEID = db1
- METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; 
- service=training1;shard=hr]
- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent
- OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, 
unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, 
sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, 
ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, 
collation_connection = 33, collation_server = 8]
- SCHEMA = hr
- SQL(0) = CREATE TABLE regions
( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, region_name VARCHAR(25)
)
Associated THL File on Disk
thl
SEQ# = 2 / FRAG# = 0 (last frag)
- FILE = thl.data.0000000001
- TIME = 2020-01-08 13:50:52.0
- EPOCH# = 0
- EVENTID = mysql-bin.000005:0000000000000939;12297
- SOURCEID = db1
- METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; 
- service=training1;shard=hr]
- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent
- OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, 
unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, 
sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, 
ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, 
collation_connection = 33, collation_server = 8]
- SCHEMA = hr
- SQL(0) = CREATE TABLE regions
( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, region_name VARCHAR(25)
)
Commit time to Binary Logs
thl
SEQ# = 2 / FRAG# = 0 (last frag)
- FILE = thl.data.0000000001
- TIME = 2020-01-08 13:50:52.0
- EPOCH# = 0
- EVENTID = mysql-bin.000005:0000000000000939;12297
- SOURCEID = db1
- METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; 
- service=training1;shard=hr]
- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent
- OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, 
unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, 
sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, 
ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, 
collation_connection = 33, collation_server = 8]
- SCHEMA = hr
- SQL(0) = CREATE TABLE regions
( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, region_name VARCHAR(25)
)
Associated Binary Log File and Position
thl
SEQ# = 2 / FRAG# = 0 (last frag)
- FILE = thl.data.0000000001
- TIME = 2020-01-08 13:50:52.0
- EPOCH# = 0
- EVENTID = mysql-bin.000005:0000000000000939;12297
- SOURCEID = db1
- METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; 
- service=training1;shard=hr]
- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent
- OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, 
unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, 
sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, 
ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, 
collation_connection = 33, collation_server = 8]
- SCHEMA = hr
- SQL(0) = CREATE TABLE regions
( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, region_name VARCHAR(25)
)
Source of transaction (Should be a Primary!)
thl
SEQ# = 2 / FRAG# = 0 (last frag)
- FILE = thl.data.0000000001
- TIME = 2020-01-08 13:50:52.0
- EPOCH# = 0
- EVENTID = mysql-bin.000005:0000000000000939;12297
- SOURCEID = db1
- METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; 
- service=training1;shard=hr]
- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent
- OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, 
unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, 
sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, 
ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, 
collation_connection = 33, collation_server = 8]
- SCHEMA = hr
- SQL(0) = CREATE TABLE regions
( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, region_name VARCHAR(25)
)
Metadata
thl
SEQ# = 2 / FRAG# = 0 (last frag)
- FILE = thl.data.0000000001
- TIME = 2020-01-08 13:50:52.0
- EPOCH# = 0
- EVENTID = mysql-bin.000005:0000000000000939;12297
- SOURCEID = db1
- METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; 
- service=training1;shard=hr]
- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent
- OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, 
unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, 
sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, 
ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, 
collation_connection = 33, collation_server = 8]
- SCHEMA = hr
- SQL(0) = CREATE TABLE regions
( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, region_name VARCHAR(25)
)
The database schema that the
following SQL is being applied to
thl
SEQ# = 2 / FRAG# = 0 (last frag)
- FILE = thl.data.0000000001
- TIME = 2020-01-08 13:50:52.0
- EPOCH# = 0
- EVENTID = mysql-bin.000005:0000000000000939;12297
- SOURCEID = db1
- METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; 
- service=training1;shard=hr]
- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent
- OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, 
unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, 
sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, 
ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, 
collation_connection = 33, collation_server = 8]
- SCHEMA = hr
- SQL(0) = CREATE TABLE regions
( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, region_name VARCHAR(25)
)
DDL Statement
thl
SEQ# = 5 / FRAG# = 0 (last frag)
- FILE = thl.data.0000000001
- TIME = 2020-01-08 13:51:38.0
- EPOCH# = 0
- EVENTID = mysql-bin.000005:0000000000001746;-1
- SOURCEID = db1
- METADATA = [mysql_server_id=101;dbms_type=mysql;tz_aware=true;service=training1;shard=hr]
- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent
- OPTIONS = [foreign_key_checks = 1, unique_checks = 1, time_zone = '+00:00', ##charset = UTF-8]
- SQL(0) =
- ACTION = INSERT
- SCHEMA = hr
- TABLE = regions
- ROW# = 0
- COL(1: ) = 1
- COL(2: ) = europe
Row Change Data
When the PrimaryKey
(pkey) filter is enabled,
the key information is
optimized to only
contain the actual
primary keys for the
row-based THL record.
- SQL(0) =
- ACTION = UPDATE
- SCHEMA = hr
- TABLE = regions
- ROW# = 0
- COL(1: ) = 1
- COL(2: ) = Europe
- KEY(1: ) = 1
- KEY(2: ) = europe
- SQL(0) =
- ACTION = UPDATE
- SCHEMA = hr
- TABLE = regions
- ROW# = 0
- COL(1: ) = 1
- COL(2: ) = Europe
- KEY(1: ) = 1
- SQL(0) =
- ACTION = DELETE
- SCHEMA = hr
- TABLE = regions
- ROW# = 0
- KEY(1: ) = 1
- KEY(2: ) = Europe
- SQL(0) =
- ACTION = DELETE
- SCHEMA = hr
- TABLE = regions
- ROW# = 0
- KEY(1: ) = 1
UPDATE DELETE
Without
pkey filter
With
pkey filter
Other useful tools
• dsctl
• Advanced method to reset replicator position
• tungsten_find_position
• Can be used to interrogate THL for a specific binary log position and return a dsctl command
to reposition a replicator
• tungsten_find_seqno
• Works in the same way as tungsten_find_position but searches based on a sequence
number
• multi_trepctl
• Useful for Multi-Site/Active-Active deployments
Summary
What we have learnt today
• How to use the command line tools
• tpm
• cctrl
• trepctl
• thl
• How to interpret status output
Next Steps
In the next session we will
• Discuss Maintenance Operations
• Isolating Cluster Nodes
• Updating paramaters
• Failover/Switches
• Rolling Maintenance
• Upgrades
THANK YOU FOR LISTENING
continuent.com
The MySQL Availability Company
Chris Parker, Customer Success Director, EMEA & APAC

More Related Content

PDF
Training Slides: 153 - Working with the CLI
PDF
SRX Automation at Groupon
PPTX
Byte blower basic setting full_v2
PPT
Interface between kernel and user space
PDF
Training Slides: Intermediate 201: Single and Multi-Site Tungsten Clustering ...
PDF
Nova HA
PDF
Performance Lessons learned in vRouter - Stephen Hemminger
PDF
Training Slides: Advanced 301: Multi-Site/Multi-Master Tungsten Clustering De...
Training Slides: 153 - Working with the CLI
SRX Automation at Groupon
Byte blower basic setting full_v2
Interface between kernel and user space
Training Slides: Intermediate 201: Single and Multi-Site Tungsten Clustering ...
Nova HA
Performance Lessons learned in vRouter - Stephen Hemminger
Training Slides: Advanced 301: Multi-Site/Multi-Master Tungsten Clustering De...

What's hot (20)

PDF
Anatomy of neutron from the eagle eyes of troubelshoorters
PPTX
Troubleshooting containerized triple o deployment
PPTX
How to Troubleshoot OpenStack Without Losing Sleep
PPTX
OpenvSwitch Deep Dive
PPTX
Seminar
PPTX
High available energy management system
PDF
BPF - in-kernel virtual machine
PPTX
Managing Open vSwitch Across a Large Heterogenous Fleet
PPT
Lect9
PDF
2015 FOSDEM - OVS Stateful Services
PDF
Open VSwitch .. Use it for your day to day needs
PDF
Linux Linux Traffic Control
PDF
Linux Networking Explained
PDF
Open vSwitch - Stateful Connection Tracking & Stateful NAT
DOCX
Open vswitch datapath implementation
PPTX
Network emulator
PDF
New Ways to Find Latency in Linux Using Tracing
PDF
The value of reactive
PDF
Geographically dispersed perconaxtra db cluster deployment
PPTX
Modern Linux Tracing Landscape
Anatomy of neutron from the eagle eyes of troubelshoorters
Troubleshooting containerized triple o deployment
How to Troubleshoot OpenStack Without Losing Sleep
OpenvSwitch Deep Dive
Seminar
High available energy management system
BPF - in-kernel virtual machine
Managing Open vSwitch Across a Large Heterogenous Fleet
Lect9
2015 FOSDEM - OVS Stateful Services
Open VSwitch .. Use it for your day to day needs
Linux Linux Traffic Control
Linux Networking Explained
Open vSwitch - Stateful Connection Tracking & Stateful NAT
Open vswitch datapath implementation
Network emulator
New Ways to Find Latency in Linux Using Tracing
The value of reactive
Geographically dispersed perconaxtra db cluster deployment
Modern Linux Tracing Landscape
Ad

Similar to Training Slides: 104 - Basics - Working With Command Line Tools (20)

PDF
Training Slides: Advanced 304: Upgrading From Native MySQL Replication To Tun...
PDF
Training Slides: Basics 104: Simple Tungsten Clustering Deployments
PDF
Training Slides: Intermediate 202: Performing Cluster Maintenance with Zero-D...
PDF
Training Slides: 202 - Monitoring & Troubleshooting
PDF
Training Slides: Advanced 302: Performing Schema Changes in a Multi-Site/Mult...
PDF
Training Slides: Basics 102: Introduction to Tungsten Clustering
PDF
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
PDF
Buytaert kris my_sql-pacemaker
PDF
MySQL Multi-Source Replication for PL2016
PDF
Nagios Conference 2012 - Sheeri Cabral - Alerting With MySQL and Nagios
PDF
Script it
PDF
MySQL 8.0 InnoDB Cluster demo
PDF
DATABASE AUTOMATION with Thousands of database, monitoring and backup
PDF
Slides: Introducing the new ClusterControl 1.2.9 - with live demo
ODP
MySQL HA with PaceMaker
ODP
MySQL 101 PHPTek 2017
PPT
MySQL Cluster Basics
PDF
20190817 coscup-oracle my sql innodb cluster sharing
PDF
Training Slides: 101 - Basics: Tungsten Clustering - Under The Hood
PPTX
Mysql-Basics.pptx
Training Slides: Advanced 304: Upgrading From Native MySQL Replication To Tun...
Training Slides: Basics 104: Simple Tungsten Clustering Deployments
Training Slides: Intermediate 202: Performing Cluster Maintenance with Zero-D...
Training Slides: 202 - Monitoring & Troubleshooting
Training Slides: Advanced 302: Performing Schema Changes in a Multi-Site/Mult...
Training Slides: Basics 102: Introduction to Tungsten Clustering
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
Buytaert kris my_sql-pacemaker
MySQL Multi-Source Replication for PL2016
Nagios Conference 2012 - Sheeri Cabral - Alerting With MySQL and Nagios
Script it
MySQL 8.0 InnoDB Cluster demo
DATABASE AUTOMATION with Thousands of database, monitoring and backup
Slides: Introducing the new ClusterControl 1.2.9 - with live demo
MySQL HA with PaceMaker
MySQL 101 PHPTek 2017
MySQL Cluster Basics
20190817 coscup-oracle my sql innodb cluster sharing
Training Slides: 101 - Basics: Tungsten Clustering - Under The Hood
Mysql-Basics.pptx
Ad

More from Continuent (20)

PDF
Tungsten Webinar: v6 & v7 Release Recap, and Beyond
PDF
Continuent Tungsten Value Proposition Webinar
PDF
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #7: ClusterControl
PDF
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #5: Oracle’s InnoDB Cluster
PDF
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #4: MS Azure Database MySQL
PDF
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #2: Galera Cluster
PDF
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #1: AWS Aurora
PDF
Webinar Slides: AWS Aurora MySQL Replacement: Break Away From Geo-Limitations...
PDF
Webinar Slides: No Data Loss MySQL: Guaranteed Credit Card Transaction Availa...
PDF
Webinar Slides: Intelligent Database Proxies: Routing & Transparent Failover
PPTX
Webinar Slides: High Volume MySQL HA: SaaS Continuous Operations with Terabyt...
PDF
Training Slides: 205 - Installing and Configuring Tungsten Dashboard
PDF
Training Slides: 352 - Tungsten Replicator for MongoDB & Kafka
PDF
Training Slides: 351 - Tungsten Replicator for Data Warehouses
PDF
Training Slides: 303 - Replicating out of a Cluster
PDF
Training Slides: 206 - Using the Tungsten Cluster AMI
PDF
Training Slides: 254 - Using the Tungsten Replicator AMI
PDF
Training Slides: 253 - Filter like a Pro
PDF
Training Slides: 252 - Monitoring & Troubleshooting
PDF
Training Slides: 302 - Securing Your Cluster With SSL
Tungsten Webinar: v6 & v7 Release Recap, and Beyond
Continuent Tungsten Value Proposition Webinar
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #7: ClusterControl
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #5: Oracle’s InnoDB Cluster
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #4: MS Azure Database MySQL
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #2: Galera Cluster
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #1: AWS Aurora
Webinar Slides: AWS Aurora MySQL Replacement: Break Away From Geo-Limitations...
Webinar Slides: No Data Loss MySQL: Guaranteed Credit Card Transaction Availa...
Webinar Slides: Intelligent Database Proxies: Routing & Transparent Failover
Webinar Slides: High Volume MySQL HA: SaaS Continuous Operations with Terabyt...
Training Slides: 205 - Installing and Configuring Tungsten Dashboard
Training Slides: 352 - Tungsten Replicator for MongoDB & Kafka
Training Slides: 351 - Tungsten Replicator for Data Warehouses
Training Slides: 303 - Replicating out of a Cluster
Training Slides: 206 - Using the Tungsten Cluster AMI
Training Slides: 254 - Using the Tungsten Replicator AMI
Training Slides: 253 - Filter like a Pro
Training Slides: 252 - Monitoring & Troubleshooting
Training Slides: 302 - Securing Your Cluster With SSL

Recently uploaded (20)

PPTX
Module 1 - Cyber Law and Ethics 101.pptx
PDF
Cloud-Scale Log Monitoring _ Datadog.pdf
PPTX
SAP Ariba Sourcing PPT for learning material
PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
PPTX
CHE NAA, , b,mn,mblblblbljb jb jlb ,j , ,C PPT.pptx
PPTX
Introuction about WHO-FIC in ICD-10.pptx
PDF
SASE Traffic Flow - ZTNA Connector-1.pdf
PPTX
PptxGenJS_Demo_Chart_20250317130215833.pptx
PPTX
INTERNET------BASICS-------UPDATED PPT PRESENTATION
PDF
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
PPTX
Power Point - Lesson 3_2.pptx grad school presentation
PDF
WebRTC in SignalWire - troubleshooting media negotiation
PPTX
Slides PPTX World Game (s) Eco Economic Epochs.pptx
PDF
Best Practices for Testing and Debugging Shopify Third-Party API Integrations...
PPTX
innovation process that make everything different.pptx
PPT
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
PDF
How to Ensure Data Integrity During Shopify Migration_ Best Practices for Sec...
PDF
Tenda Login Guide: Access Your Router in 5 Easy Steps
PDF
Decoding a Decade: 10 Years of Applied CTI Discipline
PPTX
Job_Card_System_Styled_lorem_ipsum_.pptx
Module 1 - Cyber Law and Ethics 101.pptx
Cloud-Scale Log Monitoring _ Datadog.pdf
SAP Ariba Sourcing PPT for learning material
Design_with_Watersergyerge45hrbgre4top (1).ppt
CHE NAA, , b,mn,mblblblbljb jb jlb ,j , ,C PPT.pptx
Introuction about WHO-FIC in ICD-10.pptx
SASE Traffic Flow - ZTNA Connector-1.pdf
PptxGenJS_Demo_Chart_20250317130215833.pptx
INTERNET------BASICS-------UPDATED PPT PRESENTATION
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
Power Point - Lesson 3_2.pptx grad school presentation
WebRTC in SignalWire - troubleshooting media negotiation
Slides PPTX World Game (s) Eco Economic Epochs.pptx
Best Practices for Testing and Debugging Shopify Third-Party API Integrations...
innovation process that make everything different.pptx
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
How to Ensure Data Integrity During Shopify Migration_ Best Practices for Sec...
Tenda Login Guide: Access Your Router in 5 Easy Steps
Decoding a Decade: 10 Years of Applied CTI Discipline
Job_Card_System_Styled_lorem_ipsum_.pptx

Training Slides: 104 - Basics - Working With Command Line Tools

  • 1. The MySQL Availability Company Tungsten Cluster Master Class Basics: Working with Command Line Tools Chris Parker, Customer Success Director, EMEA & APAC
  • 2. Topics In this short course, we will • Re-cap the previous Installation • Explore the main Command Line Tools • tpm • cctrl • trepctl • thl
  • 4. Tungsten Cluster Standalone Cluster • Minimum 3 nodes • 1 Primary • 2 Replicas • Odd number of nodes • Single datacenter/region
  • 6. tpm • Tungsten Package Manager • As well as using tpm for installs and updates, it can also be used for a number of other actions. You can issue tpm help for a list of possible options. • Most common options: • tools/tpm validate[-update] • [tools/]tpm update [--replace-release] [--no-connectors] • tools/tpm install • tpm diag – Gathers package of stats for support! • tpm connector – Launches the MySQL command-line client and connects to the current Primary node via locally-running Connector process • tpm mysql – Launches the MySQL command-line client and connects to the MySQL server process running on the local host
  • 7. tpm connector • Simple and quick way to connect to the current MySQL Primary node via the command line • Only works on hosts where the Connector is running • Will authenticate using credential supplied via application-user and application-password properties • Provides additional commands to query database and cluster stats: • Connector-based Tungsten commands are NOT available in Bridge Mode • This is a good way to tell if you are in Bridge mode – if no commands are available, then you are in Bridge mode • `tungsten help` will show all commands available mysql> tungsten help; +---------------------------------------------------------------------------------------------------------------------------------+ | Message | +---------------------------------------------------------------------------------------------------------------------------------+ | tungsten connection status: display information about the connection used for the last request ran | | tungsten connection count: gives the count of current connections to each one of the cluster datasources | | tungsten cluster status: prints detailed information about the cluster view this connector has | | tungsten show [full] processlist: list all running queries handled by this connector instance | | tungsten show variables [like '<string>']: list connector configuration options in use. The <string> may contain '%' wildcards | | tungsten flush privileges: reload user.map and refresh user credentials | | tungsten mem info: display memory information about current JVM | | tungsten gc: calls garbage collector | | tungsten help: display this help message | +---------------------------------------------------------------------------------------------------------------------------------+ 9 rows in set (0.00 sec)
  • 8. cctrl • cctrl stands for Cluster Control • Can be executed from any node running the manager in the cluster. For example, running cctrl on a Connector-only host will fail. • Allows control of all nodes in the cluster • Main uses are • Check cluster state • Isolate nodes for maintenance • Switch Primary nodes • Recover nodes following failure/recovery • Perform backup/recovery operations • Requires the Manager to be running
  • 9. cctrl help • Outputs list of commands available in cctrl • Use help <command> for more detail on each command
  • 10. cctrl ls • COORDINATOR[db3:AUTOMATIC:ONLINE] • Identifies current Coordinator host and Current Cluster Mode • ROUTERS: • Lists all connectors associated with the installation, each connector shows status, and created/active connection counts • DATASOURCES: • Lists all nodes that form the cluster
  • 11. cctrl Host, Role, Status Last seqno Extracted Latency from DB commit to THL Last seqno Applied Latency Applying to Target Database
  • 12. cctrl Status of manager process Role and status of replicator process Status of MySQL DatabaseConnections through Connectors to DB Role and status of replicator process. On a replica, shows primary the replica is connected to
  • 13. cctrl cluster validate • Checks the validity of the cluster and ensures that all nodes are reachable
  • 14. cctrl cluster heartbeat • Inserts an entry into the Primary ‘heartbeat’ table • Good way to check that replication is flowing properly • Check the progress= entries in the ls output
  • 15. cctrl Cluster Policy Modes • AUTOMATIC • Normal Operational state • Ensures automatic failover • Will attempt auto-recovery of components (MySQL server and Replicator) • MAINTENANCE • Prevents automatic operations mentioned above • Should ONLY be used during Maintenance Windows
  • 16. trepctl • Used to control and manage the replicator Java process • Most common uses are • View replicator status • Stop/Start replication • Skip “safe” errors • trepctl help to see all options
  • 17. trepctl • trepctl services • Short list output of all services running on the host • Shows basic information • trepctl [-service SERVICENAME] status [-r N] • Shows the full status of the replicator • Specify –service if multiple services available • Specify –r N to refresh every N seconds or until CTRL+C • trepctl [-service SERVICENAME] status -name stages • A more complete status view showing detailed output of each replicator stage
  • 18. trepctl • trepctl [-service SERVICENAME] qs [-r N] • Shows a quick summary of the replicator progress • Specify –service if multiple services available • Specify –r N to refresh every N seconds or until CTRL+C • trepctl [-service SERVICENAME] perf [-r N] • Shows the status of each stage of the replication pipeline • Output differs between Primary and Replicas • Specify –service if there are multiple services available • Specify –r N to refresh every N seconds or until CTRL+C
  • 19. trepctl • trepctl [-service SERVICENAME] reset {OPTIONS} • Performs a FULL reset of the replicator • VERY destructive if used incorrectly • Resets SEQNO to 0 • trepctl [-service SERVICENAME] offline|online {OPTIONS} • Bring a service online or offline • Can be used with various options to control how/when • Used with –skip-seqno to skip errors
  • 20. trepctl status appliedLastEventId : mysql-bin.000005:0000000051631947;-1 appliedLastSeqno : 166764 appliedLatency : 0.769 autoRecoveryEnabled : false autoRecoveryTotal : 0 channels : 1 clusterName : alpha currentEventId : mysql-bin.000005:0000000051631947 currentTimeMillis : 1578578135591 dataServerHost : trainingdb1 extensions : host : trainingdb1 latestEpochNumber : 9 masterConnectUri : thl://localhost:/ masterListenUri : thl://trainingdb1:2112/
  • 21. trepctl status appliedLastEventId : mysql-bin.000005:0000000051631947;-1 appliedLastSeqno : 166764 appliedLatency : 0.769 autoRecoveryEnabled : false autoRecoveryTotal : 0 channels : 1 clusterName : alpha currentEventId : mysql-bin.000005:0000000051631947 currentTimeMillis : 1578578135591 dataServerHost : trainingdb1 extensions : host : trainingdb1 latestEpochNumber : 9 masterConnectUri : thl://localhost:/ masterListenUri : thl:// trainingdb1 :2112/ On a Primary, the last ending binary log position written to the THL along with the Seqno for that event, and the latency between the database commit to the binlog and the THL write completion. On a replica, displays the last event written to the target database with the corresponding Seqno, and the latency between the source database commit and the completed apply of that event to the target database.
  • 22. trepctl status appliedLastEventId : mysql-bin.000005:0000000051631947;-1 appliedLastSeqno : 166764 appliedLatency : 0.769 autoRecoveryEnabled : false autoRecoveryTotal : 0 channels : 1 clusterName : alpha currentEventId : mysql-bin.000005:0000000051631947 currentTimeMillis : 1578578135591 dataServerHost : trainingdb1 extensions : host : trainingdb1 latestEpochNumber : 9 masterConnectUri : thl://localhost:/ masterListenUri : thl:// trainingdb1 :2112/ Auto-Recovery properties
  • 23. trepctl status appliedLastEventId : mysql-bin.000005:0000000051631947;-1 appliedLastSeqno : 166764 appliedLatency : 0.769 autoRecoveryEnabled : false autoRecoveryTotal : 0 channels : 1 clusterName : alpha currentEventId : mysql-bin.000005:0000000051631947 currentTimeMillis : 1578578135591 dataServerHost : trainingdb1 extensions : host : trainingdb1 latestEpochNumber : 9 masterConnectUri : thl://localhost:/ masterListenUri : thl://trainingdb1:2112/ Current Binlog position of the database (NONE on Replicas)
  • 24. trepctl status appliedLastEventId : mysql-bin.000005:0000000051631947;-1 appliedLastSeqno : 166764 appliedLatency : 0.769 autoRecoveryEnabled : false autoRecoveryTotal : 0 channels : 1 clusterName : alpha currentEventId : mysql-bin.000005:0000000051631947 currentTimeMillis : 1578578135591 dataServerHost : trainingdb1 extensions : host : trainingdb1 latestEpochNumber : 9 masterConnectUri : thl://localhost:/ masterListenUri : thl://trainingdb1:2112/ masterConnectUri shows the source THL server we are connected to masterListenUri shows the THL server listener protocol, host and port information for replicas to connect with
  • 25. trepctl status maximumStoredSeqNo : 166764 minimumStoredSeqNo : 0 offlineRequests : NONE pendingError : NONE pendingErrorCode : NONE pendingErrorEventId : NONE pendingErrorSeqno : -1 pendingExceptionMessage: NONE pipelineSource : /var/lib/mysql relativeLatency : 580.591 resourceJdbcDriver : org.drizzle.jdbc.DrizzleDriver resourceJdbcUrl : jdbc:mysql:thin://trainingdb1:13306/${DBNAME}. . . resourcePrecedence : 99 resourceVendor : mysql rmiPort : 10000
  • 26. trepctl status maximumStoredSeqNo : 166764 minimumStoredSeqNo : 0 offlineRequests : NONE pendingError : NONE pendingErrorCode : NONE pendingErrorEventId : NONE pendingErrorSeqno : -1 pendingExceptionMessage: NONE pipelineSource : /var/lib/mysql relativeLatency : 580.591 resourceJdbcDriver : org.drizzle.jdbc.DrizzleDriver resourceJdbcUrl : jdbc:mysql:thin:// trainingdb1:13306 /${DBNAME}. . . resourcePrecedence : 99 resourceVendor : mysql rmiPort : 10000 When the Replicator goes into an OFFLINE:ERROR state, these fields will show all the associated information. Always check the trepsvc.log file for more detail as needed.
  • 27. trepctl status maximumStoredSeqNo : 166764 minimumStoredSeqNo : 0 offlineRequests : NONE pendingError : NONE pendingErrorCode : NONE pendingErrorEventId : NONE pendingErrorSeqno : -1 pendingExceptionMessage: NONE pipelineSource : /var/lib/mysql relativeLatency : 580.591 resourceJdbcDriver : org.drizzle.jdbc.DrizzleDriver resourceJdbcUrl : jdbc:mysql:thin://trainingdb1:13306/${DBNAME}. . . resourcePrecedence : 99 resourceVendor : mysql rmiPort : 10000 The current source of THL. Most cases will match the masterConnectUri unless using an MSAA topology. A Primary will show the binary log directory.
  • 28. trepctl status maximumStoredSeqNo : 166764 minimumStoredSeqNo : 0 offlineRequests : NONE pendingError : NONE pendingErrorCode : NONE pendingErrorEventId : NONE pendingErrorSeqno : -1 pendingExceptionMessage: NONE pipelineSource : /var/lib/mysql relativeLatency : 580.591 resourceJdbcDriver : org.drizzle.jdbc.DrizzleDriver resourceJdbcUrl : jdbc:mysql:thin://trainingdb1:13306/${DBNAME}. . . resourcePrecedence : 99 resourceVendor : mysql rmiPort : 10000 Latency between NOW and the timestamp of the last event in the local THL.
  • 29. trepctl status role : master seqnoType : java.lang.Long serviceName : alpha serviceType : local simpleServiceName : alpha siteName : default sourceId : trainingdb1 state : ONLINE timeInStateSeconds : 85641.738 timezone : GMT transitioningTo : uptimeSeconds : 85673.511 useSSLConnection : false version : Tungsten Clustering 6.1.4 build 44
  • 30. trepctl status role : master seqnoType : java.lang.Long serviceName : training1 serviceType : local simpleServiceName : training1 siteName : default sourceId : trainingdb1 state : ONLINE timeInStateSeconds : 85641.738 timezone : GMT transitioningTo : uptimeSeconds : 85673.511 useSSLConnection : false version : Tungsten Clustering 6.1.4 build 44 Current role : master, slave or relay Current State, can be : • ONLINE • ONLINE:DEGRADED • ONLINE:DEGRADED-BINLOG-FULLY-READ • OFFLINE:NORMAL • SUSPECT • OFFLINE:ERROR • GOING-ONLINE:SYNCHRONISING • GOING-ONLINE:RESTORING • GOING-ONLINE:PROVISIONING
  • 31. Applied Latency vs Relative Latency The appliedLatency is the latency between the commit time of the source event and the time the last committed transaction reached the end of the corresponding pipeline within the replicator. Within a primary, this indicates the latency between the transaction commit time and when it was written to the THL. In a replica, it indicates the latency between the commit time on the primary database and when the transaction has been committed to the destination database. Clocks must be synchronized across hosts for this information to be accurate. The latency is measured in seconds. Increasing latency may indicate that the destination database is unable to keep up with the transactions from the primary. In replicators that are operating with parallel apply, appliedLatency indicates the latency of the trailing channel. Because the parallel apply mechanism does not update all channels simultaneously, the figure shown may trail significantly from the actual latency. The relativeLatency is the latency between now and timestamp of the last event written into the local THL. This information gives an indication of how fresh the incoming THL information is. On a primary, it indicates whether the primary is keeping up with transactions generated on the primary database. On a replica, it indicates how up to date the THL read from the extractor is. A large value can either indicate that the database is not busy, that a large transaction is currently being read from the source database or from the primary replicator, or that the replicator has stalled for some reason. An increasing relativeLatency on the replica may indicate that the replicator may have stalled and stopped applying changes to the database.
  • 32. thl • Interface for viewing the contents of the THL • thl help to view all command options • thl info – Show a summary of the THL available on disk • thl list will product a lot of output, always use with options to filter the result set • -low|from SEQ – Start from supplied seqno • -high|to SEQ – Stop at supplie seqno • -first – Show first seqno available • -first N – Show first N entries • -last – Show last seqno available • -last N – Show last N entries • thl index – re-index THL – can help to speed up replicator restarts • thl purge – Use with CARE since this command will REMOVE ALL THL on disk for that service
  • 33. thl SEQ# = 2 / FRAG# = 0 (last frag) - FILE = thl.data.0000000001 - TIME = 2020-01-08 13:50:52.0 - EPOCH# = 0 - EVENTID = mysql-bin.000005:0000000000000939;12297 - SOURCEID = db1 - METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; - service=training1;shard=hr] - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent - OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, collation_connection = 33, collation_server = 8] - SCHEMA = hr - SQL(0) = CREATE TABLE regions ( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , region_name VARCHAR(25) )
  • 34. thl SEQ# = 2 / FRAG# = 0 (last frag) - FILE = thl.data.0000000001 - TIME = 2020-01-08 13:50:52.0 - EPOCH# = 0 - EVENTID = mysql-bin.000005:0000000000000939;12297 - SOURCEID = db1 - METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; - service=training1;shard=hr] - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent - OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, collation_connection = 33, collation_server = 8] - SCHEMA = hr - SQL(0) = CREATE TABLE regions ( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , region_name VARCHAR(25) ) Global Sequence number for the event
  • 35. thl SEQ# = 2 / FRAG# = 0 (last frag) - FILE = thl.data.0000000001 - TIME = 2020-01-08 13:50:52.0 - EPOCH# = 0 - EVENTID = mysql-bin.000005:0000000000000939;12297 - SOURCEID = db1 - METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; - service=training1;shard=hr] - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent - OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, collation_connection = 33, collation_server = 8] - SCHEMA = hr - SQL(0) = CREATE TABLE regions ( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , region_name VARCHAR(25) ) Associated THL File on Disk
  • 36. thl SEQ# = 2 / FRAG# = 0 (last frag) - FILE = thl.data.0000000001 - TIME = 2020-01-08 13:50:52.0 - EPOCH# = 0 - EVENTID = mysql-bin.000005:0000000000000939;12297 - SOURCEID = db1 - METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; - service=training1;shard=hr] - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent - OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, collation_connection = 33, collation_server = 8] - SCHEMA = hr - SQL(0) = CREATE TABLE regions ( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , region_name VARCHAR(25) ) Commit time to Binary Logs
  • 37. thl SEQ# = 2 / FRAG# = 0 (last frag) - FILE = thl.data.0000000001 - TIME = 2020-01-08 13:50:52.0 - EPOCH# = 0 - EVENTID = mysql-bin.000005:0000000000000939;12297 - SOURCEID = db1 - METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; - service=training1;shard=hr] - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent - OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, collation_connection = 33, collation_server = 8] - SCHEMA = hr - SQL(0) = CREATE TABLE regions ( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , region_name VARCHAR(25) ) Associated Binary Log File and Position
  • 38. thl SEQ# = 2 / FRAG# = 0 (last frag) - FILE = thl.data.0000000001 - TIME = 2020-01-08 13:50:52.0 - EPOCH# = 0 - EVENTID = mysql-bin.000005:0000000000000939;12297 - SOURCEID = db1 - METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; - service=training1;shard=hr] - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent - OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, collation_connection = 33, collation_server = 8] - SCHEMA = hr - SQL(0) = CREATE TABLE regions ( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , region_name VARCHAR(25) ) Source of transaction (Should be a Primary!)
  • 39. thl SEQ# = 2 / FRAG# = 0 (last frag) - FILE = thl.data.0000000001 - TIME = 2020-01-08 13:50:52.0 - EPOCH# = 0 - EVENTID = mysql-bin.000005:0000000000000939;12297 - SOURCEID = db1 - METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; - service=training1;shard=hr] - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent - OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, collation_connection = 33, collation_server = 8] - SCHEMA = hr - SQL(0) = CREATE TABLE regions ( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , region_name VARCHAR(25) ) Metadata
  • 40. thl SEQ# = 2 / FRAG# = 0 (last frag) - FILE = thl.data.0000000001 - TIME = 2020-01-08 13:50:52.0 - EPOCH# = 0 - EVENTID = mysql-bin.000005:0000000000000939;12297 - SOURCEID = db1 - METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; - service=training1;shard=hr] - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent - OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, collation_connection = 33, collation_server = 8] - SCHEMA = hr - SQL(0) = CREATE TABLE regions ( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , region_name VARCHAR(25) ) The database schema that the following SQL is being applied to
  • 41. thl SEQ# = 2 / FRAG# = 0 (last frag) - FILE = thl.data.0000000001 - TIME = 2020-01-08 13:50:52.0 - EPOCH# = 0 - EVENTID = mysql-bin.000005:0000000000000939;12297 - SOURCEID = db1 - METADATA = [mysql_server_id=101;unsafe_for_block_commit;dbms_type=mysql;tz_aware=true; - service=training1;shard=hr] - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent - OPTIONS = [##charset = UTF-8, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, unique_checks = 1, auto_increment_increment = 2, auto_increment_offset = 1, sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE', character_set_client = 33, collation_connection = 33, collation_server = 8] - SCHEMA = hr - SQL(0) = CREATE TABLE regions ( region_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , region_name VARCHAR(25) ) DDL Statement
  • 42. thl SEQ# = 5 / FRAG# = 0 (last frag) - FILE = thl.data.0000000001 - TIME = 2020-01-08 13:51:38.0 - EPOCH# = 0 - EVENTID = mysql-bin.000005:0000000000001746;-1 - SOURCEID = db1 - METADATA = [mysql_server_id=101;dbms_type=mysql;tz_aware=true;service=training1;shard=hr] - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent - OPTIONS = [foreign_key_checks = 1, unique_checks = 1, time_zone = '+00:00', ##charset = UTF-8] - SQL(0) = - ACTION = INSERT - SCHEMA = hr - TABLE = regions - ROW# = 0 - COL(1: ) = 1 - COL(2: ) = europe Row Change Data
  • 43. When the PrimaryKey (pkey) filter is enabled, the key information is optimized to only contain the actual primary keys for the row-based THL record. - SQL(0) = - ACTION = UPDATE - SCHEMA = hr - TABLE = regions - ROW# = 0 - COL(1: ) = 1 - COL(2: ) = Europe - KEY(1: ) = 1 - KEY(2: ) = europe - SQL(0) = - ACTION = UPDATE - SCHEMA = hr - TABLE = regions - ROW# = 0 - COL(1: ) = 1 - COL(2: ) = Europe - KEY(1: ) = 1 - SQL(0) = - ACTION = DELETE - SCHEMA = hr - TABLE = regions - ROW# = 0 - KEY(1: ) = 1 - KEY(2: ) = Europe - SQL(0) = - ACTION = DELETE - SCHEMA = hr - TABLE = regions - ROW# = 0 - KEY(1: ) = 1 UPDATE DELETE Without pkey filter With pkey filter
  • 44. Other useful tools • dsctl • Advanced method to reset replicator position • tungsten_find_position • Can be used to interrogate THL for a specific binary log position and return a dsctl command to reposition a replicator • tungsten_find_seqno • Works in the same way as tungsten_find_position but searches based on a sequence number • multi_trepctl • Useful for Multi-Site/Active-Active deployments
  • 45. Summary What we have learnt today • How to use the command line tools • tpm • cctrl • trepctl • thl • How to interpret status output
  • 46. Next Steps In the next session we will • Discuss Maintenance Operations • Isolating Cluster Nodes • Updating paramaters • Failover/Switches • Rolling Maintenance • Upgrades
  • 47. THANK YOU FOR LISTENING continuent.com The MySQL Availability Company Chris Parker, Customer Success Director, EMEA & APAC