My-see-quell vs. My-ess-queue-ell

2008 MySQL Conference Videos, Notes, Slides and Photos!

All of the videos from the 2008 MySQL Conference have been processed and uploaded. Links to the videos, slides, notes, photos for each presentation are all on the mega-conference page at:
http://forge.mysql.com/wiki/MySQLConf2008Notes
This represents many hours of my own toil, but it also reflects plenty of people who have blogged, edited the wiki pages and speakers who wrote and gave tutorials and presentations. I am proud of everyone’s efforts to offer so many learning resources for free….
Enjoy! EDIT: I forgot to thank Jay, the folks at O’Reilly and all the speakers for giving me explicit permission to video and freely offer their presentations.
If you know of any video, audio, notes, slides, photos, etc that are not linked, please link them at the wiki page. If you can’t or won’t, please comment here and I will update the wiki for you.
Please note that there’s still some work to be done for a volunteer — Currently there is no one page where you can get all the videos, notes and slides for a presentation. The Forge Wiki page linked above is very close — it is missing many presentations and their corresponding slides.
O’Reilly has all of the slides speakers submitted at http://en.oreilly.com/mysql2008/public/schedule/presentations/. If someone or a few folks work on linking the slides on the O’Reilly site to the presentations on the Forge Wiki page at http://forge.mysql.com/wiki/MySQLConf2008Notes, then the Forge Wiki page will be comprehensive and folks can go to one page to get any and all information about a presentation at the conference.

MySQL Community Member of the Year Award Musings

(If you want $100, you will have to read the entire blog post. Sorry for the tease, but I did not want folks to miss out on the opportunity to win!)
By now it is no surprise that I won one of the three 2008 MySQL Community Member of the Year awards. And folks may know that I won the same award last year.
One interesting fact you may not know: during the 2006 MySQL Awards Ceremony, where Giuseppe Maxia, Roland Bouman, Markus Popp and Rasmus Lerdorf won community awards, I thought to myself,
Next year I want to be on that stage, collecting that award.
Well, I did that and then some! (note that the image below is both of the awards, side by side, with no photoshopping).

But this post is not about me. This blog post is about you. More specifically, I am going to detail in this blog post the secrets to my success. This year, I thought to myself, “how can I make it so I am not on this stage receiving this award next year?”
So here is my challenge to you. I will open source my methods, and in return I will give $100 to each 2009 MySQL Community Member of the Year (in whatever form they want, whether it’s US cash, a $100 Amazon.com gift certificate, a donation to an organization, whatever).
April 2006 - March 2007


  • 154 blog posts

  • 3 User Group/conference presentations

  • Organized 12 User Group meetings

  • Produced 2 Videos

  • Produced 11 Podcasts (started Nov. 2006)

  • 1 Grant

  • Google Summer of Code mentor– full disclosure, the $500 mentor incentive went directly to MySQL and helped pay for the new MySQL Forge servers, so my only payment was a T-shirt.

April 2007 - March 2008

Besides the above, other ideas for community involvement are:

  • Forum/list involvement

  • Volunteering for the Documentation team

  • Helping to organize user-based conferences
  • (my brain wants to call them UDC’s — “user defined conferences”).

I have only listed non-technical ways to win the award, and only what I could think of. The sky is the limit!

Video: Who is the Dick on My Site Keynote

I have already blogged about this keynote at http://www.pythian.com/blogs/948/liveblogging-who-is-the-dick-on-my-site.
If you are interested in actually seeing the video, the 286 Mb .wmv file can be downloaded at http://technocation.org/videos/original/mysqlconf2008/2008_04_17_panelDick.wmv and played through your browser by clicking the “play” link at http://tinyurl.com/55c5ps. This is not to be missed!

A Challenge to MySQL Employees

