SlideShare a Scribd company logo
Test early MySQL versions in a sandbox
  Giuseppe Maxia
  QA Director, Continuent, Inc
  Oracle ACE Director for MySQL



                                           1
Wednesday, March 21, 12
about me - Giuseppe Maxia
 •      a.k.a. The Data Charmer
 •      QA Director at Continuent, Inc
 •      Long time hacking with MySQL features
 •      Formerly, community manager,db consultant, designer,
        coder.
 •      A passion for QA and open source
 •      Blogger
 • http://datacharmer.blogspot.com


Wednesday, March 21, 12
MySQL Sandbox
                       lightning
                     presentation

Wednesday, March 21, 12
I used to install a lot of
                           MySQL databases for
                                  testing


                 MANUALLY
Wednesday, March 21, 12
Then, I decided
                           to use Perl ...


Wednesday, March 21, 12
DBA pop
                            quiz
Wednesday, March 21, 12
HOW MANY KEYSTROKES
               to install a MySQL server?




Wednesday, March 21, 12
HOW MANY KEYSTROKES
               to install a MySQL server?


                     10
             sb 5.0.83
             1234567890
Wednesday, March 21, 12
HOW MANY KEYSTROKES
                  to install 3 MySQL servers
                        in replication?




Wednesday, March 21, 12
HOW MANY KEYSTROKES
                  to install 3 MySQL servers
                        in replication?

                11
       sb r5.0.83
       12345678901
Wednesday, March 21, 12
HOW LONG
                       does it take
                to install a MySQL server?




Wednesday, March 21, 12
HOW LONG
                       does it take
                to install a MySQL server?


                            < 5 seconds
                          time sb 5.0.83
                             0m1.518s
Wednesday, March 21, 12
HOW LONG
                            does it take
                  to install 3 MySQL servers in
                            replication?




Wednesday, March 21, 12
HOW LONG
                            does it take
                  to install 3 MySQL servers in
                            replication?

                          < 10 seconds
                           sb 5.0.83
                            0m4.515s
Wednesday, March 21, 12
MySQL Sandbox
                          http://mysqlsandbox.net
            • Free software (Perl under GPL)
            • One (unix) host
            • Many database servers
            • Single or multiple sandboxes
            • Customized scripts to use the servers
            • Standard or circular replication
            • Installs IN SECONDS
Wednesday, March 21, 12
overview

        MySQL                                           MySQL
        server                                          server
           Data           DB1                    Data       DB1




           DB2            DB3
                                DATA DIRECTORY   DB2        DB3




                                     PORT


                                     SOCKET

Wednesday, March 21, 12
overview

        MySQL                                                 MySQL
        server                                                server
           Data           DB1
                                       SAME            Data       DB1




           DB2            DB3
                                       DATA            DB2        DB3

                                    DIRECTORY?
  /var/lib/mysql                                 /var/lib/mysql




                                DATA CORRUPTION
Wednesday, March 21, 12
overview

        MySQL                                     MySQL
        server                                    server

                                  SAME
                                 PORT or
                                 SOCKET?
                      3306                      3306


 /tmp/mysql.sock                           /tmp/mysql.sock

                             DOES NOT START
Wednesday, March 21, 12
The hard way




Wednesday, March 21, 12
The hard way

   Read the manual




Wednesday, March 21, 12
The hard way

                           try to figure out
   Read the manual
                           what to change




Wednesday, March 21, 12
The hard way

                           try to figure out
   Read the manual                            Install
                           what to change




Wednesday, March 21, 12
The easy way

                           MySQL Sandbox


    $ make_sandbox 
        /path/to/mysql-5.1.54_linux.tar.gz

    # it should work always




Wednesday, March 21, 12
The easier way

                     Prepare once        Install many times

  # some                            $ make_sandbox 5.1.54
  # preliminary
  # work




Wednesday, March 21, 12
The easiest way

                     Prepare once       Install many times

  # some
  # preliminary                     $ sb 5.1.54
  # work




Wednesday, March 21, 12
MySQL Sandbox
                                                        VERSION
                                               MySQL
                                               server
           Data           DB1




           DB2            DB3
                                $SANDBOX_HOME/msb_VERSION/data


                                                         VERSION


                                      /tmp/mysql_VERSION.sock

Wednesday, March 21, 12
MySQL Sandbox
                                                       5.1.54
                                              MySQL
                                              server
           Data           DB1




           DB2            DB3
                                $SANDBOX_HOME/msb_5_1_54/data


                                                          5154


                                        /tmp/mysql_5154.sock

