Advertisement
zamotivator

Untitled

May 30th, 2014
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.78 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. set -eux
  4.  
  5. function query ()
  6. {
  7. local KIND=${1}
  8. local USER=${2}
  9. case ${USER} in
  10. "root")
  11. ${MYSQL} --defaults-file=/srv/${KIND}/my.cnf --user=root --password="${PASSWORD}"
  12. ;;
  13. *)
  14. ${MYSQL} --defaults-file=/srv/${KIND}/my.cnf --user=${USER}
  15. ;;
  16. esac
  17. }
  18.  
  19. function instance_init ()
  20. {
  21. local KIND=$1
  22. local INSTANCE_PATH=/srv/${KIND}
  23. local USER=mysql
  24.  
  25. echo "Creating instance ${INSTANCE_PATH}..."
  26. chmod goa+rwx /srv
  27. pushd ${INSTALL_PATH}
  28. ${INSTALL_PATH}/scripts/mysql_install_db --basedir=/opt/mysql --datadir=/srv/${KIND} --user=${USER}
  29. popd
  30. cp /vagrant/${KIND}.cnf ${INSTANCE_PATH}/my.cnf
  31. chown ${USER}:${USER} ${INSTANCE_PATH}/my.cnf
  32.  
  33. echo "Export password to ${INSTANCE_PATH}/password"
  34. head -n 2 /root/.mysql_secret | tail -n 1 > ${INSTANCE_PATH}/password
  35. rm -f /root/.mysql_secret
  36. }
  37.  
  38.  
  39. function change_password ()
  40. {
  41. until ${MYSQL} --defaults-file=/srv/$1/my.cnf --connect-expired-password --user=root --password="$(cat /srv/$1/password)" -e "SET PASSWORD=PASSWORD('${PASSWORD}')" ; do
  42. sleep 5;
  43. done;
  44. }
  45.  
  46. THREAD_COUNT=4
  47. TABLE_SIZE=100000
  48. MAX_TIME=120
  49. MAX_REQUESTS=100000
  50.  
  51. function sysbench ()
  52. {
  53. local ACTION=${1}
  54. /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} &
  55. local PID=$!
  56. ps ax | grep sysbench
  57. echo $PID > /srv/sysbench.pid
  58. monitor sysbench &
  59. wait $PID
  60. }
  61.  
  62. INSTALL_PATH=/opt/mysql
  63.  
  64. HOSTNAME=repltest
  65. MYSQLD=${INSTALL_PATH}/bin/mysqld
  66. MYSQL=${INSTALL_PATH}/bin/mysql
  67.  
  68. PASSWORD='bighuyata'
  69.  
  70. # Setting up
  71. hostname ${HOSTNAME}
  72. echo ${HOSTNAME} > /etc/hostname
  73. echo "127.0.0.1 ${HOSTNAME}
  74. ::1 ${HOSTNAME}" >> /etc/hosts
  75.  
  76. chmod goa+rwx /vagrant
  77. chmod goa+rwx /vagrant/result
  78. chmod goa+rx ${INSTALL_PATH}
  79. chmod goa+rx ${INSTALL_PATH}/bin
  80. export PATH=${INSTALL_PATH}/bin:${PATH}
  81.  
  82. # Cleaning old results
  83. rm -rf /vagrant/result
  84. mkdir -p /vagrant/result
  85. chmod goa+rwx /vagrant
  86. chmod goa+rwx /vagrant/result
  87.  
  88. # Create master and slave
  89. instance_init master
  90. instance_init slave
  91.  
  92.  
  93.  
  94. # Run master and slave
  95. MASTER_LOG=/vagrant/result/master.std.log
  96. SLAVE_LOG=/vagrant/result/slave.std.log
  97. 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 &
  98. 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 &
  99.  
  100. # Change password for master and slave
  101. change_password master
  102. change_password slave
  103.  
  104. # Create sysbench user
  105. for kind in master slave; do
  106. echo "CREATE USER 'sysbench'@'%';
  107. GRANT ALL ON *.* TO 'sysbench'@'%';
  108. FLUSH PRIVILEGES;" | query ${kind} root
  109. done;
  110.  
  111. # Create replication user on master
  112. echo "Create replication user on master"
  113. echo "CREATE USER 'repl'@'%';
  114. GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  115. FLUSH PRIVILEGES;" | query master root
  116.  
  117. # Create & fill sbtest database
  118. echo "Creating sysbenct test database"
  119. echo "CREATE DATABASE sbtest;" | query master "sysbench"
  120. sysbench prepare
  121.  
  122. # Create dump
  123. echo "Creating dump"
  124. ${INSTALL_PATH}/bin/mysqldump --socket=/srv/master.socket --user=root --password=${PASSWORD} --all-databases --master-data > /vagrant/result/dump
  125. echo "Applying dump"
  126. cat /vagrant/result/dump | query slave root
  127.  
  128. # Get master binar log coordinates
  129. echo "Get master coordinates"
  130. echo "FLUSH TABLES WITH READ LOCK;" | query master root
  131. MASTER_INFO=$(echo "SHOW MASTER STATUS;" | query master root | tail -n 1 | awk '{print $1"\t"$2 }')
  132. MASTER_LOG=$(echo $MASTER_INFO | awk '{ print $1 }')
  133. MASTER_POS=$(echo $MASTER_INFO | awk '{ print $2 }')
  134. echo "UNLOCK TABLES;" | query master root
  135.  
  136. echo "MASTER_LOG=${MASTER_LOG}"
  137. echo "MASTER_POS=${MASTER_POS}"
  138.  
  139. 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='';"
  140.  
  141. echo "CHANGE MASTER TO ${CHANGE_MASTER_TO}"
  142. echo "${CHANGE_MASTER_TO}" | query slave root | echo
  143. sleep 2
  144. echo "SHOW SLAVE STATUS"
  145. echo "SHOW SLAVE STATUS \G;" | query slave root | echo
  146. sleep 2
  147. echo "STAR SLAVE"
  148. echo "START SLAVE;" | query slave root | echo
  149. sleep 2
  150. echo "SHOW SLAVE STATUS"
  151. echo "SHOW SLAVE STATUS \G;" | query slave root | echo
  152.  
  153. function monitor ()
  154. {
  155. local NAME=$1
  156. top -p $(cat /srv/${NAME}.pid) -d 1 -b > /vagrant/${NAME}.top
  157. }
  158.  
  159. monitor master &
  160. monitor slave &
  161.  
  162. sleep 2
  163.  
  164. sysbench run
  165.  
  166.  
  167. sleep 2
  168.  
  169.  
  170. echo "SHOW SLAVE STATUS"
  171. echo "SHOW SLAVE STATUS \G;" | query slave root | echo
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement