Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- set -eux
- function query ()
- {
- local KIND=${1}
- local USER=${2}
- case ${USER} in
- "root")
- ${MYSQL} --defaults-file=/srv/${KIND}/my.cnf --user=root --password="${PASSWORD}"
- ;;
- *)
- ${MYSQL} --defaults-file=/srv/${KIND}/my.cnf --user=${USER}
- ;;
- esac
- }
- function instance_init ()
- {
- local KIND=$1
- local INSTANCE_PATH=/srv/${KIND}
- local USER=mysql
- echo "Creating instance ${INSTANCE_PATH}..."
- chmod goa+rwx /srv
- pushd ${INSTALL_PATH}
- ${INSTALL_PATH}/scripts/mysql_install_db --basedir=/opt/mysql --datadir=/srv/${KIND} --user=${USER}
- popd
- cp /vagrant/${KIND}.cnf ${INSTANCE_PATH}/my.cnf
- chown ${USER}:${USER} ${INSTANCE_PATH}/my.cnf
- echo "Export password to ${INSTANCE_PATH}/password"
- head -n 2 /root/.mysql_secret | tail -n 1 > ${INSTANCE_PATH}/password
- rm -f /root/.mysql_secret
- }
- function change_password ()
- {
- until ${MYSQL} --defaults-file=/srv/$1/my.cnf --connect-expired-password --user=root --password="$(cat /srv/$1/password)" -e "SET PASSWORD=PASSWORD('${PASSWORD}')" ; do
- sleep 5;
- done;
- }
- THREAD_COUNT=4
- TABLE_SIZE=100000
- MAX_TIME=120
- MAX_REQUESTS=100000
- function sysbench ()
- {
- local ACTION=${1}
- /usr/bin/sysbench --num-threads=${THREAD_COUNT} --max-requests=${MAX_REQUESTS} --max-time=${MAX_TIME} --test=oltp --db-driver=mysql --mysql-socket=/srv/master.socket --mysql-db=sbtest --mysql-user=sysbench --oltp-test-mode=complex --oltp-table-size=${TABLE_SIZE} ${ACTION} &
- local PID=$!
- ps ax | grep sysbench
- echo $PID > /srv/sysbench.pid
- monitor sysbench &
- wait $PID
- }
- INSTALL_PATH=/opt/mysql
- HOSTNAME=repltest
- MYSQLD=${INSTALL_PATH}/bin/mysqld
- MYSQL=${INSTALL_PATH}/bin/mysql
- PASSWORD='bighuyata'
- # Setting up
- hostname ${HOSTNAME}
- echo ${HOSTNAME} > /etc/hostname
- echo "127.0.0.1 ${HOSTNAME}
- ::1 ${HOSTNAME}" >> /etc/hosts
- chmod goa+rwx /vagrant
- chmod goa+rwx /vagrant/result
- chmod goa+rx ${INSTALL_PATH}
- chmod goa+rx ${INSTALL_PATH}/bin
- export PATH=${INSTALL_PATH}/bin:${PATH}
- # Cleaning old results
- rm -rf /vagrant/result
- mkdir -p /vagrant/result
- chmod goa+rwx /vagrant
- chmod goa+rwx /vagrant/result
- # Create master and slave
- instance_init master
- instance_init slave
- # Run master and slave
- MASTER_LOG=/vagrant/result/master.std.log
- SLAVE_LOG=/vagrant/result/slave.std.log
- su mysql -c "export PATH=${INSTALL_PATH}/bin:${PATH}; nohup ${INSTALL_PATH}/bin/mysqld --defaults-file=/srv/master/my.cnf" 1>${MASTER_LOG} 2>&1 &
- su mysql -c "export PATH=${INSTALL_PATH}/bin:${PATH}; nohup ${INSTALL_PATH}/bin/mysqld --defaults-file=/srv/slave/my.cnf" 1>${SLAVE_LOG} 2>&1 &
- # Change password for master and slave
- change_password master
- change_password slave
- # Create sysbench user
- for kind in master slave; do
- echo "CREATE USER 'sysbench'@'%';
- GRANT ALL ON *.* TO 'sysbench'@'%';
- FLUSH PRIVILEGES;" | query ${kind} root
- done;
- # Create replication user on master
- echo "Create replication user on master"
- echo "CREATE USER 'repl'@'%';
- GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
- FLUSH PRIVILEGES;" | query master root
- # Create & fill sbtest database
- echo "Creating sysbenct test database"
- echo "CREATE DATABASE sbtest;" | query master "sysbench"
- sysbench prepare
- # Create dump
- echo "Creating dump"
- ${INSTALL_PATH}/bin/mysqldump --socket=/srv/master.socket --user=root --password=${PASSWORD} --all-databases --master-data > /vagrant/result/dump
- echo "Applying dump"
- cat /vagrant/result/dump | query slave root
- # Get master binar log coordinates
- echo "Get master coordinates"
- echo "FLUSH TABLES WITH READ LOCK;" | query master root
- MASTER_INFO=$(echo "SHOW MASTER STATUS;" | query master root | tail -n 1 | awk '{print $1"\t"$2 }')
- MASTER_LOG=$(echo $MASTER_INFO | awk '{ print $1 }')
- MASTER_POS=$(echo $MASTER_INFO | awk '{ print $2 }')
- echo "UNLOCK TABLES;" | query master root
- echo "MASTER_LOG=${MASTER_LOG}"
- echo "MASTER_POS=${MASTER_POS}"
- CHANGE_MASTER_TO="CHANGE MASTER TO MASTER_HOST='localhost', MASTER_PORT=53000, MASTER_USER='repl', MASTER_LOG_FILE='${MASTER_LOG}', MASTER_LOG_POS=${MASTER_POS}, MASTER_BIND='';"
- echo "CHANGE MASTER TO ${CHANGE_MASTER_TO}"
- echo "${CHANGE_MASTER_TO}" | query slave root | echo
- sleep 2
- echo "SHOW SLAVE STATUS"
- echo "SHOW SLAVE STATUS \G;" | query slave root | echo
- sleep 2
- echo "STAR SLAVE"
- echo "START SLAVE;" | query slave root | echo
- sleep 2
- echo "SHOW SLAVE STATUS"
- echo "SHOW SLAVE STATUS \G;" | query slave root | echo
- function monitor ()
- {
- local NAME=$1
- top -p $(cat /srv/${NAME}.pid) -d 1 -b > /vagrant/${NAME}.top
- }
- monitor master &
- monitor slave &
- sleep 2
- sysbench run
- sleep 2
- echo "SHOW SLAVE STATUS"
- echo "SHOW SLAVE STATUS \G;" | query slave root | echo
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement