sr-scripts 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -136,7 +136,7 @@ end
136
136
 
137
137
  random_id = rand(36**8).to_s(36)
138
138
  attributes = Hash.new
139
- attributes["instance_id"] = `curl http://169.254.169.254/latest/meta-data/instance-id`
139
+ attributes["instance_id"] = `curl -s http://169.254.169.254/latest/meta-data/instance-id`
140
140
  attributes["snapshots"] = snapshots.join(",")
141
141
  attributes["timestamp"] = Time.now.to_i
142
142
  attributes["master_log_file"] = master_info["MASTER_LOG_FILE"]
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'fog'
5
+ require 'mysql'
6
+ require 'optparse'
7
+
8
+ options = {}
9
+
10
+ optparse = OptionParser.new do|opts|
11
+ opts.on( '--current-master-id INSTANCE_ID', 'AWS Instance Id Of Current Master Machine') do |o|
12
+ options[:current_master_id] = o
13
+ end
14
+ opts.on( '--new-master-id INSTANCE_ID', 'AWS Instance Id Of Machine To Promote To Master') do |o|
15
+ options[:new_master_id] = o
16
+ end
17
+ opts.on( '--mysql-user USER', 'Mysql User') do |o|
18
+ options[:mysql_user] = o
19
+ end
20
+ opts.on( '--mysql-pass PASSWORD', 'Mysql Password') do |o|
21
+ options[:mysql_password] = o
22
+ end
23
+ opts.on( '-h', '--help', 'Display this screen' ) do
24
+ puts opts
25
+ exit
26
+ end
27
+ end
28
+
29
+ optparse.parse!
30
+
31
+ if(options[:current_master_id] == nil || options[:new_master_id] == nil)
32
+ p "Must specify --current-master-id AND --new-master-id"
33
+ exit
34
+ end
35
+
36
+ connection = Fog::Compute.new(:provider => "AWS", :region => "us-west-1")
37
+
38
+ def kill_mysql_connections(db)
39
+ results = db.query "SHOW PROCESSLIST"
40
+ results.each_hash do |row|
41
+ unless row["User"] == "system user" || row["Command"] == 'Binlog Dump' || row["Info"] == "SHOW PROCESSLIST"
42
+ puts row["Id"]
43
+ db.query "KILL #{row['Id']};"
44
+ end
45
+ end
46
+ end
47
+
48
+ def get_private_ip(fog, instance_id)
49
+ return fog.servers.get(instance_id).private_ip_address
50
+ end
51
+
52
+ mysql_user = options[:mysql_user]
53
+ mysql_pass = options[:mysql_password]
54
+
55
+ current_master_ip = get_private_ip(connection, options[:current_master_id])
56
+ new_master_ip = get_private_ip(connection, options[:new_master_id])
57
+
58
+ current_master = Mysql.new(current_master_ip, mysql_user, mysql_pass)
59
+ new_master = Mysql.new(new_master_ip, mysql_user, mysql_pass)
60
+
61
+ current_master.query("SET GLOBAL read_only = 1")
62
+ sleep 1 # HACKY CRAP
63
+ kill_mysql_connections current_master
64
+ new_master.query("STOP SLAVE;")
65
+ new_master.query("SET GLOBAL read_only = 0")
66
+
67
+
68
+
69
+
@@ -1,5 +1,5 @@
1
1
  module Sr
2
2
  module Scripts
3
- VERSION = "0.0.11"
3
+ VERSION = "0.0.12"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sr-scripts
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 11
10
- version: 0.0.11
9
+ - 12
10
+ version: 0.0.12
11
11
  platform: ruby
12
12
  authors:
13
13
  - Davy Campano
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-15 00:00:00 -04:00
18
+ date: 2011-03-25 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -25,6 +25,7 @@ email:
25
25
  executables:
26
26
  - sr-backup-mysql
27
27
  - sr-ec2-consistent-snapshot
28
+ - sr-promote-to-master
28
29
  - sr-send-email
29
30
  - sr-start-slave
30
31
  - sr-update-dns
@@ -39,6 +40,7 @@ files:
39
40
  - Rakefile
40
41
  - bin/sr-backup-mysql
41
42
  - bin/sr-ec2-consistent-snapshot
43
+ - bin/sr-promote-to-master
42
44
  - bin/sr-send-email
43
45
  - bin/sr-start-slave
44
46
  - bin/sr-update-dns