Table Maintenance in MySQL.
This page contains several commands you will use to optimize, analyse and repair tables. It also presents the mysqlcheck command line tool.
Table maintenance will separated in five ways .They are :
- Check Table
- Repair Table
- Analyse Table
- Optimise Table
- mysqlcheck
To get information about above table maintenance options .
Connect to mysql
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
oot@ip-172-31-14-134:~# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 5.6.42 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> |
Check the databases.
1 2 3 4 5 6 7 8 9 10 11 12 |
mysql >show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | db3 | | mysql | | performance_schema | | world | +--------------------+ 6 rows in set (0.00 sec) |
Conenct to world database.
1 2 3 4 5 |
mysql> use world 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 |
Now we can use help contents option to get the topics list
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
mysql> help contents You asked for help about help category: "Contents" For more information, type 'help <item>', where <item> is one of the following categories: Account Management Administration Compound Statements Data Definition Data Manipulation Data Types Functions Functions and Modifiers for Use with GROUP BY Geographic Features Help Metadata Language Structure Plugins Procedures Storage Engines Table Maintenance Transactions User-Defined Functions Utility |
We need to choose Table maintenance option .
1 2 3 4 5 6 7 8 9 |
mysql> help Table Maintenance You asked for help about help category: "Table Maintenance" For more information, type 'help <item>', where <item> is one of the following topics: ANALYZE TABLE CHECK TABLE CHECKSUM TABLE OPTIMIZE TABLE REPAIR TABLE |
In table maintenance we have five topics.
Check with any option
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
mysql> help analyze table Name: 'ANALYZE TABLE' Description: Syntax: ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... ANALYZE TABLE performs a key distribution analysis and stores the distribution for the named table or tables. For MyISAM tables, this statement is equivalent to using myisamchk --analyze. This statement requires SELECT and INSERT privileges for the table. ANALYZE TABLE works with InnoDB, NDB, and MyISAM tables. It does not work with views. ANALYZE TABLE is supported for partitioned tables, and you can use ALTER TABLE ... ANALYZE PARTITION to analyze one or more partitions; for more information, see [HELP ALTER TABLE], and http://dev.mysql.com/doc/refman/5.6/en/partitioning-maintenance.html. During the analysis, the table is locked with a read lock for InnoDB and MyISAM. By default, the server writes ANALYZE TABLE statements to the binary log so that they replicate to replication slaves. To suppress logging, specify the optional NO_WRITE_TO_BINLOG keyword or its alias LOCAL. URL: http://dev.mysql.com/doc/refman/5.6/en/analyze-table.html |
If you check with any option it contains syntax’s ,description and alse http link of MySQL docs.
1.Check Table
The CHECK TABLE statement checks a table for errors. If CHECK TABLE finds an issue with the table, it marks it as corrupted and cannot be used until it is repaired.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
mysql> help check table Name: 'CHECK TABLE' Description: Syntax: CHECK TABLE tbl_name [, tbl_name] ... [option] ... option: { FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED } CHECK TABLE checks a table or tables for errors. For MyISAM tables, the key statistics are updated as well. CHECK TABLE can also check views for problems, such as tables that are referenced in the view definition that no longer exist. To check a table, you must have some privilege for it. CHECK TABLE works for InnoDB, MyISAM, ARCHIVE, and CSV tables. Before running CHECK TABLE on InnoDB tables, see http://dev.mysql.com/doc/refman/5.6/en/check-table.html#check-table-inn odb. CHECK TABLE is supported for partitioned tables, and you can use ALTER TABLE ... CHECK PARTITION to check one or more partitions; for more information, see [HELP ALTER TABLE], and http://dev.mysql.com/doc/refman/5.6/en/partitioning-maintenance.html. In MySQL 5.6.11 only, gtid_next must be set to AUTOMATIC before issuing this statement. (Bug #16062608, Bug #16715809, Bug #69045) URL: http://dev.mysql.com/doc/refman/5.6/en/check-table.html |
Check current database and tables list .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
mysql> select database (); +-------------+ | database () | +-------------+ | world | +-------------+ 1 row in set (0.00 sec) mysql> show tables; +-----------------+ | Tables_in_world | +-----------------+ | city | | country | | countrylanguage | | sampleview | | t3 | | test | | test2 | | test3 | | tt | +-----------------+ 9 rows in set (0.00 sec) |
Now choose one object and use check option.
1 2 3 4 5 6 7 |
mysql> check table city; +------------+-------+----------+----------+ | Table | Op | Msg_type | Msg_text | +------------+-------+----------+----------+ | world.city | check | status | OK | +------------+-------+----------+----------+ 1 row in set (0.01 sec) |
Here the table doesn’t have any issues .
Incase if your table is corrupted msg type is error and text will be corrupted
We can check multiple tables at a time.
1 2 3 4 5 6 7 8 9 |
mysql> CHECK TABLE city,country,t3; +---------------+-------+----------+----------+ | Table | Op | Msg_type | Msg_text | +---------------+-------+----------+----------+ | world.city | check | status | OK | | world.country | check | status | OK | | world.t3 | check | status | OK | +---------------+-------+----------+----------+ 3 rows in set (0.00 sec) |
Let’s create a view
1 2 |
mysql> create view vwt3 as select * from t3; Query OK, 0 rows affected (0.00 sec) |
Now check the object types.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
mysql> show full tables; +-----------------+------------+ | Tables_in_world | Table_type | +-----------------+------------+ | city | BASE TABLE | | country | BASE TABLE | | countrylanguage | BASE TABLE | | sampleview | VIEW | | t3 | BASE TABLE | | test | BASE TABLE | | test2 | BASE TABLE | | test3 | BASE TABLE | | tt | BASE TABLE | | vwt3 | VIEW | +-----------------+------------+ 10 rows in set (0.00 sec) |
Now drop the base table called t3 and check the status of view
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mysql> CHECK TABLE city,country,t3,vwt3; +---------------+-------+----------+----------+ | Table | Op | Msg_type | Msg_text | +---------------+-------+----------+----------+ | world.city | check | status | OK | | world.country | check | status | OK | | world.t3 | check | status | OK | | world.vwt3 | check | status | OK | +---------------+-------+----------+----------+ 4 rows in set (0.01 sec) mysql> drop table t3; Query OK, 0 rows affected (0.00 sec) |
Now check the status of view .
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mysql> CHECK TABLE city,country,t3,vwt3; +---------------+-------+----------+------------------------------------------------------------------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +---------------+-------+----------+------------------------------------------------------------------------------------------------------------------------------+ | world.city | check | status | OK | | world.country | check | status | OK | | world.t3 | check | Error | Table 'world.t3' doesn't exist | | world.t3 | check | status | Operation failed | | world.vwt3 | check | Error | Table 'world.t3' doesn't exist | | world.vwt3 | check | Error | View 'world.vwt3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them | | world.vwt3 | check | error | Corrupt | +---------------+-------+----------+------------------------------------------------------------------------------------------------------------------------------+ 7 rows in set (0.00 sec) |
Check the structure of vwt3 view
1 2 3 4 5 6 7 |
mysql> show create table vwt3; +------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | View | Create View | character_set_client | collation_connection | +------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | vwt3 | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vwt3` AS select `world`.`t3`.`ID` AS `ID` from `t3` | utf8 | utf8_general_ci | +------+--------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 1 row in set, 1 warning (0.00 sec) |
There is a warning at the end of the result.
2.Repair Table
The REPAIR TABLE repairs a possibly corrupted table. It is only available for MyISAM, ARCHIVE and CSV storage engines. REPAIR TABLE does is not available for InnoDB.
Content of repair table.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
mysql> help repair table Name: 'REPAIR TABLE' Description: Syntax: REPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] REPAIR TABLE repairs a possibly corrupted table, for certain storage engines only. This statement requires SELECT and INSERT privileges for the table. Although normally you should never have to run REPAIR TABLE, if disaster strikes, this statement is very likely to get back all your data from a MyISAM table. If your tables become corrupted often, try to find the reason for it, to eliminate the need to use REPAIR TABLE. See http://dev.mysql.com/doc/refman/5.6/en/crashing.html, and http://dev.mysql.com/doc/refman/5.6/en/myisam-table-problems.html. REPAIR TABLE checks the table to see whether an upgrade is required. If so, it performs the upgrade, following the same rules as CHECK TABLE ... FOR UPGRADE. See [HELP CHECK TABLE], for more information. *Important*: o Make a backup of a table before performing a table repair operation; under some circumstances the operation might cause data loss. Possible causes include but are not limited to file system errors. See http://dev.mysql.com/doc/refman/5.6/en/backup-and-recovery.html. o If the server crashes during a REPAIR TABLE operation, it is essential after restarting it that you immediately execute another REPAIR TABLE statement for the table before performing any other operations on it. In the worst case, you might have a new clean index file without information about the data file, and then the next operation you perform could overwrite the data file. This is an unlikely but possible scenario that underscores the value of making a backup first. o In the event that a table on the master becomes corrupted and you run REPAIR TABLE on it, any resulting changes to the original table are not propagated to slaves. o In MySQL 5.6.11 only, gtid_next must be set to AUTOMATIC before issuing this statement. (Bug #16062608, Bug #16715809, Bug #69045) URL: http://dev.mysql.com/doc/refman/5.6/en/repair-table.html |
Repair table will not work for InnoDB Storage Engine.
Will corrupt a table by changing the content in a physical file
choose one table.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> show tables; +-----------------+ | Tables_in_world | +-----------------+ | city | | country | | countrylanguage | | sampleview | | test | | test2 | | test3 | | tt | | vwt3 | +-----------------+ 9 rows in set (0.00 sec) |
Here test2 has MyISAM Storage Engine .
Change content in physical engine
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
mysql> exit Bye root@ip-172-31-14-134:~# cd /usr/local/mysql/data/world root@ip-172-31-14-134:/usr/local/mysql/data/world# ll total 1264 drwx------ 2 mysql mysql 4096 Oct 28 18:30 ./ drwxr-xr-x 7 mysql mysql 4096 Oct 27 22:41 ../ -rw-rw---- 1 mysql mysql 8710 Oct 27 14:03 city.frm -rw-rw---- 1 mysql mysql 589824 Oct 27 14:03 city.ibd -rw-rw---- 1 mysql mysql 9172 Oct 27 14:03 country.frm -rw-rw---- 1 mysql mysql 163840 Oct 27 14:03 country.ibd -rw-rw---- 1 mysql mysql 8702 Oct 27 14:03 countrylanguage.frm -rw-rw---- 1 mysql mysql 229376 Oct 27 14:03 countrylanguage.ibd -rw-rw---- 1 mysql mysql 65 Oct 27 14:03 db.opt -rw-rw---- 1 mysql mysql 722 Oct 27 17:54 sampleview.frm -rw-rw---- 1 mysql mysql 8556 Oct 27 14:43 test2.frm -rw-rw---- 1 mysql mysql 0 Oct 27 14:43 test2.MYD -rw-rw---- 1 mysql mysql 1024 Oct 27 14:43 test2.MYI -rw-rw---- 1 mysql mysql 8556 Oct 27 14:44 test3.frm -rw-rw---- 1 mysql mysql 0 Oct 27 14:44 test3.MYD -rw-rw---- 1 mysql mysql 1024 Oct 27 14:44 test3.MYI -rw-rw---- 1 mysql mysql 8556 Oct 27 14:48 test.frm -rw-rw---- 1 mysql mysql 98304 Oct 27 14:48 test.ibd -rw-rw---- 1 mysql mysql 8556 Oct 27 21:34 tt.frm -rw-rw---- 1 mysql mysql 98304 Oct 27 21:34 tt.ibd -rw-rw---- 1 mysql mysql 388 Oct 28 18:30 vwt3.frm root@ip-172-31-14-134:/usr/local/mysql/data/world# vi test2.MYI add some fake lines |
Now check the status of test2 object.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mysql> use world 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> check table test2; +-------------+-------+----------+-------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-------------+-------+----------+-------------------------------------------------+ | world.test2 | check | warning | Size of indexfile is: 1050 Should be: 1024 | | world.test2 | check | status | OK | +-------------+-------+----------+-------------------------------------------------+ 2 rows in set (0.00 sec) |
Now repair test2 table.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mysql> repair table test2; +-------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +-------------+--------+----------+----------+ | world.test2 | repair | status | OK | +-------------+--------+----------+----------+ 1 row in set (0.00 sec) mysql> check table test2; +-------------+-------+----------+----------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-------------+-------+----------+----------------------------------------------------------------+ | world.test2 | check | Error | Incorrect key file for table './world/test2'; try to repair it | | world.test2 | check | Error | Incorrect key file for table 'test2'; try to repair it | | world.test2 | check | error | Corrupt | +-------------+-------+----------+----------------------------------------------------------------+ 3 rows in set (0.00 sec) |
Now we got corrupt result .
Using FRM file we need repair the object.
1 2 3 4 5 6 7 |
mysql> Repair table test2 use_FRM; +-------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +-------------+--------+----------+----------+ | world.test2 | repair | status | OK | +-------------+--------+----------+----------+ 1 row in set (0.00 sec) |
Now check the status of test2 object.
1 2 3 4 5 6 7 |
mysql> check table test2; +-------------+-------+----------+----------+ | Table | Op | Msg_type | Msg_text | +-------------+-------+----------+----------+ | world.test2 | check | status | OK | +-------------+-------+----------+----------+ 1 row in set (0.00 sec) |
3.Analyse Table
The ANALYZE TABLE statement analyses the key distribution of a table. It locks the table with a read lock while the analysis takes place.
MySQL uses the key distribution to decide the order to use tables during a join operation. Key distribution can also be used to decide what indexes to use.
It returns a result informing the result:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
mysql> help analyze table; Name: 'ANALYZE TABLE' Description: Syntax: ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... ANALYZE TABLE performs a key distribution analysis and stores the distribution for the named table or tables. For MyISAM tables, this statement is equivalent to using myisamchk --analyze. This statement requires SELECT and INSERT privileges for the table. ANALYZE TABLE works with InnoDB, NDB, and MyISAM tables. It does not work with views. ANALYZE TABLE is supported for partitioned tables, and you can use ALTER TABLE ... ANALYZE PARTITION to analyze one or more partitions; for more information, see [HELP ALTER TABLE], and http://dev.mysql.com/doc/refman/5.6/en/partitioning-maintenance.html. During the analysis, the table is locked with a read lock for InnoDB and MyISAM. By default, the server writes ANALYZE TABLE statements to the binary log so that they replicate to replication slaves. To suppress logging, specify the optional NO_WRITE_TO_BINLOG keyword or its alias LOCAL. URL: http://dev.mysql.com/doc/refman/5.6/en/analyze-table.html |
Check the table full status .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
mysql> show table status like '%city%'\G *************************** 1. row *************************** Name: city Engine: InnoDB Version: 10 Row_format: Compact Rows: 4188 Avg_row_length: 97 Data_length: 409600 Max_data_length: 0 Index_length: 131072 Data_free: 0 Auto_increment: 4080 Create_time: 2018-10-27 14:03:11 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec) |
Analyze the table
1 2 3 4 5 6 7 |
mysql> Analyze table city; +------------+---------+----------+----------+ | Table | Op | Msg_type | Msg_text | +------------+---------+----------+----------+ | world.city | analyze | status | OK | +------------+---------+----------+----------+ 1 row in set (0.00 sec) |
We can Analyze multiple tables .
1 2 3 4 5 6 7 8 9 |
mysql> Analyze table city,test3,country; +---------------+---------+----------+-----------------------------+ | Table | Op | Msg_type | Msg_text | +---------------+---------+----------+-----------------------------+ | world.city | analyze | status | OK | | world.test3 | analyze | status | Table is already up to date | | world.country | analyze | status | OK | +---------------+---------+----------+-----------------------------+ 3 rows in set (0.01 sec) |
4.Optimize Table
The OPTIMIZE TABLE statement reorganises the physical storage of table data and associated indexes. It reduces storage space and improves I/O.
OPTIMIZE TABLE is useful when the table is highly fragmented after doing a large number of INSERT, UPDATE and DELETE operations.
The OPTIMIZE TABLE can also be used to release unused disk spaced of an InnoDB table using innodb_file_per_table.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
mysql> help OPTIMIZE TABLE Name: 'OPTIMIZE TABLE' Description: Syntax: OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... OPTIMIZE TABLE reorganizes the physical storage of table data and associated index data, to reduce storage space and improve I/O efficiency when accessing the table. The exact changes made to each table depend on the storage engine used by that table. Use OPTIMIZE TABLE in these cases, depending on the type of table: o After doing substantial insert, update, or delete operations on an InnoDB table that has its own .ibd file because it was created with the innodb_file_per_table option enabled. The table and indexes are reorganized, and disk space can be reclaimed for use by the operating system. o After doing substantial insert, update, or delete operations on columns that are part of a FULLTEXT index in an InnoDB table. Set the configuration option innodb_optimize_fulltext_only=1 first. To keep the index maintenance period to a reasonable time, set the innodb_ft_num_word_optimize option to specify how many words to update in the search index, and run a sequence of OPTIMIZE TABLE statements until the search index is fully updated. o After deleting a large part of a MyISAM or ARCHIVE table, or making many changes to a MyISAM or ARCHIVE table with variable-length rows (tables that have VARCHAR, VARBINARY, BLOB, or TEXT columns). Deleted rows are maintained in a linked list and subsequent INSERT operations reuse old row positions. You can use OPTIMIZE TABLE to reclaim the unused space and to defragment the data file. After extensive changes to a table, this statement may also improve performance of statements that use the table, sometimes significantly. This statement requires SELECT and INSERT privileges for the table. OPTIMIZE TABLE works for InnoDB, MyISAM, and ARCHIVE tables. OPTIMIZE TABLE is also supported for dynamic columns of in-memory NDB tables. It does not work for fixed-width columns of in-memory tables, nor does it work for Disk Data tables. The performance of OPTIMIZE on NDB Cluster tables can be tuned using --ndb_optimization_delay, which controls the length of time to wait between processing batches of rows by OPTIMIZE TABLE. For more information, see http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-limitations-resolv ed.html. For NDB Cluster tables, OPTIMIZE TABLE can be interrupted by (for example) killing the SQL thread performing the OPTIMIZE operation. By default, OPTIMIZE TABLE does not work for tables created using any other storage engine and returns a result indicating this lack of support. You can make OPTIMIZE TABLE work for other storage engines by starting mysqld with the --skip-new option. In this case, OPTIMIZE TABLE is just mapped to ALTER TABLE. This statement does not work with views. OPTIMIZE TABLE is supported for partitioned tables. For information about using this statement with partitioned tables and table partitions, see http://dev.mysql.com/doc/refman/5.6/en/partitioning-maintenance.html. By default, the server writes OPTIMIZE TABLE statements to the binary log so that they replicate to replication slaves. To suppress logging, specify the optional NO_WRITE_TO_BINLOG keyword or its alias LOCAL. In MySQL 5.6.11 only, gtid_next must be set to AUTOMATIC before issuing this statement. (Bug #16062608, Bug #16715809, Bug #69045) URL: http://dev.mysql.com/doc/refman/5.6/en/optimize-table.html |
Optimize the object city.
1 2 3 4 5 6 7 8 |
mysql> optimize table city; +------------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +------------+----------+----------+-------------------------------------------------------------------+ | world.city | optimize | note | Table does not support optimize, doing recreate + analyze instead | | world.city | optimize | status | OK | +------------+----------+----------+-------------------------------------------------------------------+ 2 rows in set (0.10 sec) |
5.mysqlcheck
The mysqlcheck is a command line program used to analyse and repair tables. mysqlcheck connects to a MySQL server and issues theOPTIMIZE TABLE, ANALYSE TABLE, CHECK TABLE and REPAIR TABLE statements.
This is the syntax:
1
2
3
|
mysqlcheck [options] db_name [tbl_name …]
mysqlcheck [options] –databases db_name …
mysqlcheck [options] –all-databases
|
When no table name provided, then mysqlcheck executes for all tables of the database. The benefit of mysqlcheck is that it can operate at database level.
The following command optimises all tables in a database:
1
|
mysqlcheck –u user -p –optimize db_name
|
The following command analyses all tables in a database:
1
|
mysqlcheck –u user -p –analyze db_name
|
The following command checks all tables in a database and repairs them if corrupted. Please note that mysqlcheck can only repair MyISAM, ARCHIVE and CSV tables. It cannot repair InnoDB tables:
1
|
mysqlcheck –u user -p –check –auto-repair db_name
|
Thank you for giving your valuable time to read the above information. Please click here to subscribe for further updates
KTEXPERTS is always active on below social media platforms.
Facebook : https://www.facebook.com/ktexperts/
LinkedIn : https://www.linkedin.com/company/ktexperts/
Twitter : https://twitter.com/ktexpertsadmin
YouTube : https://www.youtube.com/c/ktexperts
Instagram : https://www.instagram.com/knowledgesharingplatform