Skip to content

Instantly share code, notes, and snippets.

@robhardwick
Last active April 27, 2016 17:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robhardwick/88c67aee74f062609595 to your computer and use it in GitHub Desktop.
Save robhardwick/88c67aee74f062609595 to your computer and use it in GitHub Desktop.
Script to download, compile and install a standalone version of MySQL 5.5 on OS X (requires Xcode, cmake and pv)
#!/usr/bin/env bash
set -e
# Check arguments (the install directory)
if [ "$#" -lt 1 ]; then
echo "Usage: $0 <path>";
exit;
fi
# Install path
PREFIX_DIR="${1%/}"
# Check dependencies
dep_missing() {
! hash $1 2>/dev/null
}
if dep_missing pv || dep_missing cmake; then
echo "This script requires Xcode, pv and cmake to work. Try the following:"
echo "1) Installing Xcode (from https://developer.apple.com/xcode/)"
echo "2) Installing Homebrew (from http://brew.sh/)"
echo "3) Installing pv and cmake (brew install pv cmake)"
exit;
fi
# Configuration
ARCHIVE_URL="https://downloads.mysql.com/archives/get/file/mysql-5.5.46.tar.gz"
ARCHIVE="/tmp/mysql.tgz"
CONF_DIR="$PREFIX_DIR/etc"
DATA_DIR="$PREFIX_DIR/data"
SOURCE_DIR="/tmp/mysql-src"
BUILD_DIR="$SOURCE_DIR/mysql-build"
DEFAULT_CHARSET="utf8"
DEFAULT_COLLATION="utf8_general_ci"
# Create dirs
echo "1) CREATE DIRS"
mkdir -pv "$SOURCE_DIR" "$BUILD_DIR" "$PREFIX_DIR" "$CONF_DIR"
# Download and unpack
echo "2) DOWNLOAD"
wget "$ARCHIVE_URL" --output-document="$ARCHIVE"
pv "$ARCHIVE" | tar zxf - -C "$SOURCE_DIR" --strip-components=1
# Configure
echo "3) CONFIGURE"
cd "$SOURCE_DIR"
cmake . \
-DBUILD_CONFIG=mysql_release \
-DCMAKE_INSTALL_PREFIX="$PREFIX_DIR" \
-DCPACK_MONOLITHIC_INSTALL=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET="$DEFAULT_CHARSET" \
-DDEFAULT_COLLATION="$DEFAULT_COLLATION"
# Build
echo "4) BUILD"
make VERBOSE=1
# Install
echo "5) INSTALL"
make install
# Initialise data directory
echo "6) INIT"
$PREFIX_DIR/scripts/mysql_install_db \
--basedir="$PREFIX_DIR" \
--datadir="$DATA_DIR"
# Set config
echo "7) CONFIG"
cat << EOF > "$CONF_DIR/my.cnf"
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 512M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
bind-address = 127.0.0.1
log-bin=mysql-bin
binlog_format=mixed
server-id=1
innodb_data_home_dir = $DATA_DIR
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = $DATA_DIR
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 2400
wait_timeout = 2400
sql_mode = ""
[mysqldump]
quick
max_allowed_packet = 2G
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
EOF
# Cleanup
echo "8) CLEANUP"
rm "$ARCHIVE"
rm -r "$SOURCE_DIR"
# Done
set -f
cat << EOF
9) INSTALL SUCCESS! 🍺 🍻 🍾 🍷 🍸
MySQL Commands
--------------
Start Server: $PREFIX_DIR/bin/mysqld_safe &
Verify Server: $PREFIX_DIR/bin/mysqladmin version
Stop Server: $PREFIX_DIR/bin/mysqladmin -uroot shutdown
Execute SQL: $PREFIX_DIR/bin/mysql -uroot -e'SELECT 5 + 5;'
Create User and Database Example
--------------------------------
$PREFIX_DIR/bin/mysql -uroot << 'EOSQL'
CREATE DATABASE test;
GRANT ALL PRIVILEGES ON test.* TO test@localhost IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
EOSQL
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment