@@ -40,7 +40,7 @@ def __init__(self, config: Settings, wait_initial_replication: bool, databases:
4040 self .config = config
4141 self .databases = databases or config .databases
4242 self .wait_initial_replication = wait_initial_replication
43- self .runners : dict = {}
43+ self .runners : dict [ str : DbReplicatorRunner ] = {}
4444 self .binlog_runner = None
4545 self .db_optimizer = None
4646
@@ -61,6 +61,26 @@ def restart_dead_processes(self):
6161 if self .db_optimizer is not None :
6262 self .db_optimizer .restart_dead_process_if_required ()
6363
64+ def check_databases_updated (self , mysql_api : MySQLApi ):
65+ logger .debug ('check if databases were created / removed in mysql' )
66+ databases = mysql_api .get_databases ()
67+ logger .info (f'mysql databases: { databases } ' )
68+ databases = [db for db in databases if self .config .is_database_matches (db )]
69+ logger .info (f'mysql databases filtered: { databases } ' )
70+ for db in databases :
71+ if db in self .runners :
72+ continue
73+ logger .info (f'running replication for { db } (database created in mysql)' )
74+ runner = self .runners [db ] = DbReplicatorRunner (db_name = db , config_file = self .config .settings_file )
75+ runner .run ()
76+
77+ for db in self .runners .keys ():
78+ if db in databases :
79+ continue
80+ logger .info (f'stop replication for { db } (database removed from mysql)' )
81+ self .runners [db ].stop ()
82+ self .runners .pop (db )
83+
6484 def run (self ):
6585 mysql_api = MySQLApi (
6686 database = None , mysql_settings = self .config .mysql ,
@@ -101,9 +121,13 @@ def run(self):
101121
102122 logger .info ('all replicators launched' )
103123
124+ last_check_db_updated = time .time ()
104125 while not killer .kill_now :
105126 time .sleep (1 )
106127 self .restart_dead_processes ()
128+ if time .time () - last_check_db_updated > self .config .check_db_updated_interval :
129+ self .check_databases_updated (mysql_api = mysql_api )
130+ last_check_db_updated = time .time ()
107131
108132 logger .info ('stopping runner' )
109133
0 commit comments