Skip to content

Instantly share code, notes, and snippets.

@dotmanila
Created November 1, 2017 16:35
Show Gist options
  • Save dotmanila/82c1dc620149827fc81fafe6af30130d to your computer and use it in GitHub Desktop.
Save dotmanila/82c1dc620149827fc81fafe6af30130d to your computer and use it in GitHub Desktop.
ZFS on Linux Encrypted Crash/Exchange Error
#!/bin/bash
DISK=xvdb
BACKUPVOL=xvdc
USER=ubuntu
KERNEL=$(uname -r)
wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_0.1-4.xenial_all.deb
sudo apt -y update
sudo apt -y upgrade
sudo apt -y install make qpress netcat socat sysstat mbuffer \
lsof linux-tools-common linux-tools-${KERNEL} linux-tools-${KERNEL}
sudo apt -y install build-essential autoconf libtool gawk alien fakeroot linux-headers-${KERNEL}
sudo apt -y install zlib1g-dev uuid-dev libattr1-dev libblkid-dev libselinux-dev libudev-dev libssl-dev
sudo apt -y install parted lsscsi ksh dkms dstat
git clone https://github.com/zfsonlinux/spl
git clone https://github.com/zfsonlinux/zfs
cd spl
git checkout master
sh autogen.sh
./configure
make -s -j$(nproc)
make deb
REL=$(ls | grep "kmod-spl-${KERNEL}"|cut -d'_' -f2)
sudo dpkg -i kmod-spl-${KERNEL}_${REL}_amd64.deb \
kmod-spl-devel-${KERNEL}_${REL}_amd64.deb \
spl_${REL}_amd64.deb spl-dkms_${REL}_all.deb
cd ../zfs
git checkout master
sh autogen.sh
./configure
make -s -j$(nproc)
make deb
REL=$(ls | grep "kmod-zfs-${KERNEL}"|cut -d'_' -f2)
sudo dpkg -i kmod-zfs-${KERNEL}_${REL}_amd64.deb \
kmod-zfs-devel-${KERNEL}_${REL}_amd64.deb \
libnvpair1_${REL}_amd64.deb libuutil1_${REL}_amd64.deb \
libzfs2_${REL}_amd64.deb libzfs2-devel_${REL}_amd64.deb \
libzpool2_${REL}_amd64.deb zfs_${REL}_amd64.deb \
zfs-dkms_${REL}_all.deb zfs-dracut_${REL}_amd64.deb \
zfs-initramfs_${REL}_amd64.deb zfs-test_${REL}_amd64.deb
sudo /sbin/modprobe zfs
sudo zpool create -o ashift=12 mysql /dev/$DISK
sudo zfs set recordsize=16k mysql
sudo zfs set atime=off mysql
sudo zfs set logbias=latency mysql
sudo zfs set primarycache=metadata mysql
sudo zfs set compression=lz4 mysql
head -c32 /dev/urandom > /dev/shm/zfskey
sudo zfs create -o recordsize=128K -o encryption=on -o keyformat=raw \
-o keylocation=file:///dev/shm/zfskey mysql/logs
sudo zfs create -o recordsize=16K -o encryption=on -o keyformat=raw \
-o keylocation=file:///dev/shm/zfskey mysql/data
sudo mkdir -p /mysql/logs/innodb
sudo mkdir -p /mysql/data/msb
sudo chown -R $USER.$USER /mysql/*
cd ~
wget https://github.com/datacharmer/mysql-sandbox/releases/download/3.2.14/MySQL-Sandbox-3.2.14.tar.gz
tar xzf MySQL-Sandbox-3.2.14.tar.gz
cd MySQL-Sandbox-3.2.14/
perl Makefile.PL PREFIX=/usr
make
sudo make install
cd
mkdir mysql
cd mysql
wget https://www.percona.com/downloads/Percona-Server-LATEST/Percona-Server-5.7.19-17/binary/tarball/Percona-Server-5.7.19-17-Linux.x86_64.ssl100.tar.gz
tar xzf Percona-Server-5.7.19-17-Linux.x86_64.ssl100.tar.gz
mv -f Percona-Server-5.7.19-17-Linux.x86_64.ssl100 5.7.190
sudo ln -s /lib/x86_64-linux-gnu/libssl.so.1.0.0 /lib/x86_64-linux-gnu/libssl.so.10
sudo ln -s /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /lib/x86_64-linux-gnu/libcrypto.so.10
env SANDBOX_BINARY=/home/$USER/mysql make_sandbox 5.7.190 -- \
--upper_directory=/mysql/data/msb --my_clause=innodb_buffer_pool_size=512M \
--my_clause=innodb_log_file_size=512M --my_clause=innodb_flush_method=O_DSYNC \
--my_clause=innodb_log_group_home_dir=/mysql/logs/innodb \
--my_clause=binlog_format=ROW --my_clause=bind-address=0.0.0.0 \
--my_clause=default-storage-engine=InnoDB --my_clause=innodb_flush_log_at_trx_commit=1 \
--my_clause=log_bin=mysql-bin --my_clause=server_id=1 --no_confirm
time sysbench --db-driver=mysql --mysql-user=msandbox --mysql-password=msandbox \
--mysql-db=test --mysql-host=127.0.0.1 --mysql-port=57190 --tables=1 \
--table-size=100000 --auto-inc=off --threads=1 --time=0 \
--rand-type=pareto oltp_read_only prepare
sudo mkfs.ext4 /dev/$BACKUPVOL
sudo mkdir /backups
sudo mount /dev/$BACKUPVOL /backups
sudo mkdir /backups/zfs
sudo chown $USER.$USER /backups/*
sudo cp /dev/shm/zfskey /backups/zfs/
sudo zfs snapshot -r mysql@sst
sudo zfs send -wR mysql@sst > /backups/zfs/full.zfs
/mysql/data/msb/msb_5_7_190/stop
sudo zpool destroy -f mysql
sudo rm -rf /dev/shm/zfskey
sudo zpool create -o ashift=12 mysql /dev/$DISK
sudo zfs set recordsize=16k mysql
sudo zfs set atime=off mysql
sudo zfs set logbias=latency mysql
sudo zfs set primarycache=metadata mysql
sudo zfs set compression=lz4 mysql
cat /backups/zfs/full.zfs | sudo zfs recv -F mysql
sudo cp /backups/zfs/zfskey /dev/shm/
sudo zfs load-key mysql/data
sudo zfs load-key mysql/logs
sudo zfs mount -a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment