Last active
April 27, 2016 17:41
-
-
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)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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