2. <Insert Picture Here>
MySQL: Crash Course
Keith Larson
keith.larson@oracle.com
MySQL Community Manager
http://sqlhjalp.com/pdf/MySQL_susecon_crashcourse_2012.pdf
4. Who am I and who are you?
Who are you?
– DBAs?
– Developers?
• PHP
• Perl
• Python
• .net
– Admins?
keith.larson@oracle.com
MySQL Community Manager
http://www.sqlhjalp.com/
Started with MySQL during the dot.com days.
Primary real world work was with a MySQL InnoDB replicated chain environment that
easily held over 4 billion rows of user data.
Numerous other sites developed on LAMP stack over the last 13 years.
Copyright Oracle Corporation 2012 4
http://3.bp.blogspot.com/-IXu-9-s-8Fg/TvTs8JbgvdI/AAAAAAAAJpo/at-pjGsDlXg/s1600/Bat%2BStorm%2BTrooper%2BLego.jpg
5. • This is about you and your needs...
• I can also cover..
• Oracle's Investment into MySQL
• A high-level overview
• Familiarize with the key concepts
• MySQL Editions
Session Agenda
Copyright Oracle Corporation 2012 5
Investment Overview Key Concepts Editions
7. mysql> The official way to pronounce
“MySQL” is “My Ess Que Ell”
but we do not mind if you pronounce it as
“my sequel”
It was named after Monty's Daughter Maria.
Pronunciation
Copyright Oracle Corporation 2012 7
9. MySQL On the Cover
http://www.oracle.com/technetwork/issue-archive/2011/11-jan/index-191276.html
Copyright Oracle Corporation 2012 9
10. Built together
Tested together
Managed together
Serviced together
Based on open standards
Lower cost
Lower risk
More reliable
Hardware and Software
Engineered to Work Together
MySQL Completes The Stack
11. Q2 CY2010 Q3 CY2010 Q4 CY2010 Q1 CY2011
• MySQL Workbench 5.2
GA!
• MySQL Database 5.5
• MySQL Enterprise Backup 3.5
• MySQL Enterprise Monitor 2.3
• MySQL Cluster Manager 1.1
All GA!
A Better MySQL
Q2 CY2011
•MySQL Enterprise Monitor 2.2
•MySQL Cluster 7.1
• MySQL Cluster Manager 1.0
All GA!
• MySQL Database
5.6
• MySQL Cluster 7.2
DMR*
and MySQL Labs!
(“early and often”)
*Development Milestone Release
Continuous Innovation with more product
releases than ever before
Copyright Oracle Corporation 2012 11
12. Enterprise 2.0SaaS, Cloud
Web OEM / ISV’s
Telecommunications
Rely on MySQL
Industry Leading Customers
Copyright Oracle Corporation 2012 12
13. >70% of Oracle Shops run MySQL
Copyright Oracle Corporation 2012 13
MySQL: Still Free, Open to the Community
Available to download and use under the GPL:
• MySQL Database (Community Server)
• MySQL Cluster
• MySQL Workbench Community Edition
• MySQL Connectors
• MySQL Proxy
• Documentation (free to use, not covered under GPL)
• Forums
18. Error Log
– log-error
Binary Log
– Log-bin custom set via my.cnf
Slow Query Log
– Log-slow-queries
– Slow-query-time
– log-queries-not-using-indexes
General Log
– Log
http://dev.mysql.com/doc/refman/5.5/en/server-logs.html
MySQL Logs
Copyright Oracle Corporation 2012 18
19. Standalone (mysqld)
UNIX daemon
Windows service
Regular process on UNIX or Windows
Embedded (libmysqld)
Shared / Dynamic library
MySQL Server
Copyright Oracle Corporation 2012 19
21. The Storage Engine (SE) defines data
storage and retrieval
Every regular table belongs to some SE
Most notable Storage Engines:
InnoDB (default since 5.5)
– fully transactional SE
MyISAM (default prior to 5.5)
– NON-transactional SE
MySQL Storage Engines
Copyright Oracle Corporation 2012 21
mysql> SHOW CREATE TABLE City;
CREATE TABLE `City` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` char(35) NOT NULL DEFAULT '',
`CountryCode` char(3) NOT NULL DEFAULT '',
`District` char(20) NOT NULL DEFAULT '',
`Population` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `CountryCode` (`CountryCode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
mysql> SHOW ENGINES;
22. Select a specialized storage engine for a particular application
need.
InnoDB: a high-reliability and high-performance storage engine
for MySQL designed for transaction processing. It follows the
ACID model. Row-level locking and Oracle-style consistent
reads increase multi-user concurrency and performance
MyISAM: -oldest storage engine has many features
that have been developed over years.
Memory: creates tables with contents that are stored in memory.
MySQL Cluster offers the same features as the MEMORY
engine with higher performance levels, and provides
additional features
MySQL Storage Engines
Copyright Oracle Corporation 2012 22
23. CSV: data file is a plain text file
ARCHIVE: is used for storing large amounts of data without
indexes in a very small footprint.
BLACKHOLE:accepts data but throws
it away and does not store it but the
binary log is enabled.
MySQL Storage Engines
Copyright Oracle Corporation 2012 23
24. Open Source
Limitations Relating to Storage Engines
Horizontal partitioning
(distribute rows, not columns)
Partitioning functions:
The modulus
Range
Internal hashing function
Linear hashing function
MySQL Partitioning
http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html
http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html
Copyright Oracle Corporation 2012 24
CREATE TABLE members (
firstname VARCHAR(25) NOT NULL,
lastname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p0 VALUES LESS THAN (1960),
PARTITION p1 VALUES LESS THAN (1970),
PARTITION p2 VALUES LESS THAN (1980),
PARTITION p3 VALUES LESS THAN (1990),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
32.
Online Backup for InnoDB
Support for MyISAM (Read-only)
High Performance Backup & Restore
Compressed Backup
Full Backup
Incremental Backup
Partial Backups
Point in Time Recovery
Unlimited Database Size
Cross-Platform
Windows, Linux, Unix
Ensures quick, online backup and recovery of your MySQL apps.
MySQL Enterprise Backup
Copyright Oracle Corporation 2012 32
33. Usage:
ibbackup [--incremental lsn] [--sleep ms] [--suspend-at-end] [--compress [level]] [--include regexp] my.cnf backup-
my.cnf
or
ibbackup --apply-log [--use-memory mb] [--uncompress] backup-my.cnf
or
ibbackup --apply-log --incremental [--use-memory mb] [--uncompress] incremental-backup-my.cnf full-backup-my.cnf
The backup program does NOT make a backup of the .frm files of the tables,
and it does not make backups of MyISAM tables. To back up these items, either:
- Use the mysqlbackup program.
- Make backups of the .frm files with the Unix 'tar' or the Windows WinZip or an equivalent tool both BEFORE and
AFTER ibbackup finishes its work,and also store the MySQL binlog segment that is generated between the
moment
you copy the .frm files to a backup and the moment ibbackup finishes its work.
For extra safety, also use:
mysqldump -l -d yourdatabasename
to dump the table CREATE statements in a human-readable form before
ibbackup finishes its work.
Copyright Oracle Corporation 2012 33
MySQL Enterprise Backup
35. Highly configurable
Command line options
Configuration files (plain-text, INI-like files with groups)
Several configuration files (/etc, $HOME, …)
The last value takes precedence
Default configuration are examples and might be not so good for
Performance, ...
MySQL Configuration
Copyright Oracle Corporation 2012 35
One example: SQL MODE
Very important variable
Affects data consistency!
It might be remembered …
… or it might be not
Thus: set it once for all
Recommended value:
STRICT_ALL_TABLES |
NO_ZERO_DATE |
NO_ZERO_IN_DATE |
NO_ENGINE_SUBSTITUTION |
NO_AUTO_CREATE_USER |
IGNORE_SPACE |
ERROR_FOR_DIVISION_BY_ZERO
36. Secure the installation
Don’t run under ‘root’
Have separate directories (configuration, data, binary
logs, …)
Change ‘root’ password
Remove default accounts
Post-installation steps: Security
MySQL
Copyright Oracle Corporation 2012 36
37. MySQL products support unicode.
Full Unicode 5.0 is supported for data, and for metadata we
support only characters for Basic Multilingual Plane (BMP).
Database or schema in Oracle world.
Current database (per connection)
Database – a set of files in “the data directory”
System database (mysql)
Virtual databases:
INFORMATION_SCHEMA
PERFORMANCE_SCHEMA
MySQL Concepts
Copyright Oracle Corporation 2012 37
38. User: username@hostname
Precisely: ‘user-name-mask’@’host-name-mask’
Host name – client host name (“from” host name)
User name mask:
can be empty (anonymous user) – all users
Host name mask:
can be empty – all host names (%)
can have ‘%’ (e.g.: %.foo.com)
MySQL Privileges
Copyright Oracle Corporation 2012 38
39. Connecting as foo from localhost…
Should be foo@%, right ?
The most specific values are used
BUT: host name matching is done before user name
mysql -u foo -h localhost -p
‘’@localhost will be chosen !
MySQL Privileges
+-----------+-------------------+
| Host | User |
+-----------+-------------------+
| localhost | |
| localhost | bar |
| % | foo |
| localhost | root |
+-----------+-------------------+
Copyright Oracle Corporation 2012 39
40. $ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using
password: NO)
$ mysql -u root -p
Enter password:
$ mysqladmin -u root -p password <passwordhere>
mysql> UPDATE mysql.user
SET Password=PASSWORD('<passwordhere>')
WHERE User='root';
mysql> FLUSH PRIVILEGES;
Copyright Oracle Corporation 2012 40
MySQL Privileges -- Root
41. Do not know the root password?
Stop the service: # /etc/init.d/mysql stop
Restart with skip grand: # mysqld_safe --skip-grant-tables &
Connect as root: # mysql -u root
Set new password :
use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-
PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
Stop the service: # /etc/init.d/mysql stop
Start the service: # /etc/init.d/mysql start
Log in as root with password. # mysql -u root -p
Copyright Oracle Corporation 2012 41
http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html
MySQL Privileges
42. mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALTER, CREATE VIEW, CREATE, DELETE, DROP,
GRANT OPTION, INDEX, INSERT, SELECT, SHOW VIEW, TRIGGER,
UPDATE ON *.* TO 'monty'@'localhost'
WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALTER, CREATE VIEW, CREATE, DELETE, DROP,
GRANT OPTION, INDEX, INSERT, SELECT, SHOW VIEW, TRIGGER,
UPDATE ON *.* TO 'monty'@'%'
mysql> flush privileges ;
Copyright Oracle Corporation 2012 42
MySQL Privileges -- users
http://dev.mysql.com/doc/refman/5.6/en/grant.html
44. SHOW CREATE TABLE tbl_name
SHOW CREATE PROCEDURE proc_name
SHOW CREATE TRIGGER trigger_name
SHOW CREATE VIEW view_name
SHOW PROCEDURE CODE proc_name
SHOW PROCEDURE STATUS [like_or_where]
SHOW [FULL] PROCESSLIST
SHOW GRANTS [FOR user]
SHOW WARNINGS [LIMIT [offset,] row_count]
SHOW {DATABASES | SCHEMAS} [LIKE 'pattern' | WHERE expr]
SHOW OPEN TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
SHOW BINARY LOGS
SHOW MASTER LOGS
MySQL Show Commands
Copyright Oracle Corporation 2012 44
http://dev.mysql.com/doc/refman/5.6/en/show.html
45. Use SHOW processlist to find out what is going on:
+----+-------+-----------+----+---------+------+--------------+-------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------+-----------+----+---------+------+--------------+-------------------------------------+
| 6 | monty | localhost | bp | Query | 15 | Sending data | select * from station,station as s1 |
| 8 | monty | localhost | | Query | 0 | | show processlist |
+----+-------+-----------+----+---------+------+--------------+-------------------------------------+
Use KILL in mysql or mysqladmin to kill off runaway threads.
How to find out how MySQL solves a query
Run the following commands and try to understand the output:
* SHOW VARIABLES;
* SHOW COLUMNS FROM ...G
* EXPLAIN SELECT ...G
* FLUSH STATUS;
* SELECT ...;
* SHOW STATUS;
MySQL Show Processlist
Copyright Oracle Corporation 2012 45
46. A few ways to see what databases you have on your system:
– cd /var/lib/mysql
• Review the directories
– Log in to MySQL server
• Show databases
– mysql -u root -p
» Enter password:
– show databases;
– +--------------------+
– | Database |
– +--------------------+
– | information_schema |
– | db_example |
– | employees |
– | exampledb |
– | mysql |
– | orig |
– | performance_schema |
– +--------------------+
MySQL Databases/Schema
Copyright Oracle Corporation 2012 46
47. mysql> use world; ---- DATABASE / SCHEMA
mysql> show tables; ---- TABLE SPACE
+-----------------+
| Tables_in_world |
+-----------------+
| City |
| Country |
| CountryLanguage |
+-----------------+
3 rows in set (0.00 sec)
MySQL Table Space
Copyright Oracle Corporation 2012 47
48. mysql> show create table City;
CREATE TABLE `City` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` char(35) NOT NULL DEFAULT '',
`CountryCode` char(3) NOT NULL DEFAULT '',
`District` char(20) NOT NULL DEFAULT '',
`Population` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `CountryCode` (`CountryCode`),
CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES
`Country` (`Code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
Copyright Oracle Corporation 2012 48
MySQL Table Space
49. mysql > desc City;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| CountryCode | char(3) | NO | MUL | | |
| District | char(20) | NO | | | |
| Population | int(11) | NO | | 0 | |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.06 sec)
Copyright Oracle Corporation 2012 49
MySQL Table Space
50. TEXT TYPES
CHAR( )A fixed section from 0 to 255 characters long.
VARCHAR( ) A variable section from 0 to 255 characters long.
TINYTEXT A string with a maximum length of 255 characters.
TEXT A string with a maximum length of 65535 characters.
BLOB A string with a maximum length of 65535 characters.
MEDIUMTEXT A string with a maximum length of 16777215 characters.
MEDIUMBLOB A string with a maximum length of 16777215 characters.
LONGTEXT A string with a maximum length of 4294967295 characters.
LONGBLOB A string with a maximum length of 4294967295 characters.
CREATE TABLE `example_table` (
...
`value` varchar(100) DEFAULT NULL,
...
MySQL Datatypes
Copyright Oracle Corporation 2012 50
http://dev.mysql.com/doc/refman/5.5/en/data-types.html
51. NUMBER TYPES
TINYINT( ) -128 to 127 normal 0 to 255 UNSIGNED.
SMALLINT( ) -32768 to 32767 normal 0 to 65535 UNSIGNED.
MEDIUMINT( ) -8388608 to 8388607 normal 0 to 16777215 UNSIGNED.
INT( ) -2147483648 to 2147483647 normal 0 to 4294967295 UNSIGNED.
BIGINT( )-9223372036854775808 to 9223372036854775807 normal
0 to 18446744073709551615 UNSIGNED.
FLOAT A small number with a floating decimal point.
DOUBLE( , ) A large number with a floating decimal point.
DECIMAL( , ) A DOUBLE stored as a string , allowing for a fixed decimal point.
Create Table: CREATE TABLE `example_table` (
`example_table_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
.....or
`example_table_id` bigint(12) unsigned NOT NULL auto_increment
Copyright Oracle Corporation 2012 51
http://dev.mysql.com/doc/refman/5.5/en/data-types.html
MySQL Datatypes
53. MISC TYPES
ENUM ( ) Short for ENUMERATION which means that each column may
have one of a specified possible values.
SET Similar to ENUM except each column may have more than one of the
specified possible values.
…..
`transfer_method` enum('OFF','EMAIL','FTP','BATCH POST','FTP-SSL','REAL
TIME POST','CUSTOM') default NULL,
….
Copyright Oracle Corporation 2012 53
http://dev.mysql.com/doc/refman/5.5/en/data-types.html
MySQL Datatypes
54. URLS to help for later:
http://dev.mysql.com/doc/refman/5.6/en/mysql-indexes.html
http://dev.mysql.com/doc/refman/5.6/en/show-index.html
http://dev.mysql.com/doc/refman/5.6/en/create-index.html
http://learnmysql.blogspot.com/2010/11/mysql-query-and-index-tuning.html
http://www.slideshare.net/manikandakumar/mysql-query-and-index-tuning
http://www.slideshare.net/osscube/indexing-the-mysql-index-key-to-performance-tuning
http://effectivemysql.com/downloads/ImprovingPerformanceWithBetterIndexes-OOW-2011.pdf
http://prajwal-tuladhar.net.np/2009/09/23/474/things-you-should-know-about-mysql-index/
http://dev.mysql.com/doc/refman/5.5/en/innodb-monitors.html
http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html
http://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html
http://www.mysqlperformanceblog.com/2006/07/17/show-innodb-status-walk-through/
http://dev.mysql.com/doc/refman/5.5/en/server-parameters.html
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_key_buffer_size
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_table_open_cache
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/
MySQL Indexes
http://prajwal-tuladhar.net.np/2009/09/23/474/things-you-should-know-about-mysql-index/
Copyright Oracle Corporation 2012 54
55. When MySQL doesn't use an index
* Indexes are NOT used if MySQL can calculate that it will probably be faster to
scan the whole table.
For example if key_part1 is evenly distributed between 1 and 100, it's not good to use
an index in the following query:
o SELECT * FROM table_name where key_part1 > 1 and key_part1 < 90
* If you are using HEAP tables and you don't search on all key parts with =
* When you use ORDER BY on a HEAP table
* If you are not using the first key part
o SELECT * FROM table_name WHERE key_part2=1
* If you are using LIKE that starts with a wildcard
o SELECT * FROM table_name WHERE key_part1 LIKE '%jani%'
* When you search on one index and do an ORDER BY on another
o SELECT * from table_name WHERE key_part1 = # ORDER BY key2
Copyright Oracle Corporation 2012 55
MySQL Indexes (keys)
56. MySQL Index options
MySQL startup options
When tuning a MySQL server, the two most important variables to configure
are key_buffer_size and table_open_cache.
The buffer pool is for caching data and indexes in memory so set the
following to < 80% of the machine physical memory.
Important options are:
innodb_buffer_pool_size < 80% of memory. # default value is 8M
innodb_log_file_size=2G. #dependent on recovery speed required.
innodb_log_buffer_size=4M
innodb_thread_concurrency=8 # Default
innodb_flush_method=O_DIRECT # double buffering and swap are bad
# innodb_file_per_table #depends on how many tables used. Get the big picture 1st
.
Copyright Oracle Corporation 2012 56
57. MySQL Indexes (keys)
When MySQL uses indexes
Using >, >=, =, <, <=, IF NULL and BETWEEN on a key.
o SELECT * FROM table_name WHERE key_part1=1 and key_part2 > 5;
o SELECT * FROM table_name WHERE key_part1 IS NULL;
* When you use a LIKE that doesn't start with a wildcard.
o SELECT * FROM table_name WHERE key_part1 LIKE 'jani%'
* Retrieving rows from other tables when performing joins.
o SELECT * from t1,t2 where t1.col=t2.key_part
* Find the MAX() or MIN() value for a specific index.
o SELECT MIN(key_part2),MAX(key_part2) FROM table_name where
key_part1=10
* ORDER BY or GROUP BY on a prefix of a key.
o SELECT * FROM foo ORDER BY key_part1,key_part2,key_part3
* When all columns used in the query are part of one key.
o SELECT key_part3 FROM table_name WHERE key_part1=1
Copyright Oracle Corporation 2012 57
58. Optimizing tables
Use NOT NULL for columns which will not store null values. This is particularly
important for columns which you index.
`e_id` bigint(12) unsigned NOT NULL
Don't create indexes you are not going to use.
Use the fact that MySQL can search on a prefix of an index; If you have and INDEX
(a,b), you don't need an index on (a).
UNIQUE KEY `uq_id` (`u_id`,`q_id`),
KEY `q_id` (`q_id`),
Instead of creating an index on long CHAR/VARCHAR column, index just a prefix of
the column to save space.
CREATE TABLE `table_name` (
`hostname` char(255) NOT NULL,
KEY `hostname` (`hostname`(10))
) ENGINE=InnoDB
Copyright Oracle Corporation 2012 58
MySQL Indexes (keys)
59. Use EXPLAIN on every query that you think is too slow!
mysql> explain select t3.DateOfAction, t1.TransactionID
-> from t1 join t2 join t3
-> where t2.ID = t1.TransactionID and t3.ID = t2.GroupID
-> order by t3.DateOfAction, t1.TransactionID;
+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+
| t1 | ALL | NULL | NULL | NULL | NULL | 11 | Using temporary; Using filesort |
| t2 | ref | ID | ID | 4 | t1.TransactionID | 13 | |
| t3 | eq_ref | PRIMARY | PRIMARY | 4 | t2.GroupID | 1 | |
+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+
Types ALL and range signal a potential problem.
MySQL Index – Use Explain!
Copyright Oracle Corporation 2012 59
60. mysql> EXPLAIN SELECT C.Name , T.Name FROM world.City C INNER JOIN
world.Country T ON C.CountryCode = T.Code;
+----+-------------+-------+------+---------------+-------------+---------+--------------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+-------------+---------+--------------+------+-------+
| 1 | SIMPLE | T | ALL | PRIMARY | NULL | NULL | NULL | 264 |
|
| 1 | SIMPLE | C | ref | CountryCode | CountryCode | 3 | world.T.Code | 8 |
|
+----+-------------+-------+------+---------------+-------------+---------+--------------+------+-------+
MySQL Index – Use Explain!
Copyright Oracle Corporation 2012 60
61. More Urls for you to use later about Explain
http://dev.mysql.com/doc/refman/5.5/en/explain.html
http://effectivemysql.com/downloads/ExplainingTheMySQLEXPLAIN-OOW-2011.pdf
http://prajwal-tuladhar.net.np/2009/09/26/481/know-more-about-mysql-explain/
http://www.slideshare.net/ligaya/explain
MySQL Index – Use Explain!
Copyright Oracle Corporation 2012 61
62. The CREATE ROUTINE , ALTER ROUTINE , EXECUTE privilege is needed for stored
routines.
mysql> delimiter //
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END//
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @a;
+------+
| @a |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
MySQL Stored Routines
Copyright Oracle Corporation 2012 62
http://dev.mysql.com/doc/refman/5.5/en/stored-routines.html
63. CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);
delimiter |
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END; |
delimiter ;
MySQL Triggers
Copyright Oracle Corporation 2012 63
http://dev.mysql.com/doc/refman/5.5/en/create-trigger.html
64. > CREATE VIEW `world`.`city_view` AS
SELECT C.Name as cityname , T.Name as countryname
FROM world.City C
INNER JOIN world.Country T ON C.CountryCode = T.Code;
Query OK, 0 rows affected (0.16 sec)
SELECT cityname , countryname from city_view where countryname = "Zimbabwe";
+--------------+-------------+
| cityname | countryname |
+--------------+-------------+
| Harare | Zimbabwe |
| Bulawayo | Zimbabwe |
| Chitungwiza | Zimbabwe |
| Mount Darwin | Zimbabwe |
| Mutare | Zimbabwe |
| Gweru | Zimbabwe |
+--------------+-------------+
6 rows in set (0.13 sec)
MySQL Views
Copyright Oracle Corporation 2012 64
http://dev.mysql.com/doc/refman/5.5/en/views.html
65. To disable autocommit mode, use the following statement:
mysql> show variables like '%autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
mysql> SET autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.01 sec)
MySQL Transactions
Copyright Oracle Corporation 2012 65
http://dev.mysql.com/doc/refman/5.5/en/commit.html
66. To disable autocommit mode for a single series of statements
use the START TRANSACTION statement:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
MySQL Transactions
Copyright Oracle Corporation 2012 66
http://dev.mysql.com/doc/refman/5.5/en/commit.html
68. MySQL Workbench
Copyright Oracle Corporation 2012 68
http://sqlhjalp.blogspot.com/2012/08/workbench-database-migration-wizard.html
69. Workbench – visual database design application that can be used to efficiently design,
manage and document database schemata
Connectors – ODBC, Java, .Net, MXJ, C/C++, DBI, Ruby, Python, etc.
Community: -- http://dev.mysql.com/downloads/
Freely downloadable version of the world's most popular open source database.
It is available under the GPL license and is supported by a huge and active
community of open source developers.
Enterprise: -- eDelivery.com (Free for 30 days)
Paid subscription includes support and the following
• MySQL Enterprise Backup
• MySQL Enterprise Security
– External Authentication
• MySQL Enterprise Scalability
– Thread Pool
• MySQL Enterprise High Availability
– Oracle VM Template
– Windows Clustering
• MySQL Enterprise Monitor
Free for 30 day evaluation
MySQL Versions
Copyright Oracle Corporation 2012 69
70. Choosing the version
5.1 – previous GA version
5.5 – the latest GA version
5.6 – development release
Choosing the edition
Community Edition (Community Server)
Enterprise Editions (even MySQL Classic and MySQL
Standard)
Source or Binary
Download
MySQL
72. • 24 X 7 Problem Resolution
Services
• Unlimited Support Incidents
• Knowledge Base
• Maintenance Releases, Bug
fixes, Patches, Updates
• MySQL Consultative Support
• Staffed by experienced,
seasoned MySQL Engineers
Oracle Premier Support for MySQL
MySQL Support
73. Most secure, scalable MySQL Database, Online Backup,
Development/Monitoring Tools, backed by Oracle Premier
Lifetime Support
Oracle Premier
Support
Oracle Product
Certifications/Integrations
MySQL Enterprise
High Availability
MySQL Enterprise
Security
MySQL Enterprise
Scalability
MySQL Enterprise
Backup
MySQL Enterprise
Monitor/Query Analyzer
MySQL Workbench
MySQL Enterprise Edition
Copyright Oracle Corporation 2012 73
74. mysql.com
TCO calculator: http://www.mysql.com/tcosavings/
White Papers: http://www.mysql.com/why-mysql/white-papers/
Customer use cases and success stories:
http://www.mysql.com/why-mysql/case-studies/
dev.mysql.com
Downloads: http://dev.mysql.com/downloads/
Documentation: http://dev.mysql.com/doc/
Forums: http://forums.mysql.com/
PlanetMySQL: http://planet.mysql.com
List of resources (books) : http://dev.mysql.com/resources/
MySQL Resources
http://1.bp.blogspot.com/-FjX1nJexGeI/T7luugwIslI/AAAAAAAAAWU/PtCMZBfm1OA/s1600/internet.jpg
75. eDelivery.com
Download and evaluate all MySQL products
Wiki:
https://wikis.oracle.com/display/mysql/Home
http://forge.mysql.com/wiki/Main_Page – Older Not used as much--
50 things to know before migrating Oracle to MySQL
It is a little old but worth the read
www.xaprb.com/blog/2009/03/13/50-things-to-know-before-migrating-oracle-to-mysql/
MySQL Resources
Copyright Oracle Corporation 2012 75
http://1.bp.blogspot.com/-FjX1nJexGeI/T7luugwIslI/AAAAAAAAAWU/PtCMZBfm1OA/s1600/internet.jpg
76. Copyright Oracle Corporation 2012 76
keith.larson@oracle.com
@larsonkeith
“When I left you, I was but the learner, now I am the master.”
http://www.flickr.com/photos/kalexanderson/7964300088/sizes/l/in/photostream/
77. <Insert Picture Here>
Thanks for attending!
Keith Larson
keith.larson@oracle.com
MySQL Community Manager
http://sqlhjalp.com/pdf/MySQL_susecon_crashcourse_2012.pdf