MySQL for Sysadmins 
Binlogic Conference 2012
BEGIN 
• Scope 
• Things you need to know 
• Before install 
• After install 
• Online processes 
• Application kit
Scope 
• Sysadmins 
• Database Administrators 
• Dev Ops 
• Operation Team 
• Everyone that use MySQL
Things you need to know 
• Use 64bits! 
• Use kernel and software updated 
• MySQL loves RAM 
• MyISAM, InnoDB and many others 
• Storage Engines are for tables not for DB 
• Use partitions when is possible 
• Optimize your SQL code
Before install 
• Operating System
Before install 
• HDD / SSD / RAM storage
Before install 
• Filesystems 
 EXT3 
 EXT4 
 XFS 
• RAID 
RAID 0 
RAID 1 
RAID 5 
RAID 6 
RAID 10
Benchmark EXT4 vs XFS
Benchmark EXT4 vs XFS
Benchmark EXT4 vs XFS
Benchmark EXT4 vs XFS
Benchmark EXT4 vs XFS
Before install 
• Disk Partitions 
• / 
• /tmp 
• /home 
• innodb data / logs 
• binary logs / relay logs 
• datadir 
• tmpdir
Before install 
• MySQL version / branch 
• MySQL 
• MariaDB 
• Percona 
• Custom branches 
» Twitter 
» Facebook 
» Drizzle
After install 
• Change MySQL defaults [ my.cnf ] 
» bind-address 
» skip-name-resolve 
» Run: mysql_secure_install 
» Check users privileges
After install 
• MyISAM performance 
– Read 
» key_buffer 
» sort_buffer 
» read_buffer_size
After install 
• InnoDB performance 
– Read 
» innodb_buffer_pool_size 
» query_cache_size 
» query_cache_type 
– Write 
Reference: http://goo.gl/W6svD 
» innodb_flush_method 
» innodb_flush_log_at_trx_commit
InnoBD performance
InnoBD performance
InnoBD performance
InnoBD performance
After install 
• Checks your logs 
» general_log_file 
» general_log 
» log_slow_queries 
» long_query_time 
» log-queries-not-using-indexes
After install 
• Binary logs / Relay logs 
» server-id 
» log_bin 
» expire_logs_days 
» max_binlog_size 
» replicate_do_db 
» relay_log 
» relay_log_index 
» relay-log-space-limit 
» max-relay-log-size
After install 
• Separated partitions for logs and data 
» datadir 
» innodb_file_per_table 
» innodb_data_home_dir 
» innodb_log_group_home_dir 
» innodb_log_file_size 
» innodb_log_files_in_group
After install 
• Double check your DDL scripts 
• Keep monitoring your DML scripts 
• Secure your server with DCL scripts
Online processes 
• ALTER TABLE without Downtime 
• How long? Could we test it before? 
• Backup 
» INTO OUTFILE / mysqldump –T 
» Copy Binary logs 
• Restore 
» LOAD DATA INFILE / mysqlimport 
» mysqlbinlog | mysql
Dumping faster 
time mysqlimport sakila /tmp/sakila-dump/*.txt 
real 0m0.188s 
user 0m0.004s 
sys 0m0.004s
Dumping faster 
time mysql < sakila-data.sql 
real 0m1.196s 
user 0m0.056s 
sys 0m0.008s
Application Kit 
• Percona Toolkit 
» pt-heartbeat 
» pt-online-schema-change 
» pt-slave-delay 
• Scripts en GitHub? 
• Benchmarks 
» sysbench 
» scripts
COMMIT 
• Pay attention before and after install your server 
• Check your SQL code before you start hate MySQL 
• Run backups and test it! Take time for that.. 
• Make your own scripts 
• Keep using MySQL =)
COMMIT 
• Read 
» Blog de percona performance blog (EN) 
» http://www.ilsistemista.net/ (EN) 
» Binlogic Blog 
» Kibibyte.net Blog ( 09/2012 )
Questions? 
@jtomaszon 
tomas@kibibyte.net 
www.kibibyte.net 
Contact me

MySQL & noSQL Conference: MySQL for Sysadmins

  • 1.
    MySQL for Sysadmins Binlogic Conference 2012
  • 2.
    BEGIN • Scope • Things you need to know • Before install • After install • Online processes • Application kit
  • 3.
    Scope • Sysadmins • Database Administrators • Dev Ops • Operation Team • Everyone that use MySQL
  • 4.
    Things you needto know • Use 64bits! • Use kernel and software updated • MySQL loves RAM • MyISAM, InnoDB and many others • Storage Engines are for tables not for DB • Use partitions when is possible • Optimize your SQL code
  • 5.
    Before install •Operating System
  • 6.
    Before install •HDD / SSD / RAM storage
  • 7.
    Before install •Filesystems  EXT3  EXT4  XFS • RAID RAID 0 RAID 1 RAID 5 RAID 6 RAID 10
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
    Before install •Disk Partitions • / • /tmp • /home • innodb data / logs • binary logs / relay logs • datadir • tmpdir
  • 14.
    Before install •MySQL version / branch • MySQL • MariaDB • Percona • Custom branches » Twitter » Facebook » Drizzle
  • 15.
    After install •Change MySQL defaults [ my.cnf ] » bind-address » skip-name-resolve » Run: mysql_secure_install » Check users privileges
  • 16.
    After install •MyISAM performance – Read » key_buffer » sort_buffer » read_buffer_size
  • 17.
    After install •InnoDB performance – Read » innodb_buffer_pool_size » query_cache_size » query_cache_type – Write Reference: http://goo.gl/W6svD » innodb_flush_method » innodb_flush_log_at_trx_commit
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
    After install •Checks your logs » general_log_file » general_log » log_slow_queries » long_query_time » log-queries-not-using-indexes
  • 23.
    After install •Binary logs / Relay logs » server-id » log_bin » expire_logs_days » max_binlog_size » replicate_do_db » relay_log » relay_log_index » relay-log-space-limit » max-relay-log-size
  • 24.
    After install •Separated partitions for logs and data » datadir » innodb_file_per_table » innodb_data_home_dir » innodb_log_group_home_dir » innodb_log_file_size » innodb_log_files_in_group
  • 25.
    After install •Double check your DDL scripts • Keep monitoring your DML scripts • Secure your server with DCL scripts
  • 26.
    Online processes •ALTER TABLE without Downtime • How long? Could we test it before? • Backup » INTO OUTFILE / mysqldump –T » Copy Binary logs • Restore » LOAD DATA INFILE / mysqlimport » mysqlbinlog | mysql
  • 27.
    Dumping faster timemysqlimport sakila /tmp/sakila-dump/*.txt real 0m0.188s user 0m0.004s sys 0m0.004s
  • 28.
    Dumping faster timemysql < sakila-data.sql real 0m1.196s user 0m0.056s sys 0m0.008s
  • 29.
    Application Kit •Percona Toolkit » pt-heartbeat » pt-online-schema-change » pt-slave-delay • Scripts en GitHub? • Benchmarks » sysbench » scripts
  • 30.
    COMMIT • Payattention before and after install your server • Check your SQL code before you start hate MySQL • Run backups and test it! Take time for that.. • Make your own scripts • Keep using MySQL =)
  • 31.
    COMMIT • Read » Blog de percona performance blog (EN) » http://www.ilsistemista.net/ (EN) » Binlogic Blog » Kibibyte.net Blog ( 09/2012 )
  • 32.
    Questions? @jtomaszon tomas@kibibyte.net www.kibibyte.net Contact me

Editor's Notes

  • #3 La agenda de la charla
  • #4 A quién está destinada esta charla?
  • #5 Cosas que tenemos que saber.. No importa para qué vamos a usar MySQL, son puntos que siempre se tienen que tener en cuenta a la hora de la instalación y puesta en marcha de nuestro motor.. Algo que es bueno aclarar, para poder hablar con los mismos términos, suelo referirme al servidor cómo la máquina donde va a correr MySQL, el motor a la propia aplicación y la base, al schema
  • #6 La charla va a hacer enfoque sobre sistemas Debian Linux, pero la mayoría de los conceptos también son válidos para Windows y Unix
  • #7 HD SSD RAM Ventajas Desventajas Precios
  • #8 Benchmarks Tipos Bien por arriba No generar problemas entre Filesystems y RAID..
  • #9 2x Intel Xeon E5620 with HT OFF (4 cores, 4 threads , 12 MB L3 cache) @ 2.4 GHz8x 4 GB DDR3 RAM (32 GB total RAM) PERC H200 RAID Controller12x 2 TB 7.2K RPM SATA 3Gps disks Red Hat Enterprise Linux 6.0 64 bit The 12 disks were assigned to 2 RAID array: a first, 2 disks RAID 1 array for OS installation a second, 10 disks RAID 10 array for the benchmark runs
  • #10 TPS: Transactions per second
  • #11 TPS: Transactions per second
  • #14 Remarcar ventajas, posibles problemas de particiones llenas
  • #15 Hablar bien por arriba.. No confrontar al público
  • #16 De ahora en más, vamos a estar viendo algunas recomendaciones para un mejor uso de nuestro motor.. Las primeras que todo el mundo se olvida, son las que corresponden la capa de red, que involucran seguridad en nuestro motor
  • #17 Tuning sobre el Storage Engine, especificamente sobre MyISAM. Hablar sobre los Storage Engines, MyISAM, InnoDB, BlackHole, Memory, etc
  • #18 Hablar sobre las mejoras en MySQL 5.5 sobre InnoDB Comentar sobre el benchmark antes de mostrarlo. Qué son estas variables, hablar sobre las precauciones que hay que tener en cuenta al modificar algunas de estas variables
  • #23 Algo que todo sysadmin / DBA precisa hacer a diario, es mirar los logs de nuestros motores. Una buena práctica es recibir los slow_query_logs por email, y sumar un email más a nuestra cantidad interminable de emails para leer Es necesario tener este tipo de logs activos, para cualquier entorno y tener la costumbre de darles una mirada para saber que todo está en orden
  • #24 Muchos saben que estas variables son utilizadas a la hora de configurar una replicación nativa de MySQL Master / Slave Explicar para qué sirve cada una, IMPORTANTE ver al público si llega a entender, si es que hay público =) Hablar sobre la buena posibilidad de mantener binlogs para hacer un restore preciso de cualquier base
  • #25 Hablamos también de la ventaja (si no hay infinidad de tablas) que provee innodb_file_per_table.. Tener en cuenta el peso de la base. Más allá de lo que se hable con respecto a las particiones al principio de la charla, tener en cuenta cómo es que se hace esta configuración sobre nuestro my.cnf
  • #26 DDL: Data Definition Language CREATE / ALTER / DROP / TRUNCATE / RENAME DML: Data Manipulation Language SELECT / INSERT / UPDATE / DELETE / CALL / EXPLAIN / LOCK DCL: Data Control Language GRANT / REVOKE TCL: Transaction Control Language COMMIT / ROLLBACK Un buen tip / dica / consejo, es que después de un DELETE masivo, corramos un OPTIMIZE.. Entender la posibilidad de correr ALTER fuera de linea (hablar sobre mk-online-alter en el apartado de aplicaciones)
  • #27 Buscar y hablar sobre las optimizaciones que se realizaron en 5.5 para este tipo de ALTER Posibilidad de ejecutar comandos y hacer un RENAME table TO table_old, table_new TO table; Explicar las ventajas que uno encuentra con INTO OUTFILE Hablar de posibles snapshots con XFS
  • #30 Buscar alguna documentación copada sobre Percona Toolkit
  • #31 Resumen
  • #32 Resumen