Thursday, January 31, 2008

Screenshot Thumbnails with WebSnapr - Generate a thumbnail

WebSnapr lets you capture screenshots of (almost) any web page. Let your visitors to instantly visualize any web page before clicking. Increase site traffic, click-through rate and site stickiness.

read more | digg story

Reading Ad Hoc Text Files with OpenDataSource (SQL Server Central)

Reading Ad Hoc Text Files with OpenDataSource (SQL Server Central)

mencoder1 -noodml -ovc copy -oac mp3lame -lameopts abr:br=96 -af volnorm=2 -o "

rg443 mencoder1 -noodml -ovc copy -oac mp3lame -lameopts abr:br=96 -af volnorm=2 -o "

Wednesday, January 30, 2008

Screenshot Thumbnails with WebSnapr - Generate a thumbnail

WebSnapr lets you capture screenshots of (almost) any web page. Let your visitors to instantly visualize any web page before clicking. Increase site traffic, click-through rate and site stickiness.

read more | digg story

Monday, January 28, 2008

5 essential reasons for BGP in your IP network

BGP is considered the hardest routing protocol to design, configure and maintain, but there are 5 major reasons you need all of that difficulty in your network.

read more | digg story

Reclaiming unused space from a SQL Server table

Did you know that Microsoft SQL Server doesn't automatically reuse space from variable length columns that have been dropped from a table? This blog shows you how to reclaim that space using the DBCC CLEANTABLE command.

read more | digg story

Saturday, January 26, 2008

5 essential reasons for BGP in your IP network

BGP is considered the hardest routing protocol to design, configure and maintain, but there are 5 major reasons you need all of that difficulty in your network.

read more | digg story

RAID Scaling Charts, Part 3: 4-128 kB Stripes Compared

In the first two parts of this series, we looked at setups running RAID 0, 1, 0+1, 5 and 6, with three to eight hard drives. In this final article, we analyze performance comparisons at different stripe sizes on RAID levels 0, 5 and 6.

read more | digg story

100 Portable Apps for your USB Stick (both for Mac and Win)

This stuff can be installed on any portable drive, i.e. USB thumbdrive, PDA or an iPod. You can use them at work, school, or any other place where you can plugin your device. Check them out, you can either scroll-down for relevant category, i.e office software, email tools, messengers, games, etc.

read more | digg story

How to Turn Your Gmail into Awesome Storage Tool

amazing tool that helps turn your gmail into an online hard drive.

read more | digg story

Application Locks (or Mutexes) in SQL Server 2005

Application locks aren't a well known area of locking in SQL Server, but they can be very useful for special scenarios. They work in a analogous way to the lock() construct in .Net and are basicaly user defined mutexes in SQL Server.

read more | digg story

Thursday, January 24, 2008

Fix a BGP AS number mismatch

 

Sometimes you end up having wrong BGP AS number throughout your network. It could be a result of an unexpected merger or split or you could have started using a private BGP AS number and realized you have to connect to the Internet using a real AS number. The proper solution would be a total reconfiguration of the whole network, but of course not many engineers have the time and courage to do it ;), so it's time to introduce another kludge: the neighbor local-as configuration command.For example, let's assume your AS number should be 20, but you're using a private AS 65001, as shown in the following figure:To retain the AS 65001 internally but appear as AS 20 to the outside world, you could use the following configuration on R1:

router bgp 
65001
neighbor 10.0.0.18 remote-as 65001
neighbor 10.0.0.18
description IBGP to R2
neighbor 10.1.0.2 remote-as 10
neighbor
10.1.0.2 local-as 20
neighbor 10.1.0.2 description EBGP to AS
10
This configuration would ensure that the EBGP session with AS 10 is established (R1 pretends that it belongs to AS 20 on this session), but the AS path propagated to AS 30 is somewhat odd …
AS30#show ip bgp | include 20
*>
172.16.0.0 10.1.0.5 0 20 65001 20 10
i
… making your network appear as a set of nested autonomous systems:There are two reasons for the weird AS path:

  • R1 inserts local-as into inbound EBGP updates
  • R2 (configured like R1) inserts local-as as well as its real AS (65001) in outbound EBGRP update
To fix the AS path, you need the BGP Support for Dual AS Configuration introduced in IOS release 12.3T. This feature adds two options to the local-as configuration command:

  • no-prepend disables local-as prepending on incoming EBGP updates;
  • replace-as replaces router's own AS with local-as on outgoing EBGP updates.
When the configuration on R1 and R2 includes these two keywords …:
router bgp 65001
neighbor 10.1.0.2 remote-as 10

neighbor 10.1.0.2 local-as 20 no-prepend replace-as
neighbor 10.1.0.2
description EBGP to AS 10
… the path propagated through AS 65001/AS 20 looks as expected:
AS30#show ip bgp | include 
20

*> 172.16.0.0 10.1.0.5 0 20 10
i

Posted to Cisco IOS Hints and Tricks by IvanPepelnjak
©Copyright Ivan Pepelnjak

Setup DNS server in your lab

 

If you do a lot of telnetting in your lab, you could set up an internal DNS server to be able to use router names instead of IP addresses.

Select a router that will act as the DNS server and configure it on all other routers in your lab. For example, if your DNS server has IP address 10.0.0.1, use the following configuration commands:

ip domain-lookup
ip name-server
10.0.0.1

On the DNS server, disable DNS lookup and DNS forwarding (it has nowhere else to go) and define all the routers as IP host names:

no ip domain lookup
!
ip dns view
default
no dns forwarding
!
ip dns server
!
ip host Core-1
10.0.0.1
ip host Core-2 10.0.0.2
ip host POP 192.168.2.1
ip host
Ext 192.168.1.5
ip name-server 10.0.0.1

If you also define IP addresses for the WAN links, for example:

ip host 
serial-1-0.X1 10.0.1.6
ip host serial-1-0.Core-1 10.0.1.1
… you'll get correct hop-by-hop information from the traceroute command:
POP#trace Ext
Translating
"Ext"...domain server (10.0.0.1) [OK]
Type escape sequence to
abort.
Tracing the route to Ext (192.168.1.5)
1 serial-1-0.Core-1
(10.0.1.1) 36 msec 24 msec 16 msec
2 serial-1-0.X1 (10.0.1.6) 24 msec
28 msec 4 msec
3 Ext (192.168.1.5) 20 msec * 24 msec

Posted to Cisco IOS Hints and Tricks by IvanPepelnjak
©Copyright Ivan Pepelnjak

Restart IOS DHCP server after a change in DHCP pools

 

I've stumbled across an interesting problem recently:

  • I've added a Linux box to my home network;
  • It used my Cisco router to get a dynamic DHCP address;
  • I've inspected the DHCP bindings on the Cisco router to find the new MAC address and configured a host DHCP pool as I'm using the Linux box as a server;
  • Even after multiple configuration changes, the IOS would fail to use the host DHCP pool.

The only solution I've found was to restart the IOS DHCP server with the no service dhcp followed by service dhcp configuration commands. Obviously, you lose all DHCP bindings when you restart the DHCP server (which could be a problem if you use conflict logging) unless you've configured the router to store them in an external file.

Posted to Cisco IOS Hints and Tricks by IvanPepelnjak
©Copyright Ivan Pepelnjak

E1 and E2 routes in OSPF

 

Occasionally I stumble across information on the Internet that's slightly misleading since it doesn't tell the whole story. For example, this post about OSPF external routes should tell you more about the OSPF route selection process. Just in case you haven't been deeply involved in it yet, here are the rules:

Posted to Cisco IOS Hints and Tricks by IvanPepelnjak
©Copyright Ivan Pepelnjak

BGP Essentials: Configuring Internal BGP Sessions

 

Internal BGP (IBGP) sessions (BGP sessions within your autonomous system) are identified by the neighbor’s AS number being identical to your AS number. While the external BGP (EBGP) sessions are usually established between directly-connected routers, IBGP sessions are expected to be configured across the network.
The current best practice is to configure IBGP sessions between the loopback interfaces of the BGP neighbors, ensuring that the TCP session between them (and the BGP adjacency using the TCP session) will not be disrupted after a physical link failure as long as there is an alternate path toward the adjacent router.
To configure IBGP session on a Cisco router, specify the neighbor’s loopback address in all neighbor commands and use the neighbor update-source command to specify the source IP address of the TCP session. Without the neighbor update-source configuration command, the TCP session will use the IP address of the outgoing physical interface and the neighbor will reject the incoming TCP SYN packet as it’s not coming from a recognized BGP neighbor.
The following table shows the configuration commands necessary to configure an IBGP session between loopback interfaces of two routers:

AS 11
AS 12

interface Loopback 0
ip address 10.0.0.1
!
router bgp 65001
neighbor 10.0.0.2 remote-as 65001
neighbor 10.0.0.2 update-source loopback 0
interface Loopback 0
ip address 10.0.0.2
!
router bgp 65001
neighbor 10.0.0.1 remote-as 65001
neighbor 10.0.0.1 update-source loopback 0

If you're looking for more in-depth BGP knowledge, try our Configuring BGP on Cisco Routers e-learning solution. If you just need to enhance your hands-on skill, the BGP Remote Lab Bundle is the perfect choice.

