fluent-plugin-mysql-replicator 0.2.0 → 0.2.1
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.
data/README.md
CHANGED
|
@@ -20,7 +20,7 @@ gem install fluent-plugin-mysql-replicator
|
|
|
20
20
|
|
|
21
21
|
It is useful for these purpose.
|
|
22
22
|
|
|
23
|
-
* try it on this plugin.
|
|
23
|
+
* try it on this plugin quickly.
|
|
24
24
|
* replicate small record under a millons table.
|
|
25
25
|
|
|
26
26
|
**Note:**
|
|
@@ -71,6 +71,9 @@ On syncing 300 million rows table, it will consume around 800MB of memory with r
|
|
|
71
71
|
|
|
72
72
|
# Set frequency of sending bulk request to Elasticsearch node.
|
|
73
73
|
flush_interval 5s
|
|
74
|
+
|
|
75
|
+
# Queued chunks are flushed at shutdown process.
|
|
76
|
+
flush_at_shutdown yes
|
|
74
77
|
</store>
|
|
75
78
|
</match>
|
|
76
79
|
`````
|
|
@@ -139,7 +142,7 @@ CREATE TABLE `settings` (
|
|
|
139
142
|
`database` varchar(255) NOT NULL,
|
|
140
143
|
`query` TEXT NOT NULL,
|
|
141
144
|
`interval` int(11) NOT NULL,
|
|
142
|
-
`primary_key` varchar(
|
|
145
|
+
`primary_key` varchar(255) DEFAULT 'id',
|
|
143
146
|
`enable_delete` int(11) DEFAULT '1',
|
|
144
147
|
PRIMARY KEY (`id`),
|
|
145
148
|
UNIQUE KEY `name` (`name`)
|
|
@@ -198,6 +201,9 @@ it is a sample which you have inserted row.
|
|
|
198
201
|
|
|
199
202
|
# Set frequency of sending bulk request to Elasticsearch node.
|
|
200
203
|
flush_interval 5s
|
|
204
|
+
|
|
205
|
+
# Queued chunks are flushed at shutdown process.
|
|
206
|
+
flush_at_shutdown yes
|
|
201
207
|
</match>
|
|
202
208
|
`````
|
|
203
209
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
Gem::Specification.new do |s|
|
|
3
3
|
s.name = "fluent-plugin-mysql-replicator"
|
|
4
|
-
s.version = "0.2.
|
|
4
|
+
s.version = "0.2.1"
|
|
5
5
|
s.authors = ["Kentaro Yoshida"]
|
|
6
6
|
s.email = ["y.ken.studio@gmail.com"]
|
|
7
7
|
s.homepage = "https://github.com/y-ken/fluent-plugin-mysql-replicator"
|
|
@@ -43,6 +43,7 @@ module Fluent
|
|
|
43
43
|
begin
|
|
44
44
|
poll
|
|
45
45
|
rescue StandardError => e
|
|
46
|
+
$log.error "mysql_replicator: failed to execute query."
|
|
46
47
|
$log.error "error: #{e.message}"
|
|
47
48
|
$log.error e.backtrace.join("\n")
|
|
48
49
|
end
|
|
@@ -52,6 +53,7 @@ module Fluent
|
|
|
52
53
|
table_hash = Hash.new
|
|
53
54
|
ids = Array.new
|
|
54
55
|
loop do
|
|
56
|
+
start_time = Time.now
|
|
55
57
|
previous_ids = ids
|
|
56
58
|
current_ids = Array.new
|
|
57
59
|
query(@query).each do |row|
|
|
@@ -69,7 +71,11 @@ module Fluent
|
|
|
69
71
|
end
|
|
70
72
|
ids = current_ids
|
|
71
73
|
if @enable_delete
|
|
72
|
-
|
|
74
|
+
if previous_ids.empty?
|
|
75
|
+
deleted_ids = [*1...current_ids.max] - current_ids
|
|
76
|
+
else
|
|
77
|
+
deleted_ids = previous_ids - current_ids
|
|
78
|
+
end
|
|
73
79
|
if deleted_ids.count > 0
|
|
74
80
|
hash_delete_by_list(table_hash, deleted_ids)
|
|
75
81
|
deleted_ids.each do |id|
|
|
@@ -78,6 +84,8 @@ module Fluent
|
|
|
78
84
|
end
|
|
79
85
|
end
|
|
80
86
|
end
|
|
87
|
+
elapsed_time = sprintf("%0.02f", (Time.now - start_time) % 60)
|
|
88
|
+
$log.info "mysql_replicator: finished execution :tag=>#{tag} :elapsed_time=>#{elapsed_time} seconds"
|
|
81
89
|
sleep @interval
|
|
82
90
|
end
|
|
83
91
|
end
|
|
@@ -65,6 +65,7 @@ module Fluent
|
|
|
65
65
|
primary_key = config['primary_key']
|
|
66
66
|
previous_id = current_id = 0
|
|
67
67
|
loop do
|
|
68
|
+
start_time = Time.now
|
|
68
69
|
db = get_origin_connection(config)
|
|
69
70
|
db.query(config['query']).each do |row|
|
|
70
71
|
@mutex.lock
|
|
@@ -76,11 +77,16 @@ module Fluent
|
|
|
76
77
|
@mutex.unlock
|
|
77
78
|
end
|
|
78
79
|
db.close
|
|
80
|
+
elapsed_time = sprintf("%0.02f", (Time.now - start_time) % 60)
|
|
81
|
+
$log.info "mysql_replicator_multi: finished execution :setting_name=>#{config['name']} :elapsed_time=>#{elapsed_time} seconds"
|
|
79
82
|
sleep config['interval']
|
|
80
83
|
end
|
|
81
84
|
rescue StandardError => e
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
@mutex.synchronize {
|
|
86
|
+
$log.error "mysql_replicator_multi: failed to execute query. :config=>#{masked_config}"
|
|
87
|
+
$log.error "error: #{e.message}"
|
|
88
|
+
$log.error e.backtrace.join("\n")
|
|
89
|
+
}
|
|
84
90
|
end
|
|
85
91
|
end
|
|
86
92
|
|
|
@@ -21,7 +21,7 @@ CREATE TABLE `settings` (
|
|
|
21
21
|
`database` varchar(255) NOT NULL,
|
|
22
22
|
`query` TEXT NOT NULL,
|
|
23
23
|
`interval` int(11) NOT NULL,
|
|
24
|
-
`primary_key` varchar(
|
|
24
|
+
`primary_key` varchar(255) DEFAULT 'id',
|
|
25
25
|
`enable_delete` int(11) DEFAULT '1',
|
|
26
26
|
PRIMARY KEY (`id`),
|
|
27
27
|
UNIQUE KEY `name` (`name`)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fluent-plugin-mysql-replicator
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-12-
|
|
12
|
+
date: 2013-12-13 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rake
|