MySQL — Commands & Recipes
Connection & Basics
# Connect
mysql -h localhost -u root -p
# Create database
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# Import
mysql -u root -p mydb < dump.sql
# Dump
mysqldump -u root -p --single-transaction mydb > backup.sql
Essential Queries
-- Database sizes
SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables GROUP BY table_schema ORDER BY 2 DESC;
-- Active connections
SHOW PROCESSLIST;
-- Kill long query
KILL <process_id>;
-- InnoDB status
SHOW ENGINE INNODB STATUS\G
-- Index usage
SELECT * FROM sys.schema_unused_indexes;
SELECT * FROM sys.schema_redundant_indexes;
# my.cnf essentials
[mysqld]
innodb_buffer_pool_size = 4G # 70-80% of RAM
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 1 # ACID compliance
innodb_flush_method = O_DIRECT
max_connections = 200
Group Replication Setup
-- On each node
SET SQL_LOG_BIN=0;
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='password'
FOR CHANNEL 'group_replication_recovery';
-- Bootstrap first node
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
-- Join other nodes
START GROUP_REPLICATION;
Sources