Just add the respawn-option to your upstart-job (for mysql or asterisk).
You may also additionally add the respawn limit-option:
respawn limit COUNT INTERVAL
"If the job is respawned more than COUNT times in INTERVAL seconds, it will be considered to be having deeper problems and will be stopped."
E.g.
respawn
respawn limit 3 60
So your process will be automatically restartet if it crashes, but if it crashes more than 3 times in 60 seconds, it will not be restarted any more.
Documentation: Upstart-Cookbook
Here is an example upstart-job for asterisk, taken from http://www.digium.com/
# asterisk
#
# Upstart control file for the Asterisk PBX
#
# To install, rename this file to 'asterisk' and copy it to /etc/event.d/
# On Debian: copy to /etc/init/
#
# To start asterisk manually:
# sudo start asterisk
#
# To stop asterisk manually:
# sudo stop asterisk
#
# Asterisk is started with an "interactive console", though redirected
# to/from /dev/null . The concept of a main console is bad. OTOH, the main
# process should not detach from the console if we work with upstart and
# alike.
#
# The username 'asterisk' is currently hardwired here, and likewise the
# varrundir.
#
description "Asterisk PBX"
#version "1.8"
start on runlevel [2345]
stop on runlevel [!2345]
pre-start script
# Since Ubuntu clears /var/run on reboot, create this before we try to start
if [ ! -d /var/run/asterisk ]; then
mkdir -p asterisk /var/run/asterisk
chown asterisk: /var/run/asterisk
fi
end script
respawn
exec /usr/sbin/asterisk -U asterisk -g -f