Your SlideShare is downloading. ×
0
Testing MySQL creatively in aSandboxGiuseppe MaxiaQA Director, Continuent, Inc  http://mysqlsandbox.net                   ...
about me - Giuseppe Maxia  •      a.k.a. The Data Charmer  •      QA Director at Continuent, Inc  •      Long time hacking...
MySQL Sandbox                           lightning                         presentationTuesday, April 17, 12               ...
I used to install a lot of                         MySQL databases for                                testing             ...
Then, I decided                         to use Perl ...Tuesday, April 17, 12                      5
DBA pop                          quizTuesday, April 17, 12             6
HOW MANY KEYSTROKES                 to install a MySQL server?Tuesday, April 17, 12                         7
HOW MANY KEYSTROKES                 to install a MySQL server?                       10               sb 5.0.83           ...
HOW MANY KEYSTROKES                    to install 3 MySQL servers                          in replication?Tuesday, April 1...
HOW MANY KEYSTROKES                    to install 3 MySQL servers                          in replication?                ...
HOW LONG                         does it take                  to install a MySQL server?Tuesday, April 17, 12            ...
HOW LONG                         does it take                  to install a MySQL server?                          < 5 sec...
HOW LONG                              does it take                    to install 3 MySQL servers in                       ...
HOW LONG                              does it take                    to install 3 MySQL servers in                       ...
MySQL Sandbox                        http://mysqlsandbox.net             • Free software (Perl under GPL)             • On...
overview         MySQL                                        MySQL         server                                       s...
overview         MySQL                                              MySQL         server                                  ...
overview         MySQL                                      MySQL         server                                     serve...
The hard wayTuesday, April 17, 12                  15
The hard way   Read the manualTuesday, April 17, 12                  15
The hard way                         try to figure out   Read the manual                         what to changeTuesday, Apr...
The hard way                         try to figure out   Read the manual                          Install                  ...
The easy way                         MySQL Sandbox     $ make_sandbox          /path/to/mysql-5.1.54_linux.tar.gz     # it...
The easier way                        Prepare once        Install many times  # some                               $ make_...
The easiest way                        Prepare once       Install many times  # some  # preliminary                       ...
MySQL Sandbox                                                      VERSION                                             MyS...
MySQL Sandbox                                                     5.1.54                                            MySQL ...
MySQL Sandbox                                                     5.5.9                                            MySQL  ...
Single Sandbox              MySQL         customized scripts              server     start     stop    restart    status  ...
Multiple Sandbox             MySQL           customized scripts             server      start_all      stop_all     restar...
Where do you get it        •from CPAN              sudo su -              cpan MySQL::Sandbox        •from launchpad      ...
The easy replication way                               MySQL Sandbox $ make_replication_sandbox      /path/to/mysql-5.1.54...
default architecture                                          $HOME                             /sandboxes            opt ...
default architecture                                                  $HOME                                     /sandboxes...
Tuesday, April 17, 12   28
creating a single sandbox                  make_sandbox                      /path/to/mysql-X.X.XX-OS.tar.gzTuesday, April...
using a single sandbox                  # after                  # make_sandbox                   #   /path/to/mysql-X.X.X...
creating a single sandbox                        with a specific options file                  make_sandbox                 ...
easily create a sandbox after the first                       one                        The long way $ cd $HOME/opt/mysql ...
easily create a sandbox after the first                       one                        The short way $ make_sandbox --exp...
starting a single sandbox                  $ cd $SANDBOX_HOME/msb_X_X_XX                  $ ./startTuesday, April 17, 12  ...
starting a single sandbox                        with temporary options                  $ cd $SANDBOX_HOME/msb_X_X_XX    ...
creating a sandbox with custom port                 and directory                  $ make_sandbox 5.1.34 --               ...
creating a sandbox with automatic                      port checking                  $ make_sandbox 5.1.34 -- --check_por...
create a replication sandbox $ make_replication_sandbox    path/to/mysql-5.1.34-osx10.5-x86.tar.gzTuesday, April 17, 12   ...
create a circular replication sandbox $ make_replication_sandbox    --circular=4    path/to/mysql-5.1.34-osx10.5-x86.tar.g...
changing port to an existing sandbox $ sbtool -o port      -s /path/to/source/sandbox      --new_port=XXXXTuesday, April 1...
installing the innodb plugin $ sbtool -o plugin      --plugin=innodb      -s /path/to/source/sandboxTuesday, April 17, 12 ...
creating a replication sandbox with                     new base port $ make_replication_sandbox      --replication_direct...
creating a stand-alone master $ make_sandbox 5.5.16 -- --master # Creates a sandbox with binary log and # server-id enable...
creating a quick slave ~/sandboxes/rsandbox_5_5_16/m -e show variables like "port" +---------------+-------+ | Variable_na...
MySQL Sandbox cookbook $ perldoc MySQL::Sandbox::RecipesTuesday, April 17, 12                            45
testing MySQL creativelyTuesday, April 17, 12                              46
Breaking replication make_replication_sandbox 5.5.16 cd $HOME/sandboxes/rsandbox_5_5_16 ./m -e create table t1 (i int not ...
Fixing replication ./s1 -e delete from t1 where i = 1 test ./s1 -e start slave ./s1 -e show slave statusG | grep Error|Run...
Making a slave lag ./s1 -e stop slave SQL_THREAD ./s2 -e stop slave SQL_THREAD ./m < heavy_load_commands.sql # 1 hour late...
Options for replication nodes     --master_options = name        Options passed to the master     --slave_options = name  ...
customizing sandboxes during                               installation (1)     make_replication_sandbox        --node_opt...
customizing sandboxes during                               installation (2) ./use_all show variables like "%innodb%buffer%...
customizing sandboxes during                               installation (3)     ./use_all show variables like     "%read_o...
re-playing binary logs     • 1) server become unusable for human error     • 2) install a new server     • 3) load the lat...
Testing Percona Server     make_sandbox        --add_prefix=ps        --export_binaries        Percona-Server-5.5.21-osx10...
DEMOTuesday, April 17, 12          56
Participate!Tuesday, April 17, 12                  57
THANKS                         http://mysqlsandbox.net  This work is licensed under the Creative Commons Attribution-Share...
Upcoming SlideShare
Loading in...5
×