Posted to Cisco IOS Hints and Tricks by IvanPepelnjak
©Copyright Ivan Pepelnjak

BGP Essentials: Advertising public IP prefixes into the Internet

 

The routing information you source into the public Internet with BGP should be as accurate and stable as possible. The best way to achieve this goal is to statically configure the IP prefixes you’ve been allocated on your core routers and advertise them into BGP:

  • BGP will only advertise an IP prefix if a matching entry is found in the IP routing table. To ensure the IP prefix you want to advertise is always present, configure an IP static route to null interface.
  • Most public IP prefixes advertised today do not fall on the classful network boundary. To advertise a classless prefix, you have to configure the prefix and the mask in the BGP routing process.

Important: You should advertise your IP prefixes from your core routers, not from the edges of your network. If an edge router loses its upstream link to the network core but still advertises your IP address space, all the traffic attracted by it will be blackholed.

You can set additional BGP attributes on the IP prefix you’re advertising with a route-map attached to the network statement. For example, the following configuration could be used on one of your core routers to advertise IP prefix 172.16.128.0/18 and attach a BGP community to it:

ip route 172.16.128.0 
255.255.192.0 Null0
!
router bgp 65001
network 172.16.128.0 mask
255.255.192.0 route-map SetCommunity
!
route-map SetCommunity permit
10
set community 65001:101 additive

If you're looking for more in-depth BGP knowledge, try our Configuring BGP on Cisco Routers e-learning solution. If you just need to enhance your hands-on skill, the BGP Remote Lab Bundle is the perfect choice.

Posted to Cisco IOS Hints and Tricks by IvanPepelnjak
©Copyright Ivan Pepelnjak

OSPF default route based on IP SLA

 

Olivier Guillemain has asked an interesting question: “how could I originate a default route into OSPF based on IP SLA (for example, based on pinging a remote IP address)?

This is very easy to do when the router originating the default route into OSPF needs an SLA-based default route itself:

  1. Configure IP SLA and a corresponding track object;
  2. Configure a default route using reliable static routing
  3. Advertise the default route into OSPF with the default-information originate router configuration command

The solution is a bit more complex when the router originating the default route into OSPF should not have a default route. In this case, you could use a routing trick:

  1. Configure IP SLA and a corresponding track object as before;
  2. Use reliable static routing to configure a static host route for a bogus IP address (for example, 10.0.0.1/32) pointing to null0 (for example, ip route 10.0.0.1 255.255.255.255 null 0 track 100). Obviously this host route should not be redistributed into any routing protocol.
  3. Conditionally advertise default route into OSPF based on presence of the static host route.

Note: This article is part of You've asked for it series.

Posted to Cisco IOS Hints and Tricks by IvanPepelnjak
©Copyright Ivan Pepelnjak

SQLite table to read Atom feeds

SQLite table to read Atom feeds
available at http://www.kindahl.net/pub/sqlite-feedme-0.01.tar.gz.

After building and installing, the table can be created as simple as this:

mats@romeo:~/proj/feedme$ sqlite3
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> .load libfeedme.so
sqlite> create virtual table onlamp
...> using feedme('http://www.oreillynet.com/pub/feed/8');
sqlite> select title from onlamp;
PyMOTW: weakref
What the Perl 6 and Parrot Hackers Did on their Christmas Vacation
Least Appropriate Uses of Perl You've Seen
YAP6 Operator: Filetests?
WILFZ (What I Learned From Zope): Buildout
TPT(Tiny Python Tip): Watch Jeff Rush's Videos
PyCon 2008 Talks and Tutorials Finalized
TPT(Tiny Python Tip): Python for Bash Scripters
What the X-Files Taught Us about Real Aliens
Python Web Framework Comparison: Documentation and Marketing
Python Web Framework Comparison: Documentation and Marketing
PyMOTW: mmap
Improving Test Performance
YAP6 Operator: Reduce Operators - Part II
WSGI: Python Web Development's Howard Roark

Note that it is still a prototype. My plans are to at least:
Read the entire feed into memory and parse it from there instead of writing the feed to disk before parsing it. Reading it to disk was the default for cURL, so I just stuck to that for the prototype (yeah, yeah. I know I'm lazy.)
Allow the feed format to automatically be detected and set the parser accordingly. Right now, it can just handle Atom feeds, and does not do a great job at that either.
Figure out a way to present multiple entries data in a useful way. For example, an entry can hold several links, but which one is really the interesting one?

Monday, January 21, 2008

GNS3: Graphical Network Simulator

GNS3 is a graphical network simulator that allows you to design complex network topologies and to launch simulations on them.

read more | digg story

Saturday, January 19, 2008

Generating charts from accessible data tables and vice versa using the Google Charts API

Generating charts from accessible data tables and vice versa using the Google Charts API
This is why I wrote a small script that converts data tables to charts using the API and a wee bit of JavaScript.
Check out the demo page and download the script with the demo page and CSS to have a go with it yourself. Of course, all is licensed creative commons, so go nuts.

Google Chart GUI : Chart Generator

This is a GUI for the recently released Google Chart API

read more | digg story

How to find missing values in a sequence with SQL

How to find missing values in a sequence with SQL at Xaprb

InformIT - Cisco Articles

InformIT - Cisco Articles

MySQL -Articles about MySQL

Articles about MySQL (MySQL DevZone)

MySQL 5.1 partitions in practice (2007.12.19)by Giuseppe MaxiaThis article explains how to test the performance of a large database with MySQL 5.1, showing the advantages of using partitions. The test database uses data published by the US Bureau of Transportation Statistics. Currently, the data consists of ~ 113 million records (7.5 GB data + 5.2 GB index).
Using XML in MySQL 5.1 and 6.0 (2007.12.13)by Jon StephensIn this article, we discuss the XML functionality available in MySQL, with an emphasis on new features coming online in MySQL 5.1 and MySQL 6.0. We assume that you already have a working knowledge of XML, and that you know what the terms “valid” and “well-formed” mean. We also assume that you have some knowledge of XPath.
MySQL Failover Strategy using State Management, introducing MPP - Part 3 (2007.12.12)by Russell E GlaueIn part 2 we discussed the internals of MPP and how MPP can be used with LVS to create a failover strategy. In this part 3 we will discuss how to configure and operate MPP, and additionally use MPP with MySQL Proxy to create a failover strategy.
Developing MySQL Applications with Eclipse CDT (2007.11.26)by Mark SchoonoverIn September, the Developer Zone featured Chapter 6 of Paul DuBois' MySQL, 3rd edition on Writing C Programs with the MySQL C API. This month, we continue in this series on developing MySQL applications in C with a tutorial from Mark Schoonover about using the Eclipse CDT (C Development Toolkit) as an IDE for developing C applications for MySQL.
MySQL Failover Strategy using State Management, introducing MPP - Part 2 (2007.11.10)by Russell E GlaueIn Part 1 we have seen how the concept of state management works. Now it's time to apply that concept to a load-balancer. In this Part 2 we will look at a strategy for using Linux Virtual Server with MPP for failover, and also take a closer look at the mechanics of MPP itself.
MySQL Failover Strategy using State Management, introducing MPP - Part 1 (2007.11.01)by Russell E GlaueHaving a strategy for failover has become almost standard in the business world. Whether it is a total site failover from a NOC in one city to another, or just a simple redundant server. Over the years many technology solutions have been created for or adopted to MySQL to provide this type of strategy.
A look at MySQL on ZFS (2007.10.26)by John David DuncanWhen Sun Microsystems released the ZFS filesystem in 2004, they set out to remove all of the practical limits on filesystem storage, and to make the arcane details of storage management a thing of the past. ZFS is a 128-bit filesystem with - to name just a few features - copy-on-write transactional semantics, fast snapshots, and optional compression.
Load and Search MySQL Data Using VB.NET 2005 in Windows Applications (2007.10.18)by Ernest Bonat, Ph.D.MySQL data load and search are very important business requirements in any Windows or Internet web application development. In general, any application needs to show a result set of data and/or a single record to the end-users. In Windows applications it is very popular to show a result set of data by using the DataGridView, ListView or TreeView controls. A single record can be shown by the simple combination of the following controls: TextBox, ComboBox, ListBox, CheckBox, RadioButton, etc. MySQL data search is provided by using the required ADO.NET data objects and by refreshing the controls if necessary. These two processes, data load and search, should be fast and should be done with the proper code which depends on the controls in the Windows Form or Web Page. In this article I will show you how load and sort MySQL data using the DataGridView control. To search MySQL data the LIKE SQL operator will be used. Both programming implementations are done by using stored procedures for MySQL 5.0 database engine.
CTO Interview: Christopher Cordray, Co-Founder and CTO, ScienceLogic (2007.10.05)Christopher Cordray, a ScienceLogic founder and the principal software architect behind the EM7 appliances, has more than fifteen years experience with networking, management systems and technology-related operations. Passionate about improving IT operations and application efficiency, Cordray has architected and developed various commercial and custom solutions for companies including Verizon Global Networks, Interliant, Inc and Edison International.
Paul DuBois - Writing MySQL Programs Using C (2007.09.28)by Paul DuBoisMany web developers view development of C programs as a bit of a black art. Development of programs in a compiled language such as C is vastly different from the development of applications in a scripting language. To familiarize more developers with the MySQL C API, we present a three-part series of articles tailored to developers looking to get into C program development with MySQL. This first article is the full chapter from Paul DuBois' industry-standard work, MySQL, Third Edition, from Pearson Publishers. The second article, from Mark Schoonover, to be published next week, will cover development with the C API using the Eclipse CDT to write a sample program. The third article, also from Mark Schoonover, will go into more depth and expand the example program using more advanced features of the API.
A Primer on Falcon Tablespaces (2007.09.18)by Robin SchumacherThe Falcon transactional storage engine uses the concept of user-defined tablespaces that are more in line with what one would find in Oracle (tablespaces) or SQL Server (filegroups). Let’s take a quick look at how tablespaces are used within Falcon and what you can and can’t do with them.
How MySQL Treats Security Vulnerabilities (2007.09.18)by Kaj ArnöThe phrase "security vulnerability" gives most of us the creeps. We are afraid of them. Looking at them rationally, they share a trait with other bugs: All are a pain, but some are a bigger pain than others. And instead of trying to avoid the evil by not talking about it, let's take a look at MySQL's security vulnerability track record over the years, and explain the rationale behind our actions using actual cases from past years.
Using MySQL with PDO (2007.09.18)by Peter LavinPDO is a PHP extension providing a data-access abstraction layer that can be used with a variety of databases. This gives you the flexibility of changing the database backend without having to alter your access methods. Even if you use MySQL exclusively, PDO can provide advantages; you can use the same data-access methods regardless of the MySQL version. This does away with the need for using the standard MySQL extension with older versions of MySQL and using the MySQLi extension for later versions. An additional advantage is the ability to use object-oriented code regardless of the version of MySQL.
MySQL 5.1 Article Recap (2007.09.11)by Jay PipesSo, someone had a great idea to go back through the Developer Zone, which has become a bit disorganized of late, and put together an article with links and summaries for all the Dev Zone articles that discussed MySQL 5.1 features. I have done so, and also linked in many community member's blog articles and tutorials to give everyone a good dose of the features that make MySQL 5.1 worth investigating.
Preparing for MySQL 5.x Certification (2007.09.10)by Mark SchoonoverYou've decided to obtain MySQL certification and that's great! Now it's a matter of how to go about it? You can go the traditional routes and take a class, or you can prepare on your own. I did the latter, and 2 exams later during MySQL Conference 2007, I passed the Certified MySQL Database Administrator (CMDBA) exams. I wanted to share my exam preparation experience, as I've never found this information in any other place. I took what I learned from how to study math and applied it to preparing for the MySQL exams. These techniques will probably work with other certifications, and I'm sure you'll come up with some of your own techniques to share.
Migrating From MS Access To MySQL (2007.08.22)by Christopher KeeneAccording to recent survey, over 20% of MySQL users plan to migrate a Microsoft Access applications to MySQL over the next 12 months. However there are few documents available that describe best practices for performing such a migration.This document summarizes discussion from the “MS Access Migration” session at the 2007 MySQL User Group meeting in California. That session brought together a number of MySQL users with a goal of identifying key success factors for moving MS Access applications to MySQL.
Getting started with MySQL Proxy (2007.08.17)by Giuseppe MaxiaThe launch of MySQL Proxy has caused quite a commotion in the community. And with reason. For feature hungry people, this is undeniably the most exciting addition to MySQL set of tools.If the last statement has left you baffled, because you don't see the added value, don't worry. This article aims at giving you the feeling of what the Proxy can do.
From Visions to Reality - an interview with David Axmark, Co-Founder of MySQL AB (2007.08.02)by Lenz GrimmerDavid Axmark co-founded MySQL AB together with Michael "Monty" Widenius and Allan Larsson in 1995. Today, he is a member of the MySQL Community Relations team and has an advisory role in the MySQL Management. He travels all across the globe to advocate for MySQL and Open Source Software in general and has just recently moved from Uppsala, Sweden to Ascot in the United Kingdom, where he lives with his wife and two children.
How to write a successful patch (2007.07.28)by Giuseppe MaxiaSubmitting patches to Open Source code doesn't come naturally to everyone. It is not easy, since it requires coding skills that the average user does not have. Moreover, code patches require a fair amount of additional documentation, without which the patch itself is virtually useless. These notes will walk you through the requirements of a good patch for MySQL server and perhaps other projects.
The Clash of the DB Egos (2007.07.26)by Kaj ArnöOne of the most popular keynotes of the MySQL Conference & Expo 2007 was called "The Clash of the DB Egos". It was a fight amongst seven database luminaries, all playing an important role either within MySQL AB or as providers of Storage Engines that work closely with MySQL. This article attempts at giving a picture of what the fight was about, through reciting the egos and the questions posed to them by the referee.
Follow Up on Rolling Sums - Self Joins vs User Variables (2007.07.12)by Jay PipesDamien Seguy had an interesting observation on my use of self joins for generating rolling sums.
MySQL bugs processing explained (2007.07.04)by Giuseppe MaxiaWhat's behind MySQL bugs processing? Who handles your bug report? Why does it take so long? These, and many other questions are answered in this article about the internals of MySQL organization.
MySQL as universal server (2007.06.28)by Giuseppe MaxiaMySQL users often dream about a more powerful yet stable database server. They want a server with more features, like expanding macros, customized logging, access to shell commands, access to live tables from other DBMS. Every feature, given enough development time, can be eventually implemented, but users want them now, with the current GA server. It can be done. Using a proxy server, some of those dreams come true. Today.
3 Tips for Customizing MySQL Enterprise to Achieve Monitoring Best Practices (2007.06.27)by Rob YoungDuring my years as a Developer/DBA hearing the words "customizable" or "extensible" always brought a slight smile to my face, particularly when they were used in conjunction with a software sales pitch or evaluation. In fact, more often than not, while presented as product features, these words often really mean, "you can do some additional things with this software if you are willing to invest significant time and resources into doing so". Even today, some of the most popular open source and commercial software solutions provide application programming interfaces (APIs) and plug-ins that are really nothing more than containers that allow you to provide your own code. The goal being to make an off-the-shelf product more applicable to the problems you are attempting to solve without having to write a customized application from scratch.
MySQL Data Loading with Lookup Tables (2007.06.25)by Ernest Bonat, Ph.D.Lookup tables contain, in general, a fixed list of data. This data doesn’t change very often in database business applications. Examples of this data could be a product list, category type, supplier list, state name, zip code, phone area code, etc. In Windows and Internet web business applications, most of these lookup tables are graphically implemented by using ComboBox, ListBox or CheckListBox read-only controls. These controls are loaded with data using two main columns, ID and Name. For example, the USA state table, the ID could be ‘CA’ and the Name ‘California’. Some times, for standard Windows form and Internet web page we need to show data to the end-users from many of these lookup tables. A fast data loading process and defining the main column values for each lookup table is required. In this article I will show you standard lookup data loading procedure and the generic classes object to store and read-only the values of the ID and Name columns from the lookup tables. Selecting and finding the ID and Name values will be provided. Executing stored procedures with input/output parameters in MySQL 5.0/VB.NET 2005 will be covered in detail too.
Rolling Sums in SQL - A Practical Example (2007.06.21)by Jay PipesToday, Lenz was putting together some stats on PlanetMySQL feeds added since January this year, and asked in an email whether he should include totals in the stats. I responded yes, and offered a quick SQL solution to get those numbers out of the database. I thought it might be useful for others, so here goes...
MySQL on Windows? Absolutely! (2007.06.13)by Robin SchumacherThe admission I'm about to make will likely cause me to lose some friends/colleagues in the open source world, but I have to be honest: I like using Microsoft Windows. Except for Windows 3.0-3.1, I always have. Further, I personally much prefer managing databases on Windows than Unix and will also give Windows the nod over Linux in certain areas. See, I came from managing DB2 on the mainframe to running data warehouses with Teradata on their proprietary platform, and then did a long run with Oracle on UNIX (AIX and HPUX).
Interview with Jan Kneschke, Developer at MySQL AB (2007.06.08)by Lenz GrimmerJan Kneschke works for the MySQL Development Team and is the author of the very popular lighttpd web server. I recently had the opportunity to ask him a few questions about himself and his work.
Debunking GROUP BY Myths (2007.06.06)by Roland BoumanThere is a popular myth about the SQL GROUP BY clause. The myth holds that 'standard SQL' requires columns referenced in the SELECT list of a query to also appear in the GROUP BY clause, unless these columns appear exclusively in an aggregated expression. MySQL is often accused of violating this standard. In this article I will attempt to debunk this myth, and to provide a more balanced view regarding MySQL's treatment of GROUP BY at the same time.
How Automated Updates Provided by MySQL Enterprise Can Save You Time (2007.05.21)by Rob YoungThe value of timely information regarding maintenance releases, including specific information of what bugs have been fixed and when and where to get the upgrade, proves very compelling for those DBAs and developers with little to no bandwidth. The good news is MySQL Enterprise takes the guesswork out of deciding which version of the MySQL server you should be running by providing regularly scheduled Monthly Updates and quarterly Service Packs for the Enterprise Server.
A Developer's Guide to the MySQL User's Conference (2007.04.17)by Jay PipesRobin Schumacher recently gave us an excellent rundown on sessions at the upcoming MySQL Conference and Expo (April 23-26th in Santa Clara) for DBAs. As a proud developer I wanted to make sure that our enormous developer community had a similar guide. Now, developers will encounter the same problem that Robin pointed out: with so many excellent sessions, you'll be required to make some difficult choices sometimes in what sessions you attend. This guide will hopefully allow you to navigate the waters. I've broken the guide down into a general section and also into programming language specific sections.
YouTube, Flickr, and Wikipedia to Share their Secrets of Success at the 2007 MySQL Conference & Expo (2007.04.12)Sebastopol, CA -- April 10, 2007 -- The 2007 MySQL Conference & Expo is gearing up for April 23-26 at the Santa Clara Convention Center in Santa Clara, California. This year's program includes more than 110 tutorials and sessions to be delivered by some of the most successful companies and fast growing web sites in today's Internet economy -- including YouTube, Flickr, and Wikipedia, whose participation underscores the influence of MySQL's open source database. According to Tim O'Reilly, CEO and founder of O'Reilly Media, Inc., "Every killer app on the Internet is a database application. And that makes MySQL the 'Intel Inside' of the next-generation of computer applications."
Using the New MySQL Query Profiler (2007.04.05)by Robin SchumacherOne of the great things about MySQL is the superior innovation model that’s used to deliver database server software. Rather than relying solely on internal engineers who create and maintain a piece of software (as in a traditional software company), MySQL partners with the millions of active users across the world who take advantage of the open source model and daily extend the MySQL server to do new and pioneering things. These innovations can then be submitted to MySQL AB, tested, validated, and rolled into the database server so everyone can benefit from the creativity of the very active MySQL community.
Daylight Saving Time Changes (2007.03.13)by By Peter Gulutzan and Dmitri LenevThis year many American states and Canadian provinces will switch to daylight saving time on March 11 (the second Sunday of March) instead of switching on the first Sunday of April as happened during previous years.
A DBA's Guide to the MySQL User's Conference (2007.03.13)by Robin SchumacherI live in absolute and abject poverty. No, I don't mean financially - I've been blessed beyond what I deserve and MySQL pays me very well. What I mean is that I am utterly time poor. Isn't it amazing how you can be so free in terms of lifestyle and yet have so little time to enjoy and benefit from it all? There are so many options and choices in the world that many times you have a hard time knowing just what to say "Yes" to and what to turn down. Trust me - you'll face this dilemma at the upcoming MySQL User's Conference. Our chairman, Jay Pipes, has outdone himself and put together the most engaging and power-packed agenda that we've ever had. The presenter's list reads like a who's who in the open source and modern database world, with sessions that address everything from deep dives down into database internals to the business side of implementing online database applications. You will find yourself hard-pressed to put together a personal attendee schedule because there will be so much you'll want to see and hear.
Define and Store MySQL ADO Connection String in VB.NET 2005 (2007.03.08)by Ernest Bonat, Ph.D.In Windows and Internet web business applications development the connection to the MySQL database server is critical and requires high-level of security. In ADO.NET database technology the connection is defined in the Connection String property of the connection object. Defining and storing the MySQL Connection String properly is an important application setting task for developers today. In this article I'll show you how to setup and secure MySQL Connection String for Windows application development using VB.NET 2005. Also the difference of programming code between VB.NET 2003 and 2005 will be provided for data loading using MySQL Connector/NET 5.0.3 database driver.
A Look at the PBXT Storage Engine (2007.02.28)by Robin SchumacherEvery now and then I get a big reminder of how great it is to be a part of the open source way of doing things. Having a strong community of MySQL lovers who use the free and open source MySQL database server and pay MySQL AB with code contributions and bug reports is truly a great way to develop rock solid and innovative software. Some contributions that come back to MySQL are small, but others are very large indeed. What would be large, you ask? How about a new, powerful transactional storage engine?
Understanding the Falcon Transaction Storage Engine – Part 3 (2007.02.19)by Robin SchumacherIn Part 1 of this article series, we looked at how the Falcon transactional storage engine was architected and how it compared to some of the other MySQL storage engines. Part 2 covered how Falcon handles transaction management and concurrency. In this final article in the series, I’ll look at how Falcon manages tables and indexes, and also cover backup/recovery along with migration topics.
Understanding the Falcon Transaction Storage Engine – Part 2 (2007.02.09)by Robin SchumacherIn Part 1 of this article series, we looked at how the Falcon transactional storage engine was architected and how it compared to some of the other MySQL storage engines. In this article, I’ll focus on how Falcon performs transaction management, including some special points on where Falcon differs from some of MySQL’s other transactional engines.
Understanding the Falcon Transaction Storage Engine – Part 1 (2007.02.02)by Robin SchumacherIf you’ve been using MySQL for any time at all, you know that a unique advantage afforded MySQL users is the ability to use multiple storage engines to manage the underlying data stored on the server. This efficient and modular architecture provides large performance and manageability benefits for those wishing to specifically target a particular application need – such as data warehousing, transaction processing, high availability situations, etc. – while enjoying the advantage of utilizing a set of interfaces and services that are independent of any one storage engine. The MySQL server supplies engines that are internally developed, provided by third-party software vendors, and also allows a user to build their own storage engine if they desire.
Interview with Andrey "Poohie" Hristov, Developer at MySQL AB (2007.01.18)by Lenz GrimmerOne of the new features in upcoming MySQL 5.1 Server will be the Event Scheduler. This feature was implemented by Andrey Hristov within the scope of a master's thesis for the University of Applied Sciences in Stuttgart. We incorporated his contribution into our code base - you can read more about this feature in this article from Peter Gulutzan. Andrey is now employed by MySQL AB as a Software Developer. Lenz Grimmer asked him if he would be interested in sharing his story and provide some more background about himself.
Automating MySQL Best Practices Management (2006.12.11)by Robin SchumacherOne thing I learned fairly early in my DBA career was that if I was ever going to excel in managing the databases under my care, I needed to do one thing: smartly automate as much of my job as I could. This became particularly important in my last full-time DBA spot where one other guy and I had responsibility for about 120 Oracle, SQL Server, and DB2 databases. A lot of these databases ran critical applications with lots of users, so we were rarely bored at work. To keep our heads above water, we needed to do something to ensure we always had our finger on the pulse of all our servers, plus we needed to make sure that any performance issue was recognized as early as possible.
Interview with Paddy Sreenivasan from Zmanda (2006.11.17)by Colin CharlesZmanda specializes in backup and recovery solutions. First they gave the world Amanda, and now they've given MySQL users a new reason to rejoice with the launch of Zmanda Recovery Manager (ZRM) for MySQL. I recently got to speak to Paddy Sreenivasan, the Vice President of Engineering and co-founder of Zmanda Inc., amidst his busy schedule, about what they do and why MySQL users should be jumping towards ZRM for MySQL for all their backup & recovery needs.
Beginning MYSQL 5 with Visual Studio.NET 2005 (2006.11.16)by Anil MahadevThis tutorial gives you a practical introduction to MySQL 5 Application Development using the MYSQL Connector for .NET with Microsoft Visual Studio.NET 2005 and how to build a simple Database Application using VC# and MySQL 5.
MySQL Scale-Out With Application Partitioning (2006.11.08)by Oli SennhauserIntroduction: Eventually every database system hit its limits. Especially on the Internet, where you have millions of users which theoretically access your database simultaneously, eventually your IO system will be a bottleneck. Conventional solutions: In general, as a first step, MySQL Replication is used to scale-out in such a situation. MySQL Replication scales very well when you have a high read/write (r/w) ratio. The higher the better. But also such a MySQL Replication system hits its limits when you have a huge amount of (write) access. Because database systems have random disk access, it's not the throughput of your IO system that's relevant but the IO per second (random seek). You can scale this in a very limited way by adding more disks to your IO system, but here too you eventually hit a limit (price).
Interview with Brian Moon, from the Phorum project (2006.09.11)by Jay PipesIf you've spent any amount of time on the forums, you probably will have recognized Brian among the forum users who most frequently answer posts -- particularly SQL and performance-related questions. Some time ago, I had a chance to ask Brian a little bit about his experience writing Phorum, about his thoughts on open source and MySQL in particular, and on his vision for Phorum in the future...
Interview with Rohit Nadhani, Co-founder of Webyog (2006.09.08)by Jay PipesWebyog is the company behind the popular SQLyog GUI tool for managing and developing MySQL databases. They have a great history of partnership with MySQL and, recently, decided to open source part of their product line. I had a chance to interview Rohit Nadhani, co-founder of Webyog, about their decision to move to open source, the changes they've made to the code as a result of that move, and various other things.
Tuning MySQL for eZ publish (2006.08.24)by eZ SystemsThis article explains how to tune a MySQL database for use with eZ publish. MySQL is a database engine used by eZ publish to store content. While other databases are supported by eZ publish (such as PostgreSQL and Oracle), for performance reasons we recommend MySQL. This article has suggestions for optimizing for either read or write operations, and also discusses some other optimization techniques such as DNS and filesystem configuration.
MySQL 5.1 New Features: MySQL Partitions (2006.08.08)by Jon Stephens and Peter GulutzanPartitioning is a way of pre-organizing table storage. You can say "some of the table's rows will go here, some will go there, still others will go to to still other places". Often, depending on the storage engine, the effect is to spread the table's rows over different files or even different disks.
Interview with Stephan Uhrenbacher, Managing Director of Qype GmbH (2006.08.04)by Lenz GrimmerStephan Uhrenbacher is the Managing Director of Qype GmbH, the company behind the Qype.com web site, which allows users to recommend places in Germany and has developed into one of Germany’s most interesting web 2.0 applications.
Partitioning with Dates in MySQL 5.1 (2006.07.20)by Robin SchumacherMany of you have responded very positively on the first and second partitioning articles that I wrote some time back. It’s clear that a lot of you are excited about the upcoming MySQL 5.1 release, and in particular, the new data partitioning feature that’s being offered. That’s no surprise because, as we covered in the previous two articles, partitioning has some excellent performance and management benefits for anyone who’s building data warehouses or other large databases with MySQL.
Enforcing Foreign Keys Programmatically in MySQL (2006.07.10)by Philippe CamposIn this article we explore how to program foreign keys into a MySQL Server. This is important when your application requires referential integrity and the storage engine you’d like to use, as in the case of MyISAM or NDB (Cluster), does not support this functionality natively. We should note that InnoDB and the upcoming code-named “Falcon” storage engine, both support foreign keys.
MySQL Cluster 5.0 ALTER TABLE In-Depth (2006.07.06)by Martin SkoldIn this Developers Zone article we take an in-depth look at how the ALTER TABLE command is implemented in MySQL Cluster 5.0.
MaxDB Synchronization at United Drugs' Annual Convention (2006.06.03)by Mark Thomas and C.J. CollierThis document is a user report on the MaxDB Synchronization Manager. The article describes the use of the MaxDB Synchronization Manager during United Drugs Annual Convention from a technical standpoint. It gives an example of the magnitude of possible application of the MaxDB Synchronization Manager. Written for developers, the user report contains warnings on common pitfalls and gives hints how to circumvent the problems.
Interview with Paul McCullagh, developer of the PrimeBase XT Storage Engine (2006.06.02)by Lenz GrimmerThe PrimeBase XT Storage Engine (PBXT) is a new transactional database engine for MySQL. It has been designed for modern, web-based, high concurrency environments. In May 2006, I had the opportunity to meet with Paul McCullagh, the head developer of PBXT for lunch at the Hamburg offices of Snap Innovation GmbH, the company behind PrimeBase. It was co-founded by Paul in February 1996 and is focussed on the development and sales of client/server database technology, specializing in inter- and intranet systems.
MaxDB series: transactions (2006.05.31)by Ulf WendelIn this issue of the MaxDB series we will introduce you to some selected aspects of transactions. The topic of transactions seems pretty boring. But in fact it depends very much on the point of view you take. We have tried to put a light on the subject that shows some rather advanced aspects of transactions which are a little less often discussed in database classes.
My Dinner with Monty (2006.05.31)by Zack UrlockerThis interview took place with Monty Widenius, co-founder of MySQL, at his house outside of Helsinki, Finland. In Monty’s usual understated Finnish style, we talked about MySQL 5.0, coding styles and cooking.
MySQL Clustering: Chapter 5 Performance (2006.05.24)by Harrison Fisk, Alex DaviesOne of the main reasons to use a MySQL Cluster is the ability to get better performance and scalability compared to using a database that is confined to a single host. This chapter discusses many of the concepts related to performance and scalability, as well as how to ensure that you get the maximum performance from your MySQL Cluster setup.
MySQL 5.0 - Ready for Prime Time Business Intelligence with Pentaho (2006.05.23)Business intelligence is the key to fact-based decision making in the intelligent enterprise. Techniques and tools are designed to unlock knowledge from data.
More on MySQL 5.1 Partitioning (2006.05.23)by Robin SchumacherIn my first article on partitioning, I demonstrated that you can get some pretty impressive performance benefits when you properly design partitioned tables to match the SQL queries that are routinely shot across the bow of your database server. I’d now like to continue in that vein and show you how easy and efficient partitioning is in terms of managing how partitions are created and removed within tables.
A Look at the MySQL CSV Storage Engine (2006.05.05)by Robin SchumacherIn MySQL 5.1, a new engine has been provided that assists with the management and use of delimited data found in common flat files. Robin Schumacher takes a quick look at this new engine, along with the features and benefits it provides users of MySQL.
Advanced MySQL Replication Techniques (2006.04.24)by Giuseppe MaxiaYou may know about the MySQL Cluster, which is a complex architecture to achieve high availability and performance. One of the advantages of MySQL Cluster is that each node is a peer to the others, whereas in a normal replicating system you have a master and many slaves, and applications must be careful to write only to the master. In this article, Giuseppe Maxia, CTO of Stardata IT, provides unique insight into circular replication (multi-master replication) with failover.
MySQL 5.1 New Features: MySQL Events (2006.04.13)by Peter GulutzanAndrey Hristov added "Events" for MySQL version 5.1 when he was working on his master's thesis for the University of Applied Sciences in Stuttgart. We liked the feature a lot, and now Andrey works for MySQL. An inspiring story, eh? And now MySQL 5.1 is getting stabler, it's "beta" instead of "alpha". So we can try some real work with this Events feature.
The MaxDB series on PlanetMySQL (2006.03.31)by Ulf WendelMySQL has started a MaxDB series on its corporate blog aggregator. Since the beginning of Februar the MaxDB team tries to write one MaxDB article per week for you. The articles get published on our english language web site http://www.planetmysql.org. All articles together will make a complete MaxDB class. The class describes the use of MaxDB as a stand-alone enterprise database. We do not discuss the use of MaxDB with SAP applications.
Interview with Ian Wilkes, Director of Operations at Linden Lab (2006.03.03)by Lenz GrimmerLinden Lab is the company behind the virtual world simulation Second Life (SL) in wich users (the residents) can freely roam around and actively participate in the creation and development of the virtual world and their own appearance (their avatars). To facilitate this, Second Life provides powerful in-world 3D construction tools as well as a special scripting language, LSL. Second Life also provides its own economy and currency (Linden Dollars), that residents can use to purchase goods and objects that other residents created. Interestingly, it’s even possible to exchange Linden Dollars into US dollars and vice versa.
Improving Database Performance with Partitioning (2006.02.22)by Robin SchumacherA few years ago, I wrote an article entitled "The Foundation of Excellent Performance" (still available at http://www.tdan.com/i016fe03.htm) where I argued against the notion that SQL code was the number one contributor to performance in a database-driven system. Instead, I stated in the article that I firmly believed how good physical database design was far and away the leading component of superior database performance. In addition, I showed that Oracle's own research illustrated how poor design was the main culprit behind database downtime (planned or unplanned). In the years since then, I've not changed my stance and still think that any DBA who wants a high-performance database has got to invest in intelligent and savvy physical design to produce the kind of response times that make end users smile instead of scream.
Interview with David Heinemeier Hansson from Ruby on Rails (2006.02.11)by Lenz GrimmerThe Ruby scripting language was first published in 1995, and has a very dedicated and active community of users around it. And with the release of the Ruby on Rails web framework in July 2004, Ruby has emerged as a serious alternative to PHP and Java for developing database-driven web sites. MySQL is one of the most popular choices as a database backend for Ruby on Rails applications and we support the Rails community with a dedicated forum about MySQL and Rails.
Accessing Distributed Data with the Federated Storage Engine (2006.02.09)by Robin SchumacherIt's no secret that corporations are swimming in more data than ever before. IDC has recently pegged data growth at 48% a year, which means that corporate data nearly doubles every two years at many companies. In addition, purchased applications and custom built systems continue to bring in new databases that require attention, and business intelligence remains a red-hot area for modern enterprises with many companies building analytic data warehouses or data marts that continually feed information to key decision makers.
Interview with Kai 'Oswald' Seidler from the XAMPP project (2006.01.17)by Lenz GrimmerI recently had the pleasure to get in touch with Kai "Oswald" Seidler from the Apache Friends team. He is one of the people behind 'XAMPP', an easy to install software distribution containing MySQL, PHP and Perl which is available for Linux and Windows. The project also added support for Mac OS X and Solaris recently, but these ports is still in an early beta stage.
New Event Feature in MySQL 5.1.6 (2006.01.13)by Trudy PelzerIn this article, I'll give a preliminary description of a new MySQL feature for scheduling and executing tasks. In version 5.1.6, MySQL has added support for events. That is, you can now say: "I want the MySQL server to execute this SQL statement every day at 9:30am, until the end of the year" -- or anything similar that involves any number of SQL statements, and a schedule.
MySQL 5.1's new XML Functions (2006.01.12)by Alexander Barkov and Peter GulutzanMySQL version 5.1.5 has functions for searching and changing XML documents. This article has examples.
MySQL 5.0 Certification Exams (2006.01.03)by Carsten PedersenMySQLs Certification Manager outlines the upcoming changes in the MySQL certification program, and why those changes were made.
Essential PHP Security: Chapter 2, Forms and URLs (2005.12.21)by Chris ShiflettSecurity is a hot topic, particularly for web applications. Essential PHP Security is a book by PHP security expert Chris Shiflett (O'Reilly Media, Inc, October 2005, ISBN 059600656X). Since we already covered SQL injection recently, we chose to publish chapter 2 from this book, "Forms and URLs".
Guaranteeing Data Integrity with MySQL 5.0 (2005.12.01)by Robin SchumacherThe IT crown jewels of any organization lies in their database infrastructure. Obviously, well-designed front end applications play a leading role when it comes to ensuring that critical information is captured or reviewed, but the buck stops at the database when it comes to data retention and protection.
MaxDB for SAP Hosting - Technical Whitepaper (2005.11.24)by Ulf WendelMaxDB has a unique, top position in the list of open source database. The SAP-certified database management system combines ease of use, high availability and exceptional performance with low costs. This whitepaper presents a technical analysis of how MaxDB is designed to meet the requirements of hosting business critical SAP applications.
Stored Procedures in MySQL 5.0 (2005.11.17)by Carsten PedersenMySQL's stored procedures do not provide for direct support of passing and using object names in the procedure. But it's pretty easy to work around this limitation.
Using BIRT To Report On Bugzilla in MySQL (2005.11.16)BIRT is rich reporting technology powered by the Eclipse BIRT project. Actuate BIRT inlcudes support and subscription sevcies, is MySQL Network Certified and is a recommended reporting and analytics component of a MySQL Data Warehouse Scale-Out Solution Set.Here is some how-to information on using BIRT with MySQL.Flash demo on building a complex report with BIRT on MySQL »Example of building a report against Bugzilla on MySQL »
Installing MySQL MaxDB Synchronization Manager (2005.11.09)by Carl "C.J." CollierThis series of articles describes how to install and configure the MySQL MaxDB Synchronization Manager. In a step by step approach the author guides you through the process of obtaining, installing, testing, configuring and running MaxDB and the Synchronization Manager.
MySQL 5.0's Pluggable Storage Engine Architecture, Part 2: A Quick Test Drive (2005.10.26)by Robin SchumacherLet's take a quick test drive to show how simple it is to use MySQL's pluggable storage engine architecture and see the impact different storage engines can have on performance.
MySQL 5.0's Pluggable Storage Engine Architecture, Part 1: An Overview (2005.10.19)by Robin SchumacherThe reasons for the huge popularity and increasing adoption of MySQL as a serious database platform can many times be boiled down to two, but surprisingly contrasting, considerations:1. How much MySQL is like other database platforms.2. How much MySQL is different than other database platforms.
phparchitect's Guide to PHP Security (2005.10.10)phparchitect's Guide to PHP Security, a book by PHP developer Ilia Alshanetsky (Marco Tabini & Associates, September 2005, ISBN 0973862106), discusses the important topic of how to make PHP applications secure. Chapter 3, for which the MySQL Developer Zone received permission to reprint, covers "SQL Injection".
Dispelling the Myths (2005.10.05)by By Robin Schumacher and Arjen LentzAs anyone will tell you, competition is a good thing because it gives you a choice. Acquiring current and accurate information about your options enables you to spend your time and money in the most efficient way and is certainly time well spent.
An Atlas for Ireland's Artists (using MySQL GIS) (2005.09.18)by Daniel McAlister, CTO, Integrated Spatial Solutions Inc.Portraits of Ireland Ltd is a web based Irish company aiming to help connect the diaspora to people and places in Ireland through Art. This startup company required an online interactive atlas to assist both artists and those commissioning their work to find not only the island's more well known locations but also its remote and smaller place locations. To this end an Artist Atlas was created. Some of the primary requirements were a cartographically rich, atheistically pleasing vector based system, fully searchable, and with as extensive a database as possible.
The MySQL 5.0 Archive Storage Engine (2005.09.06)by Robin SchumacherMore than at any other time, database professionals are being aggressively challenged by mushrooming volumes of data in corporate business systems. While some industry analysts project data growth at an average rate of 42% a year, that figure is conservative in some installations where growth rates are several hundred percent, with no end in sight.
Managing Hierarchical Data in MySQL (2005.08.17)by Mike HillyerMost users at one time or another have dealt with hierarchical data in a SQL database and no doubt learned that the management of hierarchical data is not what a relational database is intended for. The tables of a relational database are not hierarchical (like XML), but are simply a flat list. Hierarchical data has a parent-child relationship that is not naturally represented in a relational database table.
Interview with Marc Delisle (2005.08.15)by Arjen LentzMarc Delisle is one of the lead developers of the very popular phpMyAdmin project, a web/browser-based tool for MySQL Administration. I talked with him about MySQL, phpMyAdmin (of course), and being a developer in general.
Creating a DBA Dashboard for MySQL (2005.08.05)by Scott Sanders and Teodor DanciuThe open source DBA Dashboard for MySQL automates the statistical data collection, reporting and monitoring of the internals of your MySQL Servers. Information such as server health, schema information, database size, and usage statistics are aggregated on a periodic basis to give you insight into your MySQL databases. This JasperReports application answers questions such as: How many queries per day? Which user has the most resource usage? What tables are growing the fastest?
Pro MySQL, Chapter 6: Benchmarking and Profiling (2005.08.03)by Michael Kruckenberg and Jay PipesPro MySQL, a brand new book by Mike Kruckenberg and Jay Pipes (Apress, July 2005, ISBN 1-59059-505-X), provides intermediate and advanced MySQL users with a comprehensive guide to the array of features available in MySQL upto and including MySQL 5.0 Since the MySQL Developer Zone has had quite a few articles related to the new MySQL 5.0 features, we chose to publish chapter 6 covering another hot topic, "Benchmarking and Profiling". This is one of the first books to cover MySQL 5 in depth. It foregoes the usual reiteration of basics that you'll find in other books, instead concentrating on MySQL's advanced applications in enterprise environments. Further, this book doubles as a quick reference guide for configuration directives, commands, and features. The book's own companion web site is at http://www.promysql.com/
A Practical Look at the MySQL Query Cache (2005.07.19)by Robin SchumacherAll robust relational database management systems utilize memory caching to help improve the overall responsiveness of their underlying engine. While certainly not free, accessing application data, query plans, or database metadata in RAM is normally much quicker than repetitively retrieving that same information from disk or building it from scratch.
Book Review: Beginning MySQL Database Design and Optimization (2005.07.18)by Russell J.T. DyerApress is fairly new to the open source book publishing business. However, in a short amount of time they've put together a nice collection of books. They've done this by buying many titles from Wrox Press, but more importantly by seeking out some good writers with expertise in their field to write new books. So, if you're not familiar with Apress books, you might want to take a look at them. As part of their expansion into the open source arena, they've been publishing some new books on MySQL. One book that I found to be very interesting is Beginning MySQL Database Design and Optimization by Jon Stephens and Chad Russell.
Book Review: MySQL Tutorial (2005.07.18)by Russell J.T. DyerMySQL Press is a relatively new imprint for the book publisher Pearson Education. They are billed as "the exclusive publisher of technology books and materials that have been authorized by MySQL AB, the company that develops and markets the MySQL database." As part of their initial set of MySQL books, they have published an excellent book on learning the basics of MySQL called MySQL Tutorial. It's written by Luke Welling and Laura Thomson, the authors of PHP and MySQL Web Development (Sams 2003). Their tutorial has a simple style and a relaxed pace that's ideal for MySQL beginners.
Book Review: High Performance MySQL (2005.07.18)by Russell J.T. DyerO'Reilly has published a fabulous book on MySQL. The authors, Jeremy Zawodny and Derek Balling, have drawn on their extensive experience as MySQL administrators at Yahoo to write High Performance MySQL for fellow administrators. Instead of getting bogged down with the basics of MySQL, the book focuses on understanding performance factors in MySQL and how the different ways of creating databases or of modifying existing databases will affect speed and efficiency. While this is an advanced topic, the text and concepts are easy to follow. It's written on the assumption, however, that the reader already knows MySQL but is unaware of how databases can perform better and how tables can be constructed, joined, and indexed optimally.
MySQL Database Design and Tuning, Chapter 18: Case Study - Solving a broad Collection of Performance Problems (2005.07.15)by Robert SchneiderThe MySQL Developer Zone received permission to publish excerpts from the book "MySQL Database Design and Tuning" by Robert Schneider, published in 2005 by Sams (ISBN 0672327651). Chapter 18 is a case study that reviews a broad-based collection of performance problems, along with their solutions.
Embedding the MySQL Server Library (2005.07.07)By embedding the MySQL server library in MySQL applications, MySQL doesn't have to be installed on the end user's computer. It's particularly useful with small devices and public kiosks. The embedded MySQL server also has the advantage of running faster with MySQL applications since there isn't a network connection or any passing of data between the application and MySQL. It's able to avoid these factors because the server library is embedded in the compiled program. Best of all, the embedded server library is part of the MySQL distribution.
MySQL: The Complete Reference, chapter 14: Security, Access Control, and Privileges (2005.06.15)The MySQL Developer Zone received permission to publish excerpts from the book "MySQL: The Complete Reference" by Vikram Vaswani, published in 2004 by McGraw-Hill/Osborne (ISBN 0-07-222477-0). Our first selection is chapter 14 about Security, Access Control, and Privileges. The book's own companion web site is at http://www.mysql-tcr.com/
Evaluating MySQL 5.0 Key Features (2005.06.14)by Arjen LentzMySQL 5.0 is currently in its beta phase. It may appear obvious, but software does not magically become stable (production quality) just by waiting a while! Our chief QA engineer Omer BarNir would like to ask you to assist by testing key features in 5.0: stored procedures, views, and triggers.Includes The MySQL 5.0 Beta Challenge!Also available in Russian »
Dell Benchmark and Sizing Guide for MySQL Network (2005.06.08)This technical white paper provides performance results, best practices and tuning techniques from Dell and MySQL experts Dave Jaffe, Todd Muirhead and Peter Zaitsev. Using the Dell PowerEdge 2800 and MySQL Certified Binaries, the DVD Store application achieved over 1900 transactions per minute, i.e. over one billion orders per year. Download the Dell Sizing Guide for MySQL Network » Download the DVD Store benchmark application from Dell »
Interview with Joao Prado Maia (2005.06.03)by Arjen LentzJoão Prado Maia is a Senior Software Engineer for the Internal IT department of MySQL AB. We were lucky to catch him in the wild a few years ago with his project Eventum, which we will talk about more also.
Chapter 5: Joins, Temporary Tables, and Transactions (2005.05.11)The MySQL Developer Zone received permission to publish excerpts from the book "Beginning MySQL Database Design and Optimization: From Novice to Professional" by Jon Stephens and Chad Russell, published in 2004 by Apress (ISBN 1-59059-332-4). Our first selection is chapter 5 about Joins, Temporary Tables, and Transactions.
Point-in-Time Data Recovery (2005.04.26)by Russell DyerA utility like mysqldump is very useful for backing up MySQL data and table schema. However, backups are usually made only once a day or at some other regular interval. If data is lost on your system several hours after the last backup is completed, you may not be able to recover it. There are a few methods by which you can continuously protect data, some of which are explored in this article.
MaxDB performance tuning primer (2005.04.18)A history of more than three decades has made MaxDB by MySQL a very mature database with a rich tool set for performance monitoring and analysis. Aside from an activity overview screen and the EXPLAIN SQL statement a SQL logger sophisticated monitoring tools are shipped with MaxDB for free. In a small series of articles we'll try to put light on the miracle of performance tuning.
Choosing the Right MySQL Version and Reporting Bugs (2005.04.11)by Arjen LentzPeople often ask me about which MySQL version they should use, whether they should consider upgrading, what to do when they find a bug, and so on. Though these things are covered in the MySQL Reference Manual and other places, this article aims to cover all the essentials in the one place.
MySQL 5.0 Triggers (2005.03.24)by Peter GulutzanThis is the second part in the "MySQL 5.0 New Features" series. Peter Gulutzan covers MySQL 5.0 support for Triggers using detailed examples, source code, and hands-on exercises.
MySQL 5.0 Data Dictionary (2005.03.23)by Trudy PelzerThis is the fourth part in the "MySQL 5.0 New Features" series. Trudy Pelzer covers the MySQL 5.0 Data Dictionary using detailed examples, source code, and hands-on exercises.
MySQL 5.0 Views (2005.03.23)by Trudy PelzerThis is the third part in the "MySQL 5.0 New Features" series. Trudy Pelzer covers MySQL 5.0 support for Views using detailed examples, source code, and hands-on exercises.
Choosing the Right MySQL Version and Reporting Bugs (2005.03.16)by Arjen LentzPeople often ask me about which MySQL version they should use, whether they should consider upgrading, what to do when they find a bug, and so on. Though these things are covered in the MySQL Reference Manual and other places, this article aims to cover all the essentials in the one place.
MySQL 5.0 Stored Procedures (2005.03.16)by Peter GulutzanThis is the first part in the "MySQL 5.0 New Features" series. Using detailed examples, source code, and hands-on exercises, Peter Gulutzan shows you how to write stored procedures and shares the implementation details of Stored Procedures in MySQL 5.0. Check back for white papers on Triggers, Views, and Information Schema.
MySQL Network and You (2005.02.15)by Arjen LentzAs news about MySQL Network is presented in the press, MySQL's Community Relations Manager Arjen Lentz explains what it all means for you, the MySQL Community, including developers.
MySQL Cluster: Two webserver setup (2005.02.08)by Alex DaviesThis HOWTO was designed for a classic setup of two servers behind a loadbalancer. The aim is to have true redundancy - either server can be unplugged and yet the site will remain up.
Securing a MySQL Server on Windows (2005.02.01)At the end of January 2005 a new worm-like malware named Forbot spread across the Internet, targeting poorly configured MySQL installations and exploiting them to gain access to the Windows host machines. MySQL takes security very seriously and we are working on a set of proactive services to help alert you to bugs, security issues and new features.
Security Alert (2005.01.27)Please read the security alert about the UDF Worm that can infect MySQL servers running on Microsoft Windows with poor firewall and password security. MySQL takes security very seriously and we are working on a set of proactive services to help alert you to bugs, security issues and new features.
Interview: Oleksandr "Sanja" Byelkin (2005.01.09)by Arjen LentzBehind the software of MySQL AB are of course the people. The MySQL developers, and the many other colleagues around them, are the ones who are making it all happen: new features, bug fixes, support, etc. Some of you may have met a few of them already, either at a previous MySQL Users Conference, or another occasion. As Community Relations Manager, I recently had the privilege of meeting all our developers at an internal company meeting in Malta, and this seemed like the perfect opportunity to start some interviews. In this series, I aim to show you the faces of at least some of these people.
What Makes a Good Product (2004.12.22)by Arjen LentzIt often appears that proponents of open source believe that open source does not actually require much in terms of marketing effort or product development. Seen as a form of evangelism, the open source message is regarded to be so compelling that, once delivered, the audience will "see the light" and convert. In this article, Arjen Lentz explores open source in the real world.
Creating a new storage engine for MySQL (2004.12.09)by John David DuncanThe MySQL database server features a distinctive modular architecture. The core "upper level" features of the server, such as the network layer, SQL parser, and query optimizer, are separated from the underlying data storage by a well-defined interface. Adding a storage engine to MySQL is a fairly straightforward task, and in this article John David Duncan explains how to get started with your own storage engine.
Recovering from Crashes (2004.11.24)by Guilhem BichotGuilhem Bichot shows how to use mysqldump and the MySQL binary log to take incremental backups that can be used to recover from various catastrophes that may disrupt your database server.
New in 4.1: All the Little Features (2004.11.24)by Trudy Pelzer and Jim WinsteadWe've covered the major features in 4.1, now we wrap up our 'New in 4.1' series with an article about all of the little features. But don't let their small size fool you, some of these features may be just what you've been needing from your database server.
New in 4.1: Structure Means Subqueries: Nesting SELECTs (2004.11.18)by Trudy PelzerSubqueries are another way to get data from multiple tables using a single query, and MySQL 4.1 includes support for this standard SQL construct. Trudy Pelzer explains what this allows you to do, along with examples.
MaxDB & PHP - Ready for the Web! (2004.11.15)by Ulf WendelMaxDB is ready for the Web! Or should I say ready for beginners? PHP is known as the “basic of the web”. Rasmus Lerdorf, the inventor of the popular web scripting language PHP used the comparison with BASIC to describe some of the strengths of PHP, the ease of use and the ease of learning. On MySQL ComCon Europe in Frankfurt (8-10.11.2004) a native PHP extension for MaxDB was announced that brings the power of MaxDB to all PHP users. So far MaxDB could only be accessed from PHP via ODBC, but now PHP has gained access to the full power of MaxDB through the new MaxDB extension.
New in 4.1: Temporal Functionality (2004.10.07)by Trudy PelzerWe continue our tour of new and improved features in 4.1 with a look at the changes to the temporal (date and time related) functionality, including support for fractional seconds, time zones, and a small army of new functions for slicing and dicing temporal information.
New in 4.1: Prepared Statements (2004.10.01)by Harrison FiskIn another look at a new 4.1 feature, Harrison Fisk explains the benefits (and trade-offs) of the new server-side prepared statements and the support for it from various programming languages.
Migrating to MySQL - Eliminating Risks and Hidden Costs Using Specialized Migration Software (2004.09.22)For successful migration of enterprise databases running on Oracle, SQL Server, Informix and Sybase to MySQL, you have to choose tools that automate the entire migration process and avoid the risks and hidden costs associated with partial conversion. Dmitry Tolpeko of Ispirer Systems Ltd. explains the issues in migrating to MySQL, and takes a look at some tools to help the process.
New in 4.1: The all-new MySQL Server Windows Installer (2004.09.22)A new feature just introduced with MySQL 4.1.5 is a totally revamped installer for the Microsoft Windows platform. Michael G. Zinner explains the new installer and how you can use it to get MySQL up and running even more quickly on Windows.
New in 4.1: Unicode and Other Funny Characters (2004.09.17)We continue our tour of new features in MySQL 4.1 with a look at the extended character set handling, including support for Unicode. The article by Jim Winstead also includes a technique for handling UTF-8 data in web forms that copes with broken browser implementations.
New in 4.1: GIS and Spatial Extensions with MySQL (2004.09.09)In this article, Anders Karlsson takes a look at the new spatial extensions in MySQL 4.1, which allow for easier manipulation and storage of spatial data in geographic information system (GIS) and non-GIS applications.
Interview: Catching up with Monty (2004.08.19)Michael "Monty" Widenius is the CTO and co-founder of MySQL AB, and the original developer of much of the MySQL code base. Before Monty went into hiding to dive into work on new features for MySQL 5.0 (and spend time with his newborn daughter), we caught up with him on MySQL 4.1 and the state of the company from his point of view.
MySQL Tutorial, Chapter 10: Using Transactions with InnoDB Tables (2004.08.11)by Luke Welling and Laura ThomsonIn this sample chapter from MySQL Tutorial, published by MySQL Press, authors Luke Welling and Laura Thomson explain the basics of transactions, and how the InnoDB storage engine can be used to achieve ACID compliance.
The Full-Text Stuff That We Didn't Put In The Manual (2004.08.06)by Peter GulutzanPeter Gulutzan takes a behind-the-scenes look at the full-text searching features in MySQL 4.1, including features and quirks not (yet) documented in the reference manual, and the complete default stopword list.
Database Migration from FileMaker to MySQL (2004.07.19)by David Simpson (www.dotcomsolutionsinc.net)David Simpson describes the procedures involved with migrating a FileMaker 6 database running on Windows to a MySQL database running on any platform. Additional info is included regarding changes to this procedure which are required to convert FileMaker 7 to MySQL.
Migrating from Microsoft SQL Server and Access to MySQL (2004.07.07)by Mike HillyerDevelopers often ask for tools that can be used to convert an Access database to MySQL (or convert an MSSQL database to MySQL), without realizing that there is more to migrating an application to MySQL than simply converting data. This article covers the basics of migrating an application from an Access or SQL Server database to MySQL. You can also discuss migration issues on the beta MySQL Forums.
An Open Pre-Compiler for Embedded SQL (2004.06.18)by Alan Walker and Mike BenzingerAlan Walker and Mike Benzinger of Sabre Holdings share a new pre-compiler for writing C/C++ applications with embedded SQL they developed when making MySQL part of their open source strategy for the leading travel reservation system in the world.
An Introduction to Database Normalization (2004.06.02)by Mike HillyerNormalizing your data is the most effective way to decrease storage requirements and increase data integrity. In this article, MySQL AB's Mike Hillyer covers the basics of data normalization.
High Performance MySQL, Chapter 7: Replication (2004.05.26)by Jeremy Zawodny and Derek BallingThis sample chapter from High Performance MySQL covers Replication.
High Performance MySQL, Chapter 6: Server Performance Tuning (2004.05.19)by Jeremy Zawodny and Derek BallingThis sample chapter from High Performance MySQL covers server performance tuning.
The MySQL SET Datatype (2004.05.12)by Mike HillyerIn this article, Mike Hillyer explains the SET datatype, one of the less-well-known MySQL datatypes that could help you optimize your applications. The SET datatype is a string type, but is often referred to as a complex type due to the increased complexity involved in implementing them. A SET field can hold any number of strings from a predefined list of strings specified during table creation.
MySQL Storage Engine Architecture, Part 3: Details and Comparison (2004.05.05)by Arjen LentzIn this part of the series, we compare key aspects of the most popular storage engines, and provide you with guidelines and practical examples to help you decide which engine may be best suited for a particular purpose.
MySQL Storage Engine Architecture, Part 2: An In-Depth Look (2004.04.28)by Arjen LentzMySQL Server features a concept called storage engines, or table types. The server and, in fact, the developer, can choose how and where a database table is to be stored. Programmatically this is nothing special; it is normal practice to divide a program into modules and layers. But it is unique for a DBMS (Database Management System) because a developer or, even, a DBA (Database Administrator) is traditionally insulated from the physical storage methods that the database server may employ. How the data is stored really does not concern them, as the server just takes care of everything. That being the case, a developer or DBA could benefit from knowing a bit more about such things as it may help them to optimize applications. This is an angle that may be applied to many aspects of database servers, but in this article we'll focus on the storage engines.
MySQL Storage Engine Architecture, Part 1: An Overview (2004.04.06)by Arjen LentzMySQL Server features a concept called storage engines, or table types. The server and, in fact, the developer, can choose how and where a database table is to be stored. Programmatically this is nothing special; it is normal practice to divide a program into modules and layers. But it is unique for a DBMS (Database Management System) because a developer or, even, a DBA (Database Administrator) is traditionally insulated from the physical storage methods that the database server may employ. How the data is stored really does not concern them, as the server just takes care of everything. That being the case, a developer or DBA could benefit from knowing a bit more about such things as it may help them to optimize applications. This is an angle that may be applied to many aspects of database servers, but in this article we'll focus on the storage engines.
Visual Basic / MySQL Datatypes (2004.01.22)by Mike HillyerVisual Basic can be very loose with it's data types. If you want to avoid worrying about which type of data is coming from your database, you can simply not specify a datatype when you declare a variable, which defaults the datatype to variant. The variant should be avoided whenever possible, as it can be very CPU and memory intensive. This article demonstrates the different MySQL and VB6 datatypes and how they correlate.
CursorTypes, LockTypes, and CursorLocations (2004.01.22)by Mike HillyerOne of the most common sources of trouble for the beginning VB / MySQL developer seems to revolve around which cursor location to use. Related to the cursor location problem is the choice of cursor type and lock type. The purpose of this article is to assist the Visual Basic developer in choosing the proper cursor location, cursor type, and lock type to use when programming Visual Basic (or VB) applications that use MySQL as a back-end database through ADO and Connector/ODBC (MyODBC).
Why VB/MySQL (2004.01.22)by Mike HillyerMike Hillyer explains why he thinks Visual Basic and MySQL are an ideal combination for application development, and the motivation for his continuing series of articles on the subject.
Accessing MySQL BLOB columns using Visual Basic 6 (2003.12.02)by Mike HillyerMike Hillyer explains how to work with BLOB columns using the ADO 2.5 stream object.
Articles on MySQL.com
MySQL 5.0's Pluggable Storage Engine Architecture Part 1: An Overview
MySQL 5.0's Pluggable Storage Engine Architecture Part 2: A Quick Test Drive
Getting Started with MySQL
Building a Database-Driven Web Site Using PHP and MySQL
MySQL Wizardry - Cross Tabulations
Exploring MySQL in the Microsoft .NET Environment
Event scheduling with Lasso Professional 5
Using AUTO_INCREMENT keys with Connector/J 3.0
Connection pooling with MySQL Connector/J
MySQL Administrator Best Practices
Subqueries in MySQL, Part 1
Employee interviews
Oleksandr "Sanja" Byelkin
Reggie Burnett
Alexander "Salle" Keremidarski
Lenz Grimmer
Sergei Golubchik
Guilhem Bichot
MySQL articles elsewhere
Tuning MySQL for eZ publish by Bård Farsted, August 2006.
Connecting the MySQL GUI Tools to a Remote Server through a Firewall by Mike Hillyer, December 2004.
HP ProLiant server configurations for MySQL in a scale-out architecture, Hewlett-Packard Development Company, September 2004.
Database Templates with MySQL by Russell Dyer for O'Reilly ONLamp.com, March 2004.
Using MySQL from PHP, Part 1 (and Part 2) by John Coggeshall for O'Reilly ONLamp.com, February and March 2004.
Implementing High Availability in MySQL, KarKomaOnline, January 2004.
Open Database Connectivity in Jaguar by Andrew Anderson for O'Reilly MacDevCenter.com, June 2003.
OpenOffice.org 1.0, ODBC, and MySQL 'How-to' by John McCreesh, April 2003
Secure MySQL Database Design by Kristy Westphal for Security Focus, February 2003
HOWTO - Migrating from Microsoft Access to MySQL by Paul DuBois, January 2003
How to use Access 2000 as a database front end by Sanders Kaufman, Jr. for Builder.com, October 2002
Six Reusable PHP/MySQL functions by Sanders Kaufman, Jr. for Builder.com, July 2002
MySQL Performance Tuning: Making sure your MySQL server flies by Jeremy Zawodny for Linux Magazine, December 2001
MySQL Performance Tuning: How to Write Efficient MySQL Applications by Jeremy Zawodny for Linux Magazine, June 2001
MySQL on Mac OS X by Jay Greenspan for Apple Internet Developer, November 2002
Slides from conference presentations
Scaling MySQL and PHP by Jeremy Zawodny, presented at the 2002 PHP Conference
Managing MySQL Replication by Jeremy Zawodny, presented at the 2002 O'Reilly Open Source Conference
MySQL Backup and Recovery by Jeremy Zawodny, presented at the 2002 O'Reilly Open Source Conference
MySQL Optimization by Jeremy Zawodny, presented at the 2002 O'Reilly Open Source Conference
Sites offering MySQL related articles (new items appear regularly on these sites!)
MySQL articles on ONLamp.com
devArticles.com: Articles for MySQL
SitePoint.com: Tutorials and Articles for MySQL
WebMonkey
DevShed: MySQL Help, MySQL Tutorials, MySQL Programming, MySQL Tricks
MySQL Tutorials from the Database Journal