Wednesday, March 21, 12
MySQL Sandbox
                                                       5.5.9
                                              MySQL
                                              server
           Data           DB1




           DB2            DB3
                                $SANDBOX_HOME/msb_5_5_09/data


                                                         5509


                                        /tmp/mysql_5509.sock

Wednesday, March 21, 12
Single Sandbox
            MySQL             customized scripts
            server


     start
     stop
    restart
    status
     clear
   send_kill
      use

Wednesday, March 21, 12
Multiple Sandbox
           MySQL               customized scripts
           server


      start_all
      stop_all
     restart_all m n1
     status_all s1 n2
      clear_all  s2 n3
     send_kill_a
         ll
       use_all
Wednesday, March 21, 12
Where do you get it


       •from CPAN
             sudo su -
             cpan MySQL::Sandbox

       •from launchpad
             http://launchpad.net/mysql-sandbox




Wednesday, March 21, 12
The easy replication way

                            MySQL Sandbox

 $ make_replication_sandbox 
     /path/to/mysql-5.1.54_linux.tar.gz


             Prepare once            Install many times

    # some                   $ make_replication_sandbox
    # preparation            5.1.54


Wednesday, March 21, 12
default architecture
                                            $HOME




                               /sandboxes            opt
                                                                 expanded
                                                                  tarballs
                          $SANDBOX_HOME
                                                    mysql


                                               $SANDBOX_BINARY
          installed
         sandboxes

Wednesday, March 21, 12
default architecture
                                                    $HOME



                                       /sandboxes            opt



                          msb_5_0_91
                                                            mysql
                          msb_5_1_48
                                                                    5.0.91
                          rsandbox_5_1_48
                                                                    5.1.45
                                 master
                                                                    5.1.48
                                 node1
                                                                    5.5.4
                                 node2
Wednesday, March 21, 12
MySQL Sandbox cookbook


 $ perldoc MySQL::Sandbox::Recipes




Wednesday, March 21, 12
Early MySQL versions in a
                                  sandbox

                             5.6     5.6



                                     5.6




Wednesday, March 21, 12
Where to get the software
                                        http://labs.mysql.com


                                            http://dev.mysql.com




Wednesday, March 21, 12
Wednesday, March 21, 12
Where is MySQL 5.6




Wednesday, March 21, 12
The bleeding edge


                           http://code.launchpad.net/mysql-server




Wednesday, March 21, 12
HANDS ON
    ls labs

    mysql-5.6.2-m5-osx10.6-x86_64.tar.gz
    mysql-5.6.5-m8-osx10.7-.tar.gz
    mysql-5.6.3-labs-innodb-fts-osx10.5-
    x86.tar.gz
    mysql-5.6.4-m7-osx10.5-x86.tar.gz




Wednesday, March 21, 12
Innodb fulltext
    make_sandbox mysql-5.6.5-m8-
    osx10.7-.tar.gz
    ....
    ....
    Your sandbox server was installed in
    $HOME/sandboxes/msb_5_6_5




Wednesday, March 21, 12
testing innodb fulltext
    ~/sandboxes/msb_5_6_5/use
    Welcome to the MySQL monitor.   Commands end with ; or g.
    Your MySQL connection id is 2
    Server version: 5.6.5-m8 Source distribution
    Copyright (c) 2000, 2011, 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 [localhost] {msandbox} ((none)) >




Wednesday, March 21, 12
testing innodb fulltext
    create table mysql_manual (
    id int not null auto_increment ,
    title varchar(100) not null,
    chapter mediumtext,
    primary key (id),
    fulltext index (title, chapter)
    ) engine = INNODB;




Wednesday, March 21, 12
testing innodb fulltext
    show create table mysql_manualG
    ****************** 1. row *********
           Table: mysql_manual
    Create Table: CREATE TABLE `mysql_manual` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `title` varchar(100) NOT NULL,
      `chapter` mediumtext,
      PRIMARY KEY (`id`),
      FULLTEXT KEY `title` (`title`,`chapter`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1




Wednesday, March 21, 12
testing innodb fulltext
                    Using a copy of MySQL manual to fill the table

    for P in $PWD/refman-5.5-en.html-chapter/*.html;
    do echo "insert into mysql_manual(title,chapter)
    values ('`basename $P .html`', load_file('$P'));";
    done | ~/sandboxes/msb_5_6_5/use -vv test
    ....
    insert into mysql_manual(title,chapter) values
    ('stored-programs-views', load_file('/Users/gmax/
    labs/refman-5.5-en.html-chapter/stored-programs-
    views.html'))
    Query OK, 1 row affected
    ....



Wednesday, March 21, 12
testing innodb fulltext
    select title from mysql_manual where
    match(title,chapter)
    against ('+optimize +queries' in boolean mode);
    +-------------------------+
    | title                   |
    +-------------------------+
    | backup-and-recovery     |
    ...
    | extending-mysql         |
    | functions               |
    | ha-overview             |
    ...
    | optimization            |
    | partitioning            |
    | replication             |
    | restrictions            |
    +-------------------------+
    16 rows in set (0.00 sec)



Wednesday, March 21, 12
testing innodb fulltext
    select title from mysql_manual where
    match(title,chapter) against ('"optimize queries"
    @10' in boolean mode);
    +------------------+
    | title            |
    +------------------+
    | introduction     |
    | optimization     |
    +------------------+
    2 rows in set (0.00 sec)

    ##
    ## @10 = proximity operator
    ##




Wednesday, March 21, 12
testing some replication
    make_replication_sandbox mysql-5.6.5-m8-
    osx10.7-.tar.gz
    ....
    ....
    replication directory installed in
    $HOME/sandboxes/rsandbox_mysql-5_6_5




Wednesday, March 21, 12
testing some replication
    ~/sandboxes/rsandbox_mysql-5_6_5/s1
    show slave statusG
    ******** 1. row ***************************
         Slave_IO_State: Waiting for master to send event
                       Master_Host: 127.0.0.1
                       Master_User: rsandbox
                       Master_Port: 12630
                     Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 2524
                   Relay_Log_File: mysql_sandbox12631-
    relay-bin.000002
                     Relay_Log_Pos: 2677
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes


Wednesday, March 21, 12
testing some replication
    ~/sandboxes/rsandbox_mysql-5_6_5/s1
    show slave statusG
    ....
    Master_Server_Id: 1
    Master_UUID: be3c022a-726f-11e1-a26a-a64f991393aa
    Master_Info_File: /Users/gmax/sandboxes/
    rsandbox_mysql-5_6_5/node1/data/master.info
    SQL_Delay: 0
    SQL_Remaining_Delay: NULL
    Slave_SQL_Running_State: Slave has read all relay
    log; waiting for the slave I/O thread to update it




Wednesday, March 21, 12
uncovering replication
                                features
    show variables like '%info%';
    +---------------------------+----------------+
    | Variable_name              | Value          |
    +---------------------------+----------------+
    | master_info_repository     | FILE           |
    | relay_log_info_file        | relay-log.info |
    | relay_log_info_repository | FILE            |
    | sync_master_info           | 0              |
    | sync_relay_log_info        | 0              |
    +---------------------------+----------------+
    show variables like '%worker%';
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | slave_parallel_workers | 0      |
    +------------------------+-------+

Wednesday, March 21, 12
uncovering replication
                                features
    STOP SLAVE;

    set global master_info_repository='table';
    Query OK, 0 rows affected (0.00 sec)

    slave1 [localhost] {msandbox} ((none)) > set global
    relay_log_info_repository='table';
    Query OK, 0 rows affected (0.00 sec)

    slave1 [localhost] {msandbox} ((none)) > set global
    slave_parallel_workers=3;
    Query OK, 0 rows affected (0.00 sec)




Wednesday, March 21, 12
fixing replication tables
    use mysql;

    slave1 [localhost] {msandbox} (mysql) > alter table
    slave_master_info engine=innodb;
    Query OK, 1 row affected (0.01 sec)
    Records: 1 Duplicates: 0 Warnings: 0

    slave1 [localhost] {msandbox} (mysql) > alter table
    slave_relay_log_info engine=innodb;
    Query OK, 1 row affected (0.01 sec)
    Records: 1 Duplicates: 0 Warnings: 0

    slave1 [localhost] {msandbox} (mysql) > alter table
    slave_worker_info engine=innodb;
    Query OK, 0 rows affected (0.01 sec)
    Records: 0 Duplicates: 0 Warnings: 0


Wednesday, March 21, 12
Look at the new features
    show slave statusG
    ....
    ....
    Master_UUID: be3c022a-726f-11e1-a26a-
    a64f991393aa
    Master_Info_File:
    mysql.slave_master_info




Wednesday, March 21, 12
Look at the new features
    select * from mysql.slave_master_infoG
    *************************** 1. row ******
                  Master_id: 101
            Number_of_lines: 22
            Master_log_name: mysql-bin.000001
             Master_log_pos: 2524
                       Host: 127.0.0.1
                  User_name: rsandbox
              User_password: rsandbox
                       Port: 12630
    ....
                  Heartbeat: 1800
                       Bind:
         Ignored_server_ids: 0
         Uuid: be3c022a-726f-11e1-a26a-a64f991393aa
                Retry_count: 86400


Wednesday, March 21, 12
Look at the new features
    select * from mysql.slave_relay_log_infoG
    *************************** 1. row ***************
            Master_id: 101
      Number_of_lines: 6
       Relay_log_name: ./mysql_sandbox12631-relay-bin.
    000002
        Relay_log_pos: 2677
      Master_log_name: mysql-bin.000001
       Master_log_pos: 2524
            Sql_delay: 0
    Number_of_workers: 3




Wednesday, March 21, 12
Look at the new features
    select * from mysql.slave_worker_infoG
    ************** 3. row *********************
                      Master_id: 101
                      Worker_id: 2
                 Relay_log_name: ./mysql_sandbox12631-relay-
    bin.000003
                  Relay_log_pos: 1394
                Master_log_name: mysql-bin.000001
                 Master_log_pos: 3651
     Checkpoint_relay_log_name: ./mysql_sandbox12631-relay-
    bin.000003
      Checkpoint_relay_log_pos: 1199
    Checkpoint_master_log_name: mysql-bin.000001
     Checkpoint_master_log_pos: 3456
               Checkpoint_seqno: 0
         Checkpoint_group_size: 64
       Checkpoint_group_bitmap:



Wednesday, March 21, 12
DEMO




Wednesday, March 21, 12
Participate!




Wednesday, March 21, 12
THANKS
                                                                                 Let's talk!




 This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License. To view a copy of this license, visit http://
 creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California,
 94105, USA.
Wednesday, March 21, 12

More Related Content

PDF
Testing mysql creatively in a sandbox
PDF
Replication 101
PDF
Testing mysql creatively in a sandbox
PDF
Big challenges
PDF
Introduction Mysql
PDF
Mysql tutorial 5257
PDF
MySQL's new Secure by Default Install -- All Things Open October 20th 2015
PDF
Ajuste (tuning) del rendimiento de SQL Server 2008
Testing mysql creatively in a sandbox
Replication 101
Testing mysql creatively in a sandbox
Big challenges
Introduction Mysql
Mysql tutorial 5257
MySQL's new Secure by Default Install -- All Things Open October 20th 2015
Ajuste (tuning) del rendimiento de SQL Server 2008

What's hot (20)

PDF
MySQL Cluster 8.0 tutorial text
PDF
HTTP Plugin for MySQL!
PDF
UKOUG 2011: MySQL Architectures for Oracle DBA's
PDF
Galera Cluster: Synchronous Multi-Master Replication for MySQL HA
PDF
MySQL High Availability and Disaster Recovery with Continuent, a VMware company
PDF
Advanced mysql replication for the masses
PDF
"Advanced MySQL 5 Tuning" by Michael Monty Widenius @ eLiberatica 2007
PDF
What's New in MySQL 5.6
ODP
Built-in query caching for all PHP MySQL extensions/APIs
PDF
The Dolphins Leap Again
PPTX
Debugging and Configuration Best Practices for Oracle Linux
PDF
MySQL 5.5&5.6 new features summary
PDF
The History and Future of the MySQL ecosystem
PDF
MySQL Backup and Recovery Essentials
PDF
MySQL 开发
PDF
HA Clustering of PostgreSQL(replication)@2012.9.29 PG Study.
PDF
What makes JBoss AS7 tick?
PPTX
MySQL Utilities -- Cool Tools For You: PHP World Nov 16 2016
PDF
Failover or not to failover
PDF
Oracle Client Failover - Under The Hood
MySQL Cluster 8.0 tutorial text
HTTP Plugin for MySQL!
UKOUG 2011: MySQL Architectures for Oracle DBA's
Galera Cluster: Synchronous Multi-Master Replication for MySQL HA
MySQL High Availability and Disaster Recovery with Continuent, a VMware company
Advanced mysql replication for the masses
"Advanced MySQL 5 Tuning" by Michael Monty Widenius @ eLiberatica 2007
What's New in MySQL 5.6
Built-in query caching for all PHP MySQL extensions/APIs
The Dolphins Leap Again
Debugging and Configuration Best Practices for Oracle Linux
MySQL 5.5&5.6 new features summary
The History and Future of the MySQL ecosystem
MySQL Backup and Recovery Essentials
MySQL 开发
HA Clustering of PostgreSQL(replication)@2012.9.29 PG Study.
What makes JBoss AS7 tick?
MySQL Utilities -- Cool Tools For You: PHP World Nov 16 2016
Failover or not to failover
Oracle Client Failover - Under The Hood
Ad

Similar to Testing early mysql releases in a sandbox (20)

PDF
MySQL Sandbox - A toolkit for laziness
PDF
BITS: Introduction to MySQL - Introduction and Installation
PDF
MySQL Backup and Security Best Practices
PDF
My SQL 101
PDF
My S Q L Introduction for 1 day training
PDF
My sql introduction for Bestcom
PDF
Congratsyourthedbatoo
PDF
Collaborate 2012 - Administering MySQL for Oracle DBAs
PPT
Mysqlppt3510
PPT
Mysqlppt3510
PDF
My First 100 days with a MySQL DBMS (WP)
PDF
Posscon my sql56
ODP
The care and feeding of a MySQL database
PDF
My sql crashcourse_intro_kdl
PDF
Collaborate 2012 - Administering MySQL for Oracle DBAs
PDF
MySQL 简要介绍
PPT
PDF
Welcome to MySQL
PDF
Introduction to My SQL
PDF
MySQL Sandbox 3
MySQL Sandbox - A toolkit for laziness
BITS: Introduction to MySQL - Introduction and Installation
MySQL Backup and Security Best Practices
My SQL 101
My S Q L Introduction for 1 day training
My sql introduction for Bestcom
Congratsyourthedbatoo
Collaborate 2012 - Administering MySQL for Oracle DBAs
Mysqlppt3510
Mysqlppt3510
My First 100 days with a MySQL DBMS (WP)
Posscon my sql56
The care and feeding of a MySQL database
My sql crashcourse_intro_kdl
Collaborate 2012 - Administering MySQL for Oracle DBAs
MySQL 简要介绍
Welcome to MySQL
Introduction to My SQL
MySQL Sandbox 3
Ad

More from Giuseppe Maxia (20)

PDF
MySQL NDB 8.0 clusters in your laptop with dbdeployer
PDF
Test like a_boss
PDF
Dbdeployer, the universal installer
PDF
Test complex database systems in your laptop with dbdeployer
PDF
Dbdeployer
PDF
Dbdeployer
PDF
A quick tour of Mysql 8 roles
PDF
MySQL document_store
PDF
Replication skeptic
PDF
Synchronise your data between MySQL and MongoDB
PDF
Juggle your data with Tungsten Replicator
PDF
MySQL in your laptop
PDF
Script it
PDF
Tungsten Replicator tutorial
PDF
Preventing multi master conflicts with tungsten
PDF
MySQL high availability power and usability
PDF
Solving MySQL replication problems with Tungsten
PDF
State of the art of MySQL replication and clustering
PDF
Mysql 5.5 and 5.6 replication
PDF
Lightning talks percona live mysql_2012
MySQL NDB 8.0 clusters in your laptop with dbdeployer
Test like a_boss
Dbdeployer, the universal installer
Test complex database systems in your laptop with dbdeployer
Dbdeployer
Dbdeployer
A quick tour of Mysql 8 roles
MySQL document_store
Replication skeptic
Synchronise your data between MySQL and MongoDB
Juggle your data with Tungsten Replicator
MySQL in your laptop
Script it
Tungsten Replicator tutorial
Preventing multi master conflicts with tungsten
MySQL high availability power and usability
Solving MySQL replication problems with Tungsten
State of the art of MySQL replication and clustering
Mysql 5.5 and 5.6 replication
Lightning talks percona live mysql_2012

Recently uploaded (20)

PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
cuic standard and advanced reporting.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
KodekX | Application Modernization Development
PDF
Encapsulation theory and applications.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
sap open course for s4hana steps from ECC to s4
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
Cloud computing and distributed systems.
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
cuic standard and advanced reporting.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Understanding_Digital_Forensics_Presentation.pptx
KodekX | Application Modernization Development
Encapsulation theory and applications.pdf
MYSQL Presentation for SQL database connectivity
Encapsulation_ Review paper, used for researhc scholars
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Review of recent advances in non-invasive hemoglobin estimation
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
sap open course for s4hana steps from ECC to s4
Digital-Transformation-Roadmap-for-Companies.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
Cloud computing and distributed systems.
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Big Data Technologies - Introduction.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows

Testing early mysql releases in a sandbox

  • 1. Test early MySQL versions in a sandbox Giuseppe Maxia QA Director, Continuent, Inc Oracle ACE Director for MySQL 1 Wednesday, March 21, 12
  • 2. about me - Giuseppe Maxia • a.k.a. The Data Charmer • QA Director at Continuent, Inc • Long time hacking with MySQL features • Formerly, community manager,db consultant, designer, coder. • A passion for QA and open source • Blogger • http://datacharmer.blogspot.com Wednesday, March 21, 12
  • 3. MySQL Sandbox lightning presentation Wednesday, March 21, 12
  • 4. I used to install a lot of MySQL databases for testing MANUALLY Wednesday, March 21, 12
  • 5. Then, I decided to use Perl ... Wednesday, March 21, 12
  • 6. DBA pop quiz Wednesday, March 21, 12
  • 7. HOW MANY KEYSTROKES to install a MySQL server? Wednesday, March 21, 12
  • 8. HOW MANY KEYSTROKES to install a MySQL server? 10 sb 5.0.83 1234567890 Wednesday, March 21, 12
  • 9. HOW MANY KEYSTROKES to install 3 MySQL servers in replication? Wednesday, March 21, 12
  • 10. HOW MANY KEYSTROKES to install 3 MySQL servers in replication? 11 sb r5.0.83 12345678901 Wednesday, March 21, 12
  • 11. HOW LONG does it take to install a MySQL server? Wednesday, March 21, 12
  • 12. HOW LONG does it take to install a MySQL server? < 5 seconds time sb 5.0.83 0m1.518s Wednesday, March 21, 12
  • 13. HOW LONG does it take to install 3 MySQL servers in replication? Wednesday, March 21, 12
  • 14. HOW LONG does it take to install 3 MySQL servers in replication? < 10 seconds sb 5.0.83 0m4.515s Wednesday, March 21, 12
  • 15. MySQL Sandbox http://mysqlsandbox.net • Free software (Perl under GPL) • One (unix) host • Many database servers • Single or multiple sandboxes • Customized scripts to use the servers • Standard or circular replication • Installs IN SECONDS Wednesday, March 21, 12
  • 16. overview MySQL MySQL server server Data DB1 Data DB1 DB2 DB3 DATA DIRECTORY DB2 DB3 PORT SOCKET Wednesday, March 21, 12
  • 17. overview MySQL MySQL server server Data DB1 SAME Data DB1 DB2 DB3 DATA DB2 DB3 DIRECTORY? /var/lib/mysql /var/lib/mysql DATA CORRUPTION Wednesday, March 21, 12
  • 18. overview MySQL MySQL server server SAME PORT or SOCKET? 3306 3306 /tmp/mysql.sock /tmp/mysql.sock DOES NOT START Wednesday, March 21, 12
  • 19. The hard way Wednesday, March 21, 12
  • 20. The hard way Read the manual Wednesday, March 21, 12
  • 21. The hard way try to figure out Read the manual what to change Wednesday, March 21, 12
  • 22. The hard way try to figure out Read the manual Install what to change Wednesday, March 21, 12
  • 23. The easy way MySQL Sandbox $ make_sandbox /path/to/mysql-5.1.54_linux.tar.gz # it should work always Wednesday, March 21, 12
  • 24. The easier way Prepare once Install many times # some $ make_sandbox 5.1.54 # preliminary # work Wednesday, March 21, 12
  • 25. The easiest way Prepare once Install many times # some # preliminary $ sb 5.1.54 # work Wednesday, March 21, 12
  • 26. MySQL Sandbox VERSION MySQL server Data DB1 DB2 DB3 $SANDBOX_HOME/msb_VERSION/data VERSION /tmp/mysql_VERSION.sock Wednesday, March 21, 12
  • 27. MySQL Sandbox 5.1.54 MySQL server Data DB1 DB2 DB3 $SANDBOX_HOME/msb_5_1_54/data 5154 /tmp/mysql_5154.sock Wednesday, March 21, 12
  • 28. MySQL Sandbox 5.5.9 MySQL server Data DB1 DB2 DB3 $SANDBOX_HOME/msb_5_5_09/data 5509 /tmp/mysql_5509.sock Wednesday, March 21, 12
  • 29. Single Sandbox MySQL customized scripts server start stop restart status clear send_kill use Wednesday, March 21, 12
  • 30. Multiple Sandbox MySQL customized scripts server start_all stop_all restart_all m n1 status_all s1 n2 clear_all s2 n3 send_kill_a ll use_all Wednesday, March 21, 12
  • 31. Where do you get it •from CPAN sudo su - cpan MySQL::Sandbox •from launchpad http://launchpad.net/mysql-sandbox Wednesday, March 21, 12
  • 32. The easy replication way MySQL Sandbox $ make_replication_sandbox /path/to/mysql-5.1.54_linux.tar.gz Prepare once Install many times # some $ make_replication_sandbox # preparation 5.1.54 Wednesday, March 21, 12
  • 33. default architecture $HOME /sandboxes opt expanded tarballs $SANDBOX_HOME mysql $SANDBOX_BINARY installed sandboxes Wednesday, March 21, 12
  • 34. default architecture $HOME /sandboxes opt msb_5_0_91 mysql msb_5_1_48 5.0.91 rsandbox_5_1_48 5.1.45 master 5.1.48 node1 5.5.4 node2 Wednesday, March 21, 12
  • 35. MySQL Sandbox cookbook $ perldoc MySQL::Sandbox::Recipes Wednesday, March 21, 12
  • 36. Early MySQL versions in a sandbox 5.6 5.6 5.6 Wednesday, March 21, 12
  • 37. Where to get the software http://labs.mysql.com http://dev.mysql.com Wednesday, March 21, 12
  • 39. Where is MySQL 5.6 Wednesday, March 21, 12
  • 40. The bleeding edge http://code.launchpad.net/mysql-server Wednesday, March 21, 12
  • 41. HANDS ON ls labs mysql-5.6.2-m5-osx10.6-x86_64.tar.gz mysql-5.6.5-m8-osx10.7-.tar.gz mysql-5.6.3-labs-innodb-fts-osx10.5- x86.tar.gz mysql-5.6.4-m7-osx10.5-x86.tar.gz Wednesday, March 21, 12
  • 42. Innodb fulltext make_sandbox mysql-5.6.5-m8- osx10.7-.tar.gz .... .... Your sandbox server was installed in $HOME/sandboxes/msb_5_6_5 Wednesday, March 21, 12
  • 43. testing innodb fulltext ~/sandboxes/msb_5_6_5/use Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 2 Server version: 5.6.5-m8 Source distribution Copyright (c) 2000, 2011, 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 [localhost] {msandbox} ((none)) > Wednesday, March 21, 12
  • 44. testing innodb fulltext create table mysql_manual ( id int not null auto_increment , title varchar(100) not null, chapter mediumtext, primary key (id), fulltext index (title, chapter) ) engine = INNODB; Wednesday, March 21, 12
  • 45. testing innodb fulltext show create table mysql_manualG ****************** 1. row ********* Table: mysql_manual Create Table: CREATE TABLE `mysql_manual` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL, `chapter` mediumtext, PRIMARY KEY (`id`), FULLTEXT KEY `title` (`title`,`chapter`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 Wednesday, March 21, 12
  • 46. testing innodb fulltext Using a copy of MySQL manual to fill the table for P in $PWD/refman-5.5-en.html-chapter/*.html; do echo "insert into mysql_manual(title,chapter) values ('`basename $P .html`', load_file('$P'));"; done | ~/sandboxes/msb_5_6_5/use -vv test .... insert into mysql_manual(title,chapter) values ('stored-programs-views', load_file('/Users/gmax/ labs/refman-5.5-en.html-chapter/stored-programs- views.html')) Query OK, 1 row affected .... Wednesday, March 21, 12
  • 47. testing innodb fulltext select title from mysql_manual where match(title,chapter) against ('+optimize +queries' in boolean mode); +-------------------------+ | title | +-------------------------+ | backup-and-recovery | ... | extending-mysql | | functions | | ha-overview | ... | optimization | | partitioning | | replication | | restrictions | +-------------------------+ 16 rows in set (0.00 sec) Wednesday, March 21, 12
  • 48. testing innodb fulltext select title from mysql_manual where match(title,chapter) against ('"optimize queries" @10' in boolean mode); +------------------+ | title | +------------------+ | introduction | | optimization | +------------------+ 2 rows in set (0.00 sec) ## ## @10 = proximity operator ## Wednesday, March 21, 12
  • 49. testing some replication make_replication_sandbox mysql-5.6.5-m8- osx10.7-.tar.gz .... .... replication directory installed in $HOME/sandboxes/rsandbox_mysql-5_6_5 Wednesday, March 21, 12
  • 50. testing some replication ~/sandboxes/rsandbox_mysql-5_6_5/s1 show slave statusG ******** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: rsandbox Master_Port: 12630 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 2524 Relay_Log_File: mysql_sandbox12631- relay-bin.000002 Relay_Log_Pos: 2677 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Wednesday, March 21, 12
  • 51. testing some replication ~/sandboxes/rsandbox_mysql-5_6_5/s1 show slave statusG .... Master_Server_Id: 1 Master_UUID: be3c022a-726f-11e1-a26a-a64f991393aa Master_Info_File: /Users/gmax/sandboxes/ rsandbox_mysql-5_6_5/node1/data/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Wednesday, March 21, 12
  • 52. uncovering replication features show variables like '%info%'; +---------------------------+----------------+ | Variable_name | Value | +---------------------------+----------------+ | master_info_repository | FILE | | relay_log_info_file | relay-log.info | | relay_log_info_repository | FILE | | sync_master_info | 0 | | sync_relay_log_info | 0 | +---------------------------+----------------+ show variables like '%worker%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | slave_parallel_workers | 0 | +------------------------+-------+ Wednesday, March 21, 12
  • 53. uncovering replication features STOP SLAVE; set global master_info_repository='table'; Query OK, 0 rows affected (0.00 sec) slave1 [localhost] {msandbox} ((none)) > set global relay_log_info_repository='table'; Query OK, 0 rows affected (0.00 sec) slave1 [localhost] {msandbox} ((none)) > set global slave_parallel_workers=3; Query OK, 0 rows affected (0.00 sec) Wednesday, March 21, 12
  • 54. fixing replication tables use mysql; slave1 [localhost] {msandbox} (mysql) > alter table slave_master_info engine=innodb; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 slave1 [localhost] {msandbox} (mysql) > alter table slave_relay_log_info engine=innodb; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 slave1 [localhost] {msandbox} (mysql) > alter table slave_worker_info engine=innodb; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 Wednesday, March 21, 12
  • 55. Look at the new features show slave statusG .... .... Master_UUID: be3c022a-726f-11e1-a26a- a64f991393aa Master_Info_File: mysql.slave_master_info Wednesday, March 21, 12
  • 56. Look at the new features select * from mysql.slave_master_infoG *************************** 1. row ****** Master_id: 101 Number_of_lines: 22 Master_log_name: mysql-bin.000001 Master_log_pos: 2524 Host: 127.0.0.1 User_name: rsandbox User_password: rsandbox Port: 12630 .... Heartbeat: 1800 Bind: Ignored_server_ids: 0 Uuid: be3c022a-726f-11e1-a26a-a64f991393aa Retry_count: 86400 Wednesday, March 21, 12
  • 57. Look at the new features select * from mysql.slave_relay_log_infoG *************************** 1. row *************** Master_id: 101 Number_of_lines: 6 Relay_log_name: ./mysql_sandbox12631-relay-bin. 000002 Relay_log_pos: 2677 Master_log_name: mysql-bin.000001 Master_log_pos: 2524 Sql_delay: 0 Number_of_workers: 3 Wednesday, March 21, 12
  • 58. Look at the new features select * from mysql.slave_worker_infoG ************** 3. row ********************* Master_id: 101 Worker_id: 2 Relay_log_name: ./mysql_sandbox12631-relay- bin.000003 Relay_log_pos: 1394 Master_log_name: mysql-bin.000001 Master_log_pos: 3651 Checkpoint_relay_log_name: ./mysql_sandbox12631-relay- bin.000003 Checkpoint_relay_log_pos: 1199 Checkpoint_master_log_name: mysql-bin.000001 Checkpoint_master_log_pos: 3456 Checkpoint_seqno: 0 Checkpoint_group_size: 64 Checkpoint_group_bitmap: Wednesday, March 21, 12
  • 61. THANKS Let's talk! This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License. To view a copy of this license, visit http:// creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. Wednesday, March 21, 12