Testing mysql creatively in a sandbox

696

Published on

Testing MySQL creatively in a sandbox

Published in: Technology
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
696
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
26
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Testing mysql creatively in a sandbox"

  1. 1. Testing MySQL creatively in aSandboxGiuseppe MaxiaQA Director, Continuent, Inc http://mysqlsandbox.net 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.Tuesday, April 17, 12 1
  2. 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.comTuesday, April 17, 12 2
  3. 3. MySQL Sandbox lightning presentationTuesday, April 17, 12 3
  4. 4. I used to install a lot of MySQL databases for testing MANUALLYTuesday, April 17, 12 4
  5. 5. Then, I decided to use Perl ...Tuesday, April 17, 12 5
  6. 6. DBA pop quizTuesday, April 17, 12 6
  7. 7. HOW MANY KEYSTROKES to install a MySQL server?Tuesday, April 17, 12 7
  8. 8. HOW MANY KEYSTROKES to install a MySQL server? 10 sb 5.0.83 1234567890Tuesday, April 17, 12 7
  9. 9. HOW MANY KEYSTROKES to install 3 MySQL servers in replication?Tuesday, April 17, 12 8
  10. 10. HOW MANY KEYSTROKES to install 3 MySQL servers in replication? 11 sb r5.0.83 12345678901Tuesday, April 17, 12 8
  11. 11. HOW LONG does it take to install a MySQL server?Tuesday, April 17, 12 9
  12. 12. HOW LONG does it take to install a MySQL server? < 5 seconds time sb 5.0.83 0m1.518sTuesday, April 17, 12 9
  13. 13. HOW LONG does it take to install 3 MySQL servers in replication?Tuesday, April 17, 12 10
  14. 14. HOW LONG does it take to install 3 MySQL servers in replication? < 10 seconds sb 5.0.83 0m4.515sTuesday, April 17, 12 10
  15. 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 SECONDSTuesday, April 17, 12 11
  16. 16. overview MySQL MySQL server server Data DB1 Data DB1 DB2 DB3 DATA DIRECTORY DB2 DB3 PORT SOCKETTuesday, April 17, 12 12
  17. 17. overview MySQL MySQL server server Data DB1 SAME Data DB1 DB2 DB3 DATA DB2 DB3 DIRECTORY? /var/lib/mysql /var/lib/mysql DATA CORRUPTIONTuesday, April 17, 12 13
  18. 18. overview MySQL MySQL server server SAME PORT or SOCKET? 3306 3306 /tmp/mysql.sock /tmp/mysql.sock DOES NOT STARTTuesday, April 17, 12 14
  19. 19. The hard wayTuesday, April 17, 12 15
  20. 20. The hard way Read the manualTuesday, April 17, 12 15
  21. 21. The hard way try to figure out Read the manual what to changeTuesday, April 17, 12 15
  22. 22. The hard way try to figure out Read the manual Install what to changeTuesday, April 17, 12 15
  23. 23. The easy way MySQL Sandbox $ make_sandbox /path/to/mysql-5.1.54_linux.tar.gz # it should work alwaysTuesday, April 17, 12 16
  24. 24. The easier way Prepare once Install many times # some $ make_sandbox 5.1.54 # preliminary # workTuesday, April 17, 12 17
  25. 25. The easiest way Prepare once Install many times # some # preliminary $ sb 5.1.54 # workTuesday, April 17, 12 18
  26. 26. MySQL Sandbox VERSION MySQL server Data DB1 DB2 DB3 $SANDBOX_HOME/msb_VERSION/data VERSION /tmp/mysql_VERSION.sockTuesday, April 17, 12 19
  27. 27. MySQL Sandbox 5.1.54 MySQL server Data DB1 DB2 DB3 $SANDBOX_HOME/msb_5_1_54/data 5154 /tmp/mysql_5154.sockTuesday, April 17, 12 20
  28. 28. MySQL Sandbox 5.5.9 MySQL server Data DB1 DB2 DB3 $SANDBOX_HOME/msb_5_5_09/data 5509 /tmp/mysql_5509.sockTuesday, April 17, 12 21
  29. 29. Single Sandbox MySQL customized scripts server start stop restart status clear send_kill useTuesday, April 17, 12 22
  30. 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_allTuesday, April 17, 12 23
  31. 31. Where do you get it •from CPAN sudo su - cpan MySQL::Sandbox •from launchpad http://launchpad.net/mysql-sandboxTuesday, April 17, 12 24
  32. 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.54Tuesday, April 17, 12 25
  33. 33. default architecture $HOME /sandboxes opt expanded tarballs $SANDBOX_HOME mysql $SANDBOX_BINARY installed sandboxesTuesday, April 17, 12 26
  34. 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 node2Tuesday, April 17, 12 27
  35. 35. Tuesday, April 17, 12 28
  36. 36. creating a single sandbox make_sandbox /path/to/mysql-X.X.XX-OS.tar.gzTuesday, April 17, 12 29
  37. 37. using a single sandbox # after # make_sandbox # /path/to/mysql-X.X.XX-OS.tar.gz $ cd $SANDBOX_HOME/msb_X_X_XX $ ./useTuesday, April 17, 12 30
  38. 38. creating a single sandbox with a specific options file make_sandbox /path/to/mysql-X.X.XX-OS.tar.gz --my_file=/path/to/my.cnfTuesday, April 17, 12 31
  39. 39. easily create a sandbox after the first one The long way $ cd $HOME/opt/mysql # $SANDBOX_BINARY $ gunzip -c /path/to/mysql-5.1.34-osx10.5-x86.tar.gz | tar -xf - $ mv mysql-5.1.34-osx10.5-x86 5.1.34 $ make sandbox 5.1.34Tuesday, April 17, 12 32
  40. 40. easily create a sandbox after the first one The short way $ make_sandbox --export_binaries path/to/mysql-5.1.34-osx10.5-x86.tar.gzTuesday, April 17, 12 33
  41. 41. starting a single sandbox $ cd $SANDBOX_HOME/msb_X_X_XX $ ./startTuesday, April 17, 12 34
  42. 42. starting a single sandbox with temporary options $ cd $SANDBOX_HOME/msb_X_X_XX $ ./start --option=value $ ./restart --option=value $ ./start --key-buffer=20000000Tuesday, April 17, 12 35
  43. 43. creating a sandbox with custom port and directory $ make_sandbox 5.1.34 -- --sandbox_port=7800 --sandbox_directory=mickeymouseTuesday, April 17, 12 36
  44. 44. creating a sandbox with automatic port checking $ make_sandbox 5.1.34 -- --check_port # if 5.1.34 is free # port=5134 # directory=msb_5_1_34 # else # port=5135 (or the first free) # directory=msb_5_1_34_aTuesday, April 17, 12 37
  45. 45. create a replication sandbox $ make_replication_sandbox path/to/mysql-5.1.34-osx10.5-x86.tar.gzTuesday, April 17, 12 38
  46. 46. create a circular replication sandbox $ make_replication_sandbox --circular=4 path/to/mysql-5.1.34-osx10.5-x86.tar.gzTuesday, April 17, 12 39
  47. 47. changing port to an existing sandbox $ sbtool -o port -s /path/to/source/sandbox --new_port=XXXXTuesday, April 17, 12 40
  48. 48. installing the innodb plugin $ sbtool -o plugin --plugin=innodb -s /path/to/source/sandboxTuesday, April 17, 12 41
  49. 49. creating a replication sandbox with new base port $ make_replication_sandbox --replication_directory=newwdir --check_base_port 5.0.79 # Creates a replication directory under # $SANDBOX_HOME/newdir # The previous one is preserved. # No conflicts happenTuesday, April 17, 12 42
  50. 50. creating a stand-alone master $ make_sandbox 5.5.16 -- --master # Creates a sandbox with binary log and # server-id enabledTuesday, April 17, 12 43
  51. 51. creating a quick slave ~/sandboxes/rsandbox_5_5_16/m -e show variables like "port" +---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 19771 | +---------------+-------+ $ make_sandbox 5.5.16 -- --slaveof=master_port=19771 # adds a slave to an existing masterTuesday, April 17, 12 44
  52. 52. MySQL Sandbox cookbook $ perldoc MySQL::Sandbox::RecipesTuesday, April 17, 12 45
  53. 53. testing MySQL creativelyTuesday, April 17, 12 46
  54. 54. Breaking replication make_replication_sandbox 5.5.16 cd $HOME/sandboxes/rsandbox_5_5_16 ./m -e create table t1 (i int not null primary key) test ./s1 -e insert into t1 values (1) test ./m -e insert into t1 values (1) test ./s1 -e show slave statusG | grep Error|Running Slave_IO_Running: Yes Slave_SQL_Running: No Last_Error: Error Duplicate entry 1 for key PRIMARY on query. Default database: test. Query: insert into t1 values (1) Last_IO_Error: Last_SQL_Error: Error Duplicate entry 1 for key PRIMARY on query. Default database: test. Query: insert into t1 values (1)Tuesday, April 17, 12 47
  55. 55. Fixing replication ./s1 -e delete from t1 where i = 1 test ./s1 -e start slave ./s1 -e show slave statusG | grep Error|Running Slave_IO_Running: Yes Slave_SQL_Running: Yes Last_Error: Last_IO_Error: Last_SQL_Error:Tuesday, April 17, 12 48
  56. 56. Making a slave lag ./s1 -e stop slave SQL_THREAD ./s2 -e stop slave SQL_THREAD ./m < heavy_load_commands.sql # 1 hour later ./s1 -e start slave SQL_THREAD ./s2 -e start slave SQL_THREADTuesday, April 17, 12 49
  57. 57. Options for replication nodes --master_options = name Options passed to the master --slave_options = name Options passed to each slave --node_options = name Options passed to each node --one_slave_options = name Options passed to a specific slave with the format "N:options"Tuesday, April 17, 12 50
  58. 58. customizing sandboxes during installation (1) make_replication_sandbox --node_options=--high_performance --one_slave_options=1:-c read-only 5.1.57Tuesday, April 17, 12 51
  59. 59. customizing sandboxes during installation (2) ./use_all show variables like "%innodb%buffer%" # master Variable_name Value innodb_buffer_pool_size 536870912 innodb_log_buffer_size 52428800 # server: 1: Variable_name Value innodb_buffer_pool_size 536870912 innodb_log_buffer_size 52428800 # server: 2: Variable_name Value innodb_buffer_pool_size 536870912 innodb_log_buffer_size 52428800Tuesday, April 17, 12 52
  60. 60. customizing sandboxes during installation (3) ./use_all show variables like "%read_only%" # master Variable_name Value read_only OFF # server: 1: Variable_name Value read_only ON # server: 2: Variable_name Value read_only OFFTuesday, April 17, 12 53
  61. 61. re-playing binary logs • 1) server become unusable for human error • 2) install a new server • 3) load the latest backup • 4) create a sandbox and copy the binary logs to its data directory • 5) make the new server a slave of the sandbox • 6) wait for completion • 7) reset slave • 8) remove the sandboxTuesday, April 17, 12 54
  62. 62. Testing Percona Server make_sandbox --add_prefix=ps --export_binaries Percona-Server-5.5.21-osx10.7-.tar.gz # and later make_sandbox ps5.5.21Tuesday, April 17, 12 55
  63. 63. DEMOTuesday, April 17, 12 56
  64. 64. Participate!Tuesday, April 17, 12 57
  65. 65. THANKS http://mysqlsandbox.net 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.Tuesday, April 17, 12 58
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×