Professional Documents
Culture Documents
MariaDB Training
Introduction
MariaDB for DBAs
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Introducing MariaDB Ab
Founders from MySQL the
Company and Community
Funded by Founders, Employees,
and Venture Capital
Over 100 Employees
Several former MySQL Employees
and Community Members in
over 14 Countries
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
MariaDB Terrain
application
(e.g., php)
Archive
web tcp/ip
user
Clients
Thread Cache
Storage
Aria
Engines
Query Cache
InnoDB
Memory
SQL Parser
Optimizer
Archive
Optimizer
Storage
Engines
Optimizer
thread_handling = pool-of-threads
thread_pool_size = 3
Excerpt from /etc/my.cnf.d/server.cnf Storage
Engines
Optimizer
Storage
Engines
BY Engines
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Installation Methods & Packages
Installation Tools (MariaDB, Oracle, Percona)
Built and Tested by Experts
Installer (e.g., yum)
Use Up-to-Date Versions
Distribution Packages (rpm, deb, pkg, dmg)
Easy and Quick to Install
Need to Configure Manually
May be Old Versions
Build from Source — Useful for Custom Patches
Required for Non-Standard Platforms
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
mysql Client — Command Line Tool (CLI)
Shell or ssh
Execute Manually any SQL statement
Display mysqld settings and status counters
Use as Interactive Session, or Pipe SQL via Shell
mysqladmin processlist
mysqladmin -u root -p create employees
mysqladmin extended-status
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Configuration File Locations
Linux Systems Windows
/etc/my.cnf c:\Windows\my.ini
/etc/my.cnf.d/*.cnf c:\my.ini
--defaults-extra-file %PROGRAMDATA%\MySQL\MySQL Server
~/.my.cnf (clients) x.x\my.cnf
%WINDIR%\my.cnf
INSTALLDIR\my.cnf
--defaults-extra-file
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
!includedir /etc/my.cnf.d
SET GLOBAL
tmp_table_size = 32*1024*1024;
Requires SUPER privilege for mysql.plugin table
+----------------------+--------+ +----------------------+-------+
| Variable_name | Value | | Variable_name | Value |
+----------------------+--------+ +----------------------+-------+
| character_set_client | latin1 | | character_set_client | greek |
+----------------------+--------+ +----------------------+-------+
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Global Memory
Global Memory Buffers are Allocated once when mysqld Starts
table_open_cache
table_definition_cache
query_cache_size
thread_cache
Permissions Tables
Global Memory Buffers are also Allocated for Storage Engines
MyISAM: key_buffer_size
InnoDB: innodb_buffer_pool_size,
innodb_additional_mem_pool_size,
innodb_log_buffer_size
Chances of All Clients Allocating All Possible Basic Formula for Estimating Memory Usage
DRBD
Slower Writes
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Storage Engine Basics
Multiple Storage Engines Allowed SHOW ENGINES;
Read Uncommitted
Read Committed
Repeatable Read
(no fantom rows)
Serializable
Additional
Disk
Memory Pool
3 CHECKPOINT
Redo Log (File 1/2)
Buffer Pool *
root
B-Tree
node node
root
B-Tree
node node
Poor Crash
Not Recovery
High Read,
Many Column Transactional
Low Write (Relies on OS to
Data Types Flush Data to
Traffic Disk)
Columnar Architecture
No Indexes
Each Column is Stored Separately
WHERE Clauses Parsed Differently
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Creating Databases & Tables
Creating Databases is Simple CREATE DATABASE db1;
Dynamic
Fixed and Variable Length Data Types
More Data File Fragmentation
More Efficient Disk Space Usage VARCHAR, TEXT, etc.
Compressed
Decompressed as Needed
Minimal Disk Space Usage
Read-Only
SELECT MAX(auto_inc_field)
FROM table;
1970-01-01
Many Apps Store UNIX_TIMESTAMP() values in unsigned integer SELECT CURTIME(4);
field +---------------+
| CURTIME(4) |
YEAR — Accepts YY or YYYY +---------------+
| 05:33:09.1061 |
+---------------+
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Purpose of Views
Adapt and Standardize Table Schema for Applications
or Across Application Upgrades
Restricting Visible Table Data to Specific Users and
Applications
Useful to Simplify, Split, or Factor Complex Reporting
Queries
TEMPTABLE
View Data put in Temporary Table, then Query Executed
Possibly Slower since No Index for Temporary Table
MERGE
Query and Original View SELECT are Merged
Possibly Faster since Underlying Table Index Used
UNDEFINED
The Optimizer choose what’s Best (Default)
Documentation on View Algorithms: https://mariadb.com/kb/en/mariadb/view-algorithms/
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Value of Partitions
For Tables Larger than Memory
Easier Maintenance with a Single Partitioned Table *
Bulk Management of Data — Archiving * Files Generated for a MyISAM Table with Four Partitions
Partitions
(109, 'Bill Johnson', '2016-02-24'),
(110, 'Susan Hill, '2016-03-15'), Partition p3
ALTER TABLE employees (111, 'Rob Kane, '2016-08-03')
COALESCE PARTITION 3;
elderly#p1 elderly#p3
Partitions and Sub-Partitions may use
different Methods middle_age#p0 middle_age#p2
SELECT COUNT(*)
FROM employees
PARTITION(employees_west);
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Security — a Multi-Layered Challenge
Clients
Server
Data
mysqld Storage
Port 3306
Other
Processes
REVOKE DELETE,UPDATE
ON db1.table1
FROM 'bob'@'localhost';
[mysqld]
plugin-load=authentication_pam.so
Excerpt from my.cnf or my.ini configuration file
+------------------------------------------------------+
| Grants for admin_remote |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin_remote' |
| GRANT INSERT, UPDATE ON `admin`.* TO 'admin_remote' |
+------------------------------------------------------+
Granted +-----------+---------+--------------+--------------+
| Host | User | Role | Admin_option |
+-----------+---------+--------------+--------------+
| localhost | ted | admin_remote | N |
REVOKE 'admin_remote'
FROM 'bob'@localhost;
Executed while Logged in as an Administrator
DROP ROLE
'sales_staff';
Executed while Logged in as an Administrator
SELECT User
FROM mysql.user
WHERE is_role='Y';
Executed while Logged in as an Administrator
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
MariaDB Logs
Error Log Error Log
Binary Log
Binary Log
Some Unix systems Redirect to System Log
Windows uses host_name.err in datadir,
or System Event Log
[mysqld]
log-error = /path/file_name
log-warnings = 1
mysqld
Potential Problems with Log SQL Error Log
Log
[mysqld]
slow_query_log = ON
slow_query_log_file = /path/file
long_query_time = 0.5
log_queries_not_using_indexes
log_slow_admin_statements
Relevant Entries from my.cnf or my.ini configuration file
Security
Set Expiration or Purge
Occasionally
[mysqld]
log-bin
expire_logs_days = 7
Excerpt from my.cnf or my.ini configuration file
Documentation on Binary Log: https://mariadb.com/kb/en/binary-log/
Back-Ups
Include Logs in Back-ups
Synchronize Binary Logs with Back-ups
Error Log
Stop mysqld, Move the Log, then Restart mysqld
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Command-Line Monitoring Tools
mytop mytop -u user -p password
A Clone of top for Monitoring
MariaDB Threads
Works any Shell, SSH, or Shell
Script
innotop
Tool for Monitoring MariaDB
Threads
Includes InnoDB Specific
Information
Site for mytop: http://jeremy.zawodny.com/mysql/mytop/
Site for innotop: https://code.google.com/p/innotop/
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Backup Principles
High Availability Can’t Prevent User Errors
Copy Data, Logs, and Configuration Files
Daily Snapshots (mysqldump, InnoDB Hot Backup, LVM) and
Real-Time Backups (Replication)
Store Backups in Multiple Locations - Onsite for fast access;
Offsite for security
Synchronize Binary Logs with Backup Files
Back-Up Methods
Physical Back-Up
Logical Back-Up
Binary Back-Up
Test Backup and Recovery
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Method and Value of Stored Routines
Procedures and Functions are Supported
Database Level Functions — Isolating Certain Functionality
Databases Used as Namespaces (e.g., CALL
db_name.my_proc())
Routines are Dropped with Database
Library of Common Functions to make Complex Logic
Accessible
CALL my.show_users;
Stored Procures: https://mariadb.com/kb/v/stored-procedure-overview/
User Defined Functions: https://mariadb.com/kb/v/user-defined-functions/
DECLARE condition_name
CONDITION FOR condition_value
DECLARE handler_type
HANDLER FOR condition_value
statement
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Purpose of MariaDB Replication
Load Balancing (Scaling SELECT Queries)
Move Slow, Heavy Queries to Slave
Take Slave Off-Line to Make Back-ups
Multiple Data Centers Need Fast Reads
Gain Redundancy (High Availability)
Fail Over - Promote Quickly a Slave to Master
Fail Over Isn’t Automatic — Requires External
Monitoring
Minimal Downtime for Upgrades or Schema Changes
Apply Changes to a Slave
Promote Slave to Master and Redirect Traffic
Apply Changes to Master and Switch
SQL Thread
Master Data
mysqld Storage
IO Thread
Data
mysqld Storage
IO Thread
Relay
Log
INSERT
UPDATE
DELETE Binary
Log
Dump Thread
Slave 2/Master 2
Data Slave 2A
Client Threads mysqld Storage
IO Thread
Slave 2B
CREATE Binary
ALTER Relay Log
DROP Log
Slave 2C
on Slave
Slave_IO_State:
Waiting for master to send
event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_Errno: 0
Last_Error:
Seconds_Behind_Master: 300
Documentation on SHOW MASTER STATUS: https://mariadb.com/kb/en/show-master-status/
Documentation on SHOW SLAVE STATUS: https://mariadb.com/kb/en/mariadb/show-slave-status/
52.89.128.176 196803
maria_replicator mariadb-bin.000040
rover123 196513
3306 30217
60 9
0 ...
...
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
High Availability Goals and Concepts
Never Lose Data because of a Crash — Users Should
Never Notice
Availability = Mean Time Before Failure / (Mean Time Before Failure + Mean Time To Recovery)
Routing Platform
Insulates Client Applications from
Complexities of Backend Database
Cluster MaxScale
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
Optimization Concepts & Considerations
Performance Optimizing relates to
Resolving Bottlenecks to Handle
More Traffic or Data at a Time
Efficiency Optimizing has to do with
the Best Use of Hardware,
Bandwidth, and Budget
Consider Carefully Schema and Indexes
Don’t Spend too much Time on
Optimizing without Data — Need Real
Data and Traffic to Optimize Effectively
table The table in use (each table in a JOIN will use one row)
Use SHOW CREATE TABLE to see a Table's SHOW CREATE TABLE clients \G
*************************** 1. row ***********************
Indexes Table: clients
Create Table: CREATE TABLE 'clients' (
'client_id' int(11) NOT NULL AUTO_INCREMENT,
'name_first' varchar(255) DEFAULT NULL,
'name_last' varchar(255) DEFAULT NULL,
PRIMARY KEY ('client_id'),
KEY 'client_names'
('name_last'(10),'name_first'(5)))
ENGINE=InnoDB DEFAULT CHARSET=latin1
Documentation on CREATE INDEX: https://mariadb.com/kb/en/mariadb/create-index/
Introduction Client Utilities Storage Engines Partitioning Monitoring & Troubleshooting MariaDB Replication
Architecture Configuration Table Schema User & Server Security Back-Ups & Restoration High Availability
Installation
Resource Usage
Views
Log Files
Customizing
Optimization
On-Line Resources
Documentation
Knowledge Base
Open-Source Community
Post Questions on Forums
Ask Questions on IRC — FreeNode