From 43dfc18917539b62092b2e9f163abf3a442849fa Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Thu, 21 Jun 2018 10:23:20 +0200 Subject: replicate-db: script to set up a db replication slave --- replicate-db | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 replicate-db diff --git a/replicate-db b/replicate-db new file mode 100755 index 0000000..264e782 --- /dev/null +++ b/replicate-db @@ -0,0 +1,77 @@ +#!/bin/bash + +set -e + +if [ -d '/var/lib/mysql' ]; then + read -p 'mariadb seems to be installed already - I will remove it first.' -r s + if [ -n "${s}" ]; then + echo 'Aborted.' + exit + fi + sudo systemctl stop mysqld || true + sudo pacman -Rs mariadb || true + sudo rm -rf --one-file-system '/var/lib/mysql' '/etc/mysql' +fi + +sudo pacman -S --noconfirm mariadb +sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql +sudo sed -i ' + /myisam_sort_buffer_size/ a group_concat_max_len = 4096 + /^#server-id/ { + s/^#// + b + } + s/^server-id/#\0/ +' '/etc/mysql/my.cnf' +sudo systemctl start mysqld + +read -p 'enter our new root-pw: ' -s -r our_root_pw +printf '\n' +read -p 'enter remote root-pw: ' -s -r remote_root_pw +printf '\n' + +replikat_pw=$( + head -c12 /dev/urandom | \ + base64 -w0 +) + +printf '\n\n%s\n%s\n\n\n\n\n' "${our_root_pw}" "${our_root_pw}" | \ + sudo mysql_secure_installation + +tmp_file=$(mktemp) +trap 'rm "${tmp_file}"' EXIT + +printf '%s\n' "${remote_root_pw}" | \ + ssh buildmaster ' + echo "logged in" >&2; + mysql buildmaster -u root -p -e "'"$( + printf "DROP USER IF EXISTS 'replikat'@'%s';\n" \ + "$(hostname -f)" + printf "CREATE USER 'replikat'@'%s' IDENTIFIED BY '%s';\n" \ + "$(hostname -f)" \ + "${replikat_pw}" + printf "GRANT REPLICATION SLAVE ON *.* TO 'replikat'@'%s';\n" \ + "$(hostname -f)" + printf 'FLUSH PRIVILEGES;\n' + printf 'QUIT\n' + )"'" >&2; + echo "created user" >&2; + cd /var/backup; + ls -t | grep -m1 '"'"'^database-.*\.xz$'"'"' | xargs pv + echo "copied dump" >&2; + ' > "${tmp_file}" + +{ + printf 'SHOW SLAVE STATUS;\n' + printf "CHANGE MASTER TO MASTER_HOST='%s', MASTER_PORT=%s, MASTER_USER='%s', MASTER_PASSWORD='%s';\n" \ + 'buildmaster.archlinux32.org' \ + 3306 \ + 'replikat' \ + "${replikat_pw}" + xzcat "${tmp_file}" | pv + xzgrep -- '^-- CHANGE MASTER TO ' "${tmp_file}" | \ + sed 's/^-- //' + printf 'START SLAVE;\n' + printf 'SHOW SLAVE STATUS;\n' +} | \ + mysql -u root -p"${our_root_pw}" -- cgit v1.2.3