Keith Murphy wrote about the open/closed source debacle and the first comment on that post was:
Monty makes all this money from the Sun acquisition, and pretends to be a free software advocate. How much did he make? How much is he giving back to the MySQL community?
Now, Keith rightfully met this with “grow up”. However, I want to point out that many people in the MySQL employee pool benefited from the sale, not just Monty. I also want to point out that Monty devoted years of his life to developing MySQL long before it was ever profitable.
According to Sun’s press release, “Sun will pay approximately $800 million in cash in exchange for all MySQL stock and assume approximately $200 million in options. The transaction is expected to close in late Q3 or early Q4 of Sun’s fiscal 2008….. The deal is expected to be accretive to FY10 operating income on a GAAP basis.”
Now, there’s financial mumbo-jumbo in there, but basically what that means is in all likelihood, Monty actually has not received any real money yet. And with 20% of the sale being in options (not stock, just options, which means that there is the option to buy stock, so there’s nothing free there), that’s even less cold hard cash floating around.
But I present a challenge to MySQL employees who have derived tangible benefits from the sale to Sun: what percentage have you put back into the MySQL community, and how?
(and thinking outside the box is OK — time is money, so I am OK with you directly translating the number of hours you’ve worked on community projects into $$ given your approximate hourly salary).
For instance, Brian Aker’s list of software is impressive, and of the 28 projects explicitly listed (see “Project list” on the right-hand side, and I’d bet there’s more in the actual repository) I’d guess fewer than 5 were done on time paid for by anyone (much less MySQL/Sun).
I know that Giuseppe Maxia’s mysql sandbox is a project he works on during non-MySQL/Sun time.
But I’d love to see comments on what folks are doing, even without percentages of money and such, because I am willing to wager that most of the folks who work for MySQL give plenty back to the community on non-company time. My theory is based on the fact that most MySQLers that I’ve met do not see working at MySQL as “their job”, they see it as “I get paid to do what I love doing, and would do anyway.”

EXPLAIN Cheatsheet

At the 2008 MySQL Conference and Expo, The Pythian Group gave away EXPLAIN cheatsheets. They were very nice, printed in full color and laminated to ensure you can spill your coffee* on it and it will survive.
For those not at the conference, or those that want to make more, the file is downloadable as a 136Kb PDF at explain-diagram.pdf
* or tea, for those of us in the civilized world.

The Ingres Vultures Descend

In a despicable business practice, I received a message from a PR Firm representing Ingres. Now, I even wrote about the controversy that seems to have swept the open source community; but even my writings were not completely factually correct — I wrote that even if online backups were closed it was not necessarily the worst thing in the world. The actual parts of the online backup that are not open source and free are compression and encryption — that is all.
So really, we are talking about a very small part of backup. The last I saw most people used their own compressing (ie, | gzip -c) and encryption for backups. And honestly, I would rather use tried and true compression and encryption than something new that MySQL comes up with, so I do not even see most people wanting compression nor encryption.
But that’s besides the point. If Ingres thinks they can win customers over by swooping in when a controversy is happening, they are way more evil than I would ever have guessed. It’s not good business practice to do this kind of thing — it is cold, calculated, uncalled for, and just plain wrong.
As for my comments — firstly, MySQL did not make any particular “announcement”, and secondly, MySQL is already losing “feedback and contributions on its products from a large group of users in the community” because it does not have an easy way to get community patches committed to the source tree.
There is so much else that bothered me about the e-mail I received, so I will just copy it here for full context for readers:

Subject: Ingres' Thoughts on Today's MySQL Announcement and What it Means for the Open Source Community

From: Lindsey Pappas

Date: Apr 15, 2008 5:33 PM

Hi Sheeri,

Did you see MySQL ’s announcement on new features in MySQL Enterprise version of its product? This is interesting news for the open source community, as it appears that MySQL is moving away from true open source towards a proprietary model by not providing the same features in its community version. Ingres is a a leading provider of open source database management software and support services and views the news as the loss of a true competitor in the open source space. By doing this, MySQL will lose feedback and contributions on its products from a large group of users in the community. Costs will go up and quality will go down.

Ingres is a believer in the true open source of its products. I can put you in touch with an executive at Ingres to hear thoughts on the news and what MySQL’s announcement means for the future of the open source community, including comment on:

· The benefits of open source solutions that are identical between community and enterprise, functionality should not differ between products, cost or version.

· The importance of an online backup component for mission critical applications.

· In a community where everyone benefits from the valuable contributions and feedback on new developments and innovations from other players, MySQL’s move away from open source is a loss for the open source community.

Please let me know if you’d like to connect in the next day or so to discuss MySQL’s announcement and where the open source community is headed.

Thanks,

Lindsey

Lindsey Pappas
Atomic Public Relations
8 California Street
San Francisco, CA 94111
(415) 402-0230
lindsey@atomicpr.com

Liveblogging: 10,000 Tables Can’t Be Wrong

10,000 Tables Can’t Be Wrong: Designing a Highly Scalable MySQL Architecture for Write-intensive Applications by Richard Chart
Chose MySQL for performance and stability, and less important but still there, experience and support. Support is becoming increasingly more and more important.
Starting point: 1 appliance supporting 200 devices
Problem/Goal: Extensible architecture with deep host and app monitoring, over 1000 devices with 100 mgmt points each
Distributed collection over a WAN, with latency and security concerns
Current reality: several times the scale of the original goal
Commercial embedded product, so they actually pay for the embedded MySQL server
Future: The fundamentals are sound: next generation of the product moves up another order of magnitude
Data Characteristics
>90% writes
ACID not important
Resilient to loss, because gaps in data do not invalidate the rest of the data
Data elements by themselves are valuable, but much more so when relationships are added.
Chose MyISAM because: (more…)

Database Security Using White-Hat Google Hacking

Here are the slides and links I am using for the “Database Security Using White-Hat Google Hacking” at the 2008 MySQL Users Conference and Expo.
pdf slides
Where to Start:
http://johnny.ihackstuff.com/ghdb.php
i-hacked.com/content/view/23/42
for the impatient
Google’s Terms of Service
Google Operators
More Googlehacks to run:
Page 35 of http://www.sdissa.org/downloads/San%20Diego%20ISSA%20Google%20Hacking%20and%20Beyond%20May%202006-rhd.pdf
http://pauldotcom.com/wiki/index.php/Episode81#Tech_Segment:_Google_Queries_To_Run_Against_Your_Own_Domain
http://ferruh.mavituna.com/makale/sql-injection-cheatsheet/
Goolag
Google Hacks sofware
Google Hacks Honey Pot
www.robotstxt.org
Wikto
Nikto

# sqlmap, absinthe, bsqlbf 1.1, SQLBrute, sqlget, SQLiX, SQL Power Injector, Priamos: schema mappers/data grabbers using automated [some blind] SQL injection
# pixy: detection of SQL injection and XSS vulnerabilities in PHP source code
# Wapiti, w3af: Black-box testing for web applications
# SPIKE Proxy (http and https), Wfuzz, Sandcat, XSS Shell, Odysseus: for white-hat hacking
# FG-Injector Framework, BobCat, JBroFuzz: find SQL injection vulnerabilities
-->

Liveblogging: A Match Made in Heaven? The Social Graph and the Database

Jeff Rothschild of Facebook’s “A Match Made in Heaven? The Social Graph and the Database”
Taking a look at the social graph and what it means for the database.
The social graph:

  • At it’s heart it’s about people and their connections.
  • Learning about people who are in your world.
  • Can be a powerful tool for accelerating the use of an application.

“The social graph has transformed a seemingly simple application such as photos into something tremendously more powerful.” We’re interested about what people are saying about us, and about our friends. Social applications are compelling.
Facebook users blew through the estimate for 6 months of storage in 6 weeks. It is serving 250,000 photos per second at peak time, not including profiles. Facebook serves more photos than even the photo sites out there, and serves more event invitations than any other website out there.
E-mail invitations are an example of the power of the social graph. If you get a newsfeed or an invitation that tells you 12 friends are attending an event, you have more information, and then can have a better decision on whether or not you want to go. (more…)

Liveblogging: Who is the Dick on My Site?

Identity 2.0: A world that’s simple, safe and secure.
Who is the Dick on My Site? by Dick Hardt (Sxip Identity Corporation)
Quotes:
“Really, data is about people. It’s really identity data.”
“Identity helps you predict behavior.”
“Identity is who you are.”
“Identity is also what you like.”
“Identity enables you to uniquely identify somebody.”
“There are things that other people say about you, too.”
“Modern identity is about photo IDs so you can prove your identity.”
“Identity is a complicated issue….Everyone has a different idea of what it is.”
Identity transactions are:

  • party identification (who)
  • authorization (permission)
  • profile exchange (info about that person)
  • NOT record matching

Identity transactions can be: (more…)

Panel Video: Scaling MySQL — Up or Out?

Yesterday’s keynote panel on “Scaling MySQL — Up or Out?”
Directly download the 310MB wmv file (not if you are on the conference wireless please!), or watch it in your browser via streaming — simply click the “play” link on this page.
Keith Murphy managed to take painstaking notes with all the facts and figures. As well, Venu Anuganti presents a chart with the results as well as notes on the more detailed answers. Ronald Bradford has a brief summary of the 20 seconds of wisdom from each panelist.

Liveblogging: Extending MySQL by Brian “Krow” Aker

Liveblogging: Extending MySQL by Brian “Krow” Aker
Brian wins the award for “most frequent great quotes during a talk”.
Before MySQL 5.1 a UDF was the only way to extend MySQL.
All you need in a UDF is: init() execute() deinit()

my_bool id3_parse_init(UDF_INIT *initid UDF_ARGS *args, char *message)

UDF_ARGS tell you about incoming args
char *message is the output that might return
args->arg_count is the # of args
WARNING: use STRICT mode in MySQL, otherwise there are tons of silent failures.
“When you work on databases you start to put everything in databases. Tip, don’t put a DVD into a database, because really long BLOBs aren’t actually supported….”
In MySQL 5.1, you can now install plugins (example is memcache_servers plugin):
mysql> INSTALL PLUGIN memcache_servers SONAME 'libmemcache_engine.so'
In the plugin architecture, there’s a callback mechanism to call a structure and then the structure is self-hosted into the environment. mysql_declare_plugin() is usually found at the bottom of the file because that’s how Brian wrote the example….
A storage engine is really about connecting to anything.
MySQL has a parser, and optimizer, and a retrieve/store part, which talks to the storage engines. The engine interface is written in C++.
Quote about the BLACKHOLE storage engine: “It’s amazing how much money can be made out of something that does NOTHING.”
What about defining features?
tables_flags()
index_flags()
handlerton flags
Table object methods:
base_ext()
create()
delete_table()
rename_table()
optimize(), repair(), etc.
As you can see, the API is pretty specific to actions that are happening at the SQL layer.
Reads
rnd_init() — scan is about to begin
rnd_next() — get the next record
(rnd = random or read next data)
index_first() — index read is about to begin
index_next() — get the next record in the index
Writes:
write_row() — “here’s new data, please store this”.
delete_row()
update_row()
on delete or update, MySQL starts reading the rows and once the predicate matches, then the delete_row() or update_row() is called. update_row() will be passed the before and after image of the row.
What about information_schema?
The information_schema API is an easy way to get more information into the information_schema tables.
(there’s a really nice example of an information_schema plugin)
A quote about his code — “That in the middle there looks like a bug….but it’s never called, so that’s OK. That’s what I get for copying and pasting my own examples.”
The plugin is responsible for all the locking.
Daemon plugins created because otherwise people would “bastardize the storage engine plugins.”
A daemon plugin has full access to the server internals, and it is a simple interface to be able to extend.
“If you’re really going to shoot yourself in the foot, you really want to go full blast.”
UDP Daemon just allows UDP packets to be put into the db (instead of TCP/IP with its darn authentication schema). Simplest interface to MySQL that exists. No connector, just UDP. The point is you can put other listeners to MySQL, such as an HTTP listener.
Daemon plugins are also a way to
code for examples
skeleton engine

MySQL Charging for Features? ZOMG!

In 3 words:
They already do.
MySQL Enterprise is more than just a binary. http://mysql.com/products/enterprise/ has the details on the other features MySQL Enterprise includes.
One of these features is the MySQL Enterprise Monitor, which is closed source, proprietary alerting software.
So when bloggers make statements such as:
MySQL will start offering some features (specifically ones related to online backups) only in MySQL Enterprise. This represents a substantive change to their development model — previously they have been developing features in both MySQL Community and MySQL Enterprise. However, with a shift to offering some features only in MySQL Enterprise, this means a shift to development of those features occurring (and thus code being tested) only in MySQL Enterprise.
source
All they are doing is showing their lack of knowledge about what MySQL Enterprise really is. Complaining that MySQL will likely charge for online backups is a valid one, but currently InnoDB Hot Backup is for sale only. There are solutions out there that do not cost anything, but nothing that MySQL produces. The only free [mostly] online backup product is mysqlhotcopy, and that has limitations such as “for MyISAM tables only”.
While I have said that software should be open source and free, where “free” means “free as in water”, that does not mean that we should take it for granted that free software will always be there. The path to that is to have a contrast of software one pays for, and software one does not.
Of course, that is not why MySQL charges for the software. They charge for some of their products because without money, they cease to exist, and then even the free version stops being developed on.
“A necessary evil” is a dangerous phrase, and can lead to a slippery slope….but in this case, I do not envision that it is a big problem. Maybe I will regret saying this if things keep getting more and more closed, but I do not believe so.
And I, too, am frustrated that we have been told that “online backups are coming” only to find out that they may not come in the means I expected. However, software is not bug-free, often does not come out on time (MySQL 5.1 itself is a year late!), and sometimes, promises get broken.
My faith in MySQL is unbroken, and I hope most others reading this feel this way as well.

Liveblogging: Architecture of Maria By Monty Widenius

Architecture of Maria: A New Storage Engine with a Transactional Design
Goals of Maria:


  • ACID compliant
  • MVCC, transactional
  • default non-transactional and default transactional storage engine for MySQL
  • MyISAM replacement, including temporary table use
  • Storage engine good for data warehousing.
  • Allow any length transactions to take place
  • all indexes should have equal speed (clustered indexes are not in the plan)
  • log shipping — incremental backups just by copying the logs
  • used as a standalone library
  • fast count(*)
  • allow copying of Maria tables between different Maria servers
  • Better blob handling (than MyISAM) — no memory copying, or extra memory used for blobs on INSERT/UPDATE
  • BLOBs are allocated in big sequential blocks means that there is less fragmentation over time.
  • BLOBs are stored so Maria can be easily extended to have access to any part of a BLOB with a single fetch in the future


Maria is actually faster than MyISAM.
Will support READ COMMITTED and REPEATABLE READ (was a specific question).
“You should be able to upgrade Maria and have it just work, without ever having to backup and restore as part of the upgrade.”
Why do we need 2 storage engines, Maria and Falcon?
More storage engines = more scenarios to be able to handle. Falcon good for lots of memory, and shorter queries, Maria is to take care of long transactions and data warehousing side, and also to be an overall “good” engine for most purposes (at least as good as InnoDB).
Project plan — MySQL 5.1 and higher. Maria strives to be bug-free.
Maria 1.0 = “crash safe”, released in Jan 2008. Cacheable row format.
Maria 1.5 = “concurrent insert/select”, Apr/May 2008. Will be merged into the MySQL 6.0 release. Non-transactional.
Supports:

  • External/internal row CHECK/REPAIR/compressing
  • Different row formats — fixed size, dynamic length, compressed, page
  • Fast checksum of a table
  • maria_check

MySQL 6.0 (includes Maria)
Maria 2.0 = “Transactional and ACID” alpha, Q4 2008
Maria 3.0 = “High concurrency + Online backup” alpha, Q1 2009; GA, Q2 2009
Advantages of Maria compared to MyISAM
  • Data, index and statistics are crash safe. On crash, everything will rollback to the state of the start of the statement or last LOCK TABLES commands.
  • Can replay everything from the log. Still need to backup the .frm files though.
  • LOAD INDEX can skip index blocks for unwanted indexes
  • most parts of Maria have unit tests.
  • Supports all MyISAM formats and a new PAGE format, where data is stored in pages — this is:

    • Only crashsafe, transactional row format for Maria
    • Versioned, so you can have concurrent insert/select
    • Cached by page cache so will give noticeable speed improvement on systems with poor data caching

  • MyISAM is non-transactional only, Maria can support transactional (crash-safe) and non-transactional formats
  • Maria uses big log files by default — 1G
  • Log control file = maria_log_control
  • Log files = maria_log.?????
  • If a log file is already in use by a transaction, create a new one, otherwise, reuse it. SHOW LOGS will show which logfiles exist, which ones are in use, and you can PURGE the logs.
  • Maria uses 8K pages by default (MyISAM uses 1K pages by default. This should be faster on static size indexes but slower on variable length keys, until Maria 2.0 where there will be a directory for index pages.

Before Apr/May release of Maria 1.5
  • Statistics and indexes versioned (data is already versioned)
  • FULLTEXT (boolean mode) and R-TREE indexes need to be made crash-safe
  • Parallel recovery

Disadvantages, not likely to be fixed
  • No external locking
  • One page size for both index and data
  • only one page cache
  • index number and checksums require an extra 5 bytes per page
  • doesn’t support RAID
  • Minimum data file size for BLOCK format is 16K, with 8K pages
  • Storage of rows < 25 bytes are not efficient for the PAGE format


XDB indexes — group records, and get the min and max for each group (groups are not sorted), and save that in a separate block. This means that stats like min and max are very fast. This is something that will help data warehousing queries.
Resources:

Best quote from Monty: “You don’t steal ideas in open source. You respect people.”

MySQL Sandbox: Easily Using Multiple Database Servers in Isolation by Giuseppe Maxia

Here are my liveblogging notes from MySQL Sandbox: Easily Using Multiple Database Servers in Isolation by Giuseppe Maxia
Giuseppe has been a community member since 2001, and in the past year or so, a MySQL Employee.
He likes to give things away for free — he gave away T-shirts to the early arrivers to the workshop, and that’s why he’s giving away the sandbox as well. The sandbox is NOT an official MySQL product. It is released from GPL, available from http://sf.net/projects/mysql-sandbox.
Why the sandbox? To be able to set up 1 server in under 10 seconds. And to be able to set up multiple MySQL instances very quickly, and to use them quickly.
The sandbox untars in seconds, for installing alternative servers, not main instance, it creates a separated environment (datadir, port, sockets) — for groups of related or unrelated servers. Really good for testing out new server versions. WARNING: If you do not use separated environment (separate datadirs, ports and sockets), you can corrupt your data.
Doing it manually (the old, hard way):
unpack tarball, move to separate directory, create db tables, create .cnf with port, socket, datadir, launch mysqld_safe manually, launch mysql commandline script with options.
OK for doing it once, but a good DBA will automate this if they’re doing this a lot, to avoid mistakes — for example, while doing QA to test several versions.
So the easy automated way — MySQL Sandbox!
Just provide the version # and it creates $HOME/VER/data, VER, /tmp/mysql_VER.sock
Two examples:

Version 5.1.24
datadir = $HOME/5_1_24/data
port 5124
socket = /tmp/mysql_5124.sock

Version 6.0.5
$HOME/6_0_5/data
port 6005
socket = /tmp/mysql_6005.sock

(NOTE: you can have multiple instances of the same version)
Once installed:
In the case of a single sandbox — commands are start, stop and clear (removes all data and files in the datadir except for the mysql system db and tables), and use (instead of typing mysql -S /path/to/socket -u user -p you can use the use shell command and it will read what it needs from the my_sandbox.cnf file).
In the case of multiple sandbox, you can use the same commands as with a single instance, but there are commands that can affect all the instances. These are start_all, stop_all, clear_all, and multi_cmd. The first three have the obvious results; multi_cmd command executes command for all nodes — so you do not have to call it on each node. For example:
multi_cmd "select * from test.t1"
The easy way to install — download the package from Sourceforge. The sandbox doesn’t contain MySQL build, so you have to download a tarball or compile one yourself.
To install a single instance of MySQL 5.1.23:
express_install.pl /path/mysql-OS-5.1.23.tar.gz
Instead of using express_install.pl, to install 1 master and 2 slaves, run:
set_replication.pl /path/mysql-OS-5.1.23.tar.gz
To install multiple servers of the same version at the same time:
set_many.pl /path/mysql-OS-5.1.23.tar.gz
This installs 3 instances by default, but you can specify how many you want with options to set_many.pl.
For multiple servers of different versions, either:
Download the tarballs and run set_custom_many.pl /path/to/mysql-OS-5.0.51.tar.gz /path/to/mysql-OS-5.1.23.tar.gz /path/to/mysql-OS-6.0.5.tar.gz.
or:
Expand the tarballs in $HOME/opt/mysql and run set_custom_many.pl 5.0.51 5.1.23 6.0.5
Fine tuning - express_install.pl /path/mysql-OS-5.1.23.tar.gz [option]… can customize port, datadir, enable federated tables, disable innodb, skip networking, and so on.
You can pick your default my.cnf “size” with the my_file option:
express_install.pl /path/mysql-OS-5.1.23.tar.gz --my_file=small
express_install.pl /path/mysql-OS-5.1.23.tar.gz --my_file=medium
express_install.pl /path/mysql-OS-5.1.23.tar.gz --my_file=large
express_install.pl /path/mysql-OS-5.1.23.tar.gz --my_file=huge
These will use the my_small.cnf, my_medium.cnf, my_large.cnf or my_huge.cnf sample config files bundled with MySQL.
To easily fine tune the 50+ options in the sandbox, you can run
express_install.pl /path/mysql-OS-5.1.23.tar.gz --interactive
to ask you the values for each value — if you want to skip the rest of the questions while you are in the interactive mode and continue the install using default values for the rest of the questions, you can type “default” at any prompt. You can also enter “back” at any prompt to go back to the previous question; or enter “quit” at any prompt to quit the interactive server without completing the sandbox installation.
The use shell command starts the mysql client, using the credentials in my_sandbox.cnf. By the way, the default username/password = msandbox/msandbox, default root password = msandbox
There are shortcuts for using mysqldump, mysqlbinlog and mysqladmin for each instance in a sandbox. These shortcuts start the mysql client using the credentials in my_sandbox.cnf.
my sqldump
my sqlbinlog
my sqladmin
Using a multi-instance sandbox
start_all starts the master, then slaves. stop_all stops the slaves and then the master. clear_all clears all the slaves and then the master.
multi_cmd was already mentioned to run the same command on all the instances. However, there are different commands to run a command on a single instance of a multi-instance sandbox. Instead of the use command, the shell commands to use the multiple instances are:
Replication sandbox
m to use the master
s1 to use the first slave
s2 to use the second slave
Multi-node sandbox
n1 to use the first node
n2 to use the second node
n3 to use the third node