рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рджрд┐рдпрд╛ рдЧрдпрд╛: рд▓реИрдкрдЯреЙрдк рдХреЗ рд╕рд╛рде рдХрдИ рд╕реЗрд▓реНрд╕рдореИрди рд╣реИрдВ рдЬреЛ рджреЗрд╢ рднрд░ рдореЗрдВ рдпрд╛рддреНрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рдХреЛ рдХреБрдЫ рдмреЗрдЪрддреЗ рд╣реИрдВред
рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдорд╛рд▓ рдФрд░ рдХреАрдорддреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдкрд░ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕рдордп-рд╕рдордп рдкрд░ рд╡реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХреЗрдВрджреНрд░реАрдп рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдорд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЗрдВ:
- рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдФрд░ рдЖрд╡реГрддреНрддрд┐ рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рдЕрд╡рдзрд┐ рдХреА рддрд░рд╣ред
- рд╕рдм рдХреБрдЫ рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ "salespeople" рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реЗ salespeople рд╣реИрдВред
- рд╕рдорд╛рдзрд╛рди рдореИрд╕рдХрд▓ рдорд╛рд╕реНрдЯрд░-рджрд╛рд╕ рдкреНрд░рддрд┐рдХреГрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рд╛рд▓рдд рд╕реЗ рдирд┐рд╖реНрдХрд░реНрд╖:
- рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рдЧреНрд░рд╛рд╣рдХ рдХреА рдУрд░ (рджрд╛рд╕) рдиреНрдпреВрдирддрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдореБрдХреБрдЯ рдкрд░ рдХреЛрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ, рд╕рдм рдХреБрдЫ mysql рдХреЗ рдЕрдВрджрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрдм рдФрд░ рдХрд┐рд╕ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕реЗрд▓реНрд╕рдкрд░реНрд╕рди рдХреЛ рдорд╛рд╕реНрдЯрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдорд╛рд╕реНрдЯрд░ рдкрд░ рдмрд┐рдирд▓реЙрдЧ рдХреЛ рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рджрд╛рд╕ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдбрд╛рдЙрдирд▓реЛрдб рди рдХрд░реЗрдВред
рд╕рдорд╛рдзрд╛рди:
- рдорд╛рд╕реНрдЯрд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ рдЬреЛ рджрд╛рд╕ рдФрд░ рдХрд┐рддрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдбрд╛рдЙрдирд▓реЛрдб" рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ рдХрд┐ рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ "рд▓рдЬрд╝реАрдЬрд╝" рдЧреБрд▓рд╛рдо рд╣реИред
- рдЕрдиреНрдп рд╕рднреА рдмрд┐рдирд▓реЙрдЧ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдХрд╛рд░реНрдп рдЗрд╕ рддрдереНрдп рдкрд░ рдЙрдмрд▓рддрд╛ рд╣реИ рдХрд┐ рджрд╛рд╕ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдорд╛рд╕реНрдЯрд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рджрд╛рд╕ рдиреЗ рдХрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕реЗ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдерд╛ред
рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдп рд╣реИрдВ:
1. рджрд╛рд╕ рдкрд░, рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдЕрдм рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд┐рдирд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
2. рдорд╛рд╕реНрдЯрд░ рдХреЛ рдЗрд╕рдХреА рд╕реВрдЪрдирд╛ рджреЗрдВред
3. рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдкрд░, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрд┐рдирд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред
рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдмрд╛рд╣рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдЪрд▓рд╛рдИ рдЬрд╛ рд╕рдХрддреА (рдХрд╛рд░реНрдп рдХреА рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░)ред рд╕рдВрдЧреНрд░рд╣рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд░рд╣рддреА рд╣реИрдВред
"рд╢реЛ рд╕реНрд▓реЗрд╡ рд╕реНрдЯреЗрдЯрд╕" рд╕реЗ рдХреЛрдИ рднреА рдлрд╝реАрд▓реНрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ ... рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ ...
рд╣рдо рдкреНрд░рддрд┐рдХреГрддрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдкрд░ рдПрдХ рд▓реЗрдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ Binlog, Binlog рдХреЛ рдЬрд▓реНрдж рдпрд╛ рдмрд╛рдж рдореЗрдВ рджрд╛рд╕ рдФрд░ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЧреБрд▓рд╛рдо рдкрд░ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдореВрд▓реНрдп рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдХрд┐рддрдиреЗ рд╕рдордп рддрдХ рдорд╛рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдкрдХрдбрд╝рд╛ :)

рдЗрд╕рд▓рд┐рдП, рдорд╛рд╕реНрдЯрд░ рдкрд░ рдмрдирд╛рдПрдВ (рдкреНрд░рддрд┐рдХреГрддрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ !!!) рдФрд░ 1 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдбрд╛рд▓реЗрдВ:
CREATE TABLE `master_tick` ( `id` mediumint(9) NOT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ); INSERT INTO master_tick SET time=NOW();
рдФрд░ рдЙрд╕ рдкрд░ рдИрд╡реЗрдВрдЯ рд▓рдЯрдХрд╛рдПрдБ (рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдирд╛рдо рд╕рд╣реА рдХрд░реЗрдВ):
CREATE EVENT master_tick ON SCHEDULE EVERY 1 MINUTE DO UPDATE my_db.master_tick set time=NOW();
рд╕рдм рдХреБрдЫ рдЕрдм рд╣рд░ рдорд┐рдирдЯ рд╣реИ рдЯреЗрдмрд▓ рдореЗрдВ рдорд╛рд╕реНрдЯрд░_рдЯрд┐рдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рдмрд┐рдирд▓реЙрдЧ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рд╛рдБ my.cnf рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ
event_scheduler=1
рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рднрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ:
SET GLOBAL event_scheduler=ON;
рдЦреИрд░, рдЕрдм рдЧреБрд▓рд╛рдо рдкрд░ рд╣рдореЗрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдорд╛рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд┐рддрдирд╛ рддрд╛рд▓рдореЗрд▓ рдмрд┐рдард╛рдпрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рджрд╛рд╕ рд╕реЗ рд▓реЗрдХрд░ рдорд╛рд╕реНрдЯрд░ рддрдХ рдЖрдк рдХреЗрд╡рд▓ "рд╕реНрдерд╛рдиреАрдп" рдЯреЗрдмрд▓ рдЗрдВрдЬрди = рдлреЗрдбреЗрд░реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ MYSQL рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ;
рдШрдЯрдирд╛ рджрд╛рд╕ рдкрд░ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рдлреЗрдбреЗрд░реЗрдЯ рдЯреЗрдмрд▓ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдкрд░ рд╕реНрдерд┐рдд рд╣реИред

рдЪрд▓реЛ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ
рдорд╛рд╕реНрдЯрд░ рдкрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдБ,
CREATE TABLE `slaves` ( `server_id` int(11) NOT NULL, `master_tick_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY `server_id` (`server_id`) )
рджрд╛рд╕ рдкрд░, рдЙрд╕рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:
CREATE TABLE `slaves` ( `slave_server_id` int(11) NOT NULL, `master_tick_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY `server_id` (`server_id`) ) ENGINE=FEDERATED CONNECTION='mysql://user:passwd@mysql_master.mydomain.com:3306/test/slaves'
рджрд╛рд╕ рдкрд░, рдорд╛рд╕реНрдЯрд░_рдЯреАрдХ рдЯреЗрдмрд▓ рд╕реЗ рджрд╛рд╕реЛрдВ рддрдХ рд╕рдордп рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдПрдВ
, server_id рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рддрд╛рдХрд┐ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рд╕рдордЭ рд╕рдХреЗ рдХрд┐ рдХреМрди рд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреМрди рд╕рд╛ рджрд╛рд╕ рд╣реИред
CREATE PROCEDURE `copy_master_tick_time`() BEGIN DECLARE master_tick_time timestamp; SET @master_tick_time = (select time from my_db.master_tick); DELETE FROM test.slaves where server_id=@@server_id; INSERT INTO test.slaves set server_id=@@server_id, master_tick_time=@master_tick_time; END
рджрд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдШрдЯрдирд╛:
CREATE EVENT `copy_master_tick` ON SCHEDULE EVERY 30 SECOND STARTS '2013-01-01 00:00:00' DO call copy_master_tick_time()
рд╡рд╣ рд╕рдм рд╣реИред
рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓реЙрдЧ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рдкрд░ рд╕рднреА рдЕрдВрддрд┐рдо рд░рд╣рддрд╛ рд╣реИред
рдореБрдХреБрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреИрд╢ рдЪрд▓рд╛рдПрдВ:
PS рд╢рд╛рдпрдж рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм binlog_format = 'ROW';