Original post: http://anothermysqldba.blogspot.com/2014/11/recover-lost-mysql-data-with.html
ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—...ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—...ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—...ã—ã‹ã—ã€ã‚‚ã¡ã‚ã‚“..ã‚ãªãŸã‚‚ãã†ã§ãªã„å ´åˆã€å½¼ã‚‰ã¯ä¾¡å€¤ã®ãªã„å¯èƒ½æ€§ãŒã‚りã€å¤šãã®å ´åˆã€ãれらã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を監視ã—ã€ãƒ†ã‚¹ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ MySQLã®æŒã¤ãƒã‚¤ãƒŠãƒªãƒã‚°ã¯ã€ç¢ºã‹ã«ã ã‘ã§ãªãã€ç·Šæ€¥æ™‚ã«ã‚ãªãŸã‚’助ã‘ã‚‹ã“ã¨ãŒã§ãã‚‹å¯èƒ½ã«ã—ãŸã€‚ MySQLã®ãƒã‚¤ãƒŠãƒªãƒã‚°ã¯ã€å¤šãã®å ´åˆã€MySQLã®ãƒ¬ãƒ—リケーションã«é–¢ã—ã¦ã§å‚ç…§ã•ã‚Œã€æ£å½“ãªç†ç”±ã®ãŸã‚ã«ã€å½¼ã‚‰ã¯ãƒ‡ãƒ¼ã‚¿ï¼ˆå¤‰æ›´ã™ã‚‹ã‚¯ã‚¨ãƒªã¾ãŸã¯ã‚¤ãƒ™ãƒ³ãƒˆã‚’ã™ã¹ã¦ä¿å˜ã—ã€è¡Œãƒ™ãƒ¼ã‚¹ãŒå°‘ã—ç•°ãªã£ã¦ã„ã‚‹ãŒã€ã“ã®ä¾‹ã‚’)。 ãã‚Œã‚‰ãŒæä¾›ã™ã‚‹å›žå¾©ã‚ªãƒ—ションを検討ã™ã‚‹éš›ã«ãƒã‚¤ãƒŠãƒªãƒã‚°ã«ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã®ãƒ‘フォーマンスã¸ã®å½±éŸ¿ã‚’最å°é™ã«æŠ‘ãˆã¦ã„ã¾ã™ã€‚
ã ã‹ã‚‰ã€ã“れã¯ãƒã‚¤ãƒŠãƒªãƒã‚°ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’回復ã—ã€ãã‚Œã‚’ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«æˆ»ã£ã¦é©â€‹â€‹ç”¨ã™ã‚‹ãŸã‚ã«mysqlbinlogã¯ã‚’使用ã—ã¦å˜ç´”ãªä¾‹ã§ã™ã€‚
ã¾ãšã€å¤±ã†ãŸã‚ã«ä½•ã‹ã‚’å¿…è¦ã¨ã™ã‚‹ã€‚ 何ã‹ãŒç§é”ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«èµ·ã“ã‚‹ã“ã¨ã ã£ãŸå ´åˆã¯ã€æˆ‘々ã¯ãƒ‡ãƒ¼ã‚¿ã‚’回復ã§ãるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã¾ãŸã¯å¤šåˆ†ãれã¯ã¡ã‚‡ã†ã©èª°ã‹ã®ãƒŸã‚¹ã‹ã‚‰å›žå¾©ã™ã‚‹ãŸã‚ã®æ–¹æ³•ã§ã™ã€‚
ç§ãŸã¡ã¯ã“ã“ã«ãµã‚Šã‚’ã—ã€æˆ‘々ã¯éžå¸¸ã«ã‚ˆãã€é€šä¿¡ãŠã‚ˆã³/ã¾ãŸã¯ãã®ã‚³ãƒ¼ãƒ‰ã®ã‚³ãƒ”ーをä¿å˜ã—ã¦ã„ãªã„開発者/ DBAã¯ã‚’æŒã£ã¦ã„ã‚‹ã¨ä»®å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
1プãƒã‚·ãƒ¼ã‚¸ãƒ£ãŒä½œæˆã•れã¦ã„ã‚‹é–“ã€ãれã¯å¾Œã«ã€ä»–ã®é–“é•ã£ã¦èª°ã‹ã«ã‚ˆã£ã¦ä¸Šæ›¸ãã•れる。
手続ãã®ç½®ãæ›ãˆãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯æ€ã£ãŸãƒãƒ¼ãƒ ã®ã‚ˆã†ãªãƒ©ãƒ³ãƒ€ãƒ ãªå€¤ã‚’生æˆã—ã¦ã„ã¾ã›ã‚“。 手続ãã®å…ƒã®ä½œæˆè€…ã¯ã€ã¡ã‚‡ã†ã©æ¬²æ±‚䏿º€ã‹ã‚‰çµ‚了ã—ã¾ã™ã€‚ ã ã‹ã‚‰ä½•ã‚’ã™ã‚‹ã‹ï¼Ÿ ãれã¯åŒæ§˜ã«ä½œæˆã•れã¦ã‹ã‚‰å°‘ã—æ™‚é–“ãŒéŽåŽ»ã‚’æŒã£ã¦ã„ã¾ã™ã€‚ ç§ãŸã¡ã¯ç§ãŸã¡ã®ãŸã‚ã«ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹åã€ãƒ«ãƒ¼ãƒãƒ³åã¨èª¤ã£ãŸæ‰‹é †ãŒä½œæˆã•れãŸä¸€èˆ¬çš„ãªæ™‚é–“æž ã¨å¹¸é‹ã‚’知ã£ã¦ã„るビンãƒã‚°ã®å‘¨ã‚Šã«æ®‹ã£ã¦ã„ã‚‹ã®ã§ã€æˆ‘々ã¯ãれをå–りã«è¡Œãã“ã¨ãŒã§ãã¾ã™ã€‚
ç§ãŸã¡ã¯ã¡ã‚‡ã†ã©ãŸã„ã®ã§ã€å‘¨ã‚Šã®ä¸€èˆ¬çš„ãªå¤–観をå–らãªã‘れã°ãªã‚‰ãªã„ãƒã‚¤ãƒ³ãƒˆÂ·ã‚¤ãƒ³Â·ã‚¿ã‚¤ãƒ ·リカãƒãƒªãƒ¼ã“ã®procedure.Weã®æ‰‹é †ã¨ãã®å‰å¾Œãƒã‚¤ãƒŠãƒªãƒã‚°å†…ã®ä½ç½®ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒèµ·ã“る。
ç§ãŸã¡ã¯ã€çµŒç”±ã§ã€ãƒã‚¤ãƒŠãƒªãƒã‚°ã‹ã‚‰ç§ãŸã¡ã®æ‰‹é †ã‚’回復ã—ãŸãƒã‚¤ãƒ³ãƒˆÂ·ã‚¤ãƒ³Â·ã‚¿ã‚¤ãƒ ·リカãƒãƒªãƒ¼ 。
ã“れã¯å˜ç´”ãªä¾‹ã§ã™ãŒã€ãれã¯ã‚ãªãŸãŒå‰é€²ã—ã¦ä½¿ç”¨ã§ãるツールã®ä¾‹ã§ã™ã€‚
ãƒã‚¤ãƒŠãƒªãƒã‚°ã¯éžå¸¸ã«ä¾¡å€¤ãŒã‚ã‚‹ã®ã¯ã“ã®ãŸã‚ã§ã™ã€‚
å‚考URL:
ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—...ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—...ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—...ã—ã‹ã—ã€ã‚‚ã¡ã‚ã‚“..ã‚ãªãŸã‚‚ãã†ã§ãªã„å ´åˆã€å½¼ã‚‰ã¯ä¾¡å€¤ã®ãªã„å¯èƒ½æ€§ãŒã‚りã€å¤šãã®å ´åˆã€ãれらã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を監視ã—ã€ãƒ†ã‚¹ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ MySQLã®æŒã¤ãƒã‚¤ãƒŠãƒªãƒã‚°ã¯ã€ç¢ºã‹ã«ã ã‘ã§ãªãã€ç·Šæ€¥æ™‚ã«ã‚ãªãŸã‚’助ã‘ã‚‹ã“ã¨ãŒã§ãã‚‹å¯èƒ½ã«ã—ãŸã€‚ MySQLã®ãƒã‚¤ãƒŠãƒªãƒã‚°ã¯ã€å¤šãã®å ´åˆã€MySQLã®ãƒ¬ãƒ—リケーションã«é–¢ã—ã¦ã§å‚ç…§ã•ã‚Œã€æ£å½“ãªç†ç”±ã®ãŸã‚ã«ã€å½¼ã‚‰ã¯ãƒ‡ãƒ¼ã‚¿ï¼ˆå¤‰æ›´ã™ã‚‹ã‚¯ã‚¨ãƒªã¾ãŸã¯ã‚¤ãƒ™ãƒ³ãƒˆã‚’ã™ã¹ã¦ä¿å˜ã—ã€è¡Œãƒ™ãƒ¼ã‚¹ãŒå°‘ã—ç•°ãªã£ã¦ã„ã‚‹ãŒã€ã“ã®ä¾‹ã‚’)。 ãã‚Œã‚‰ãŒæä¾›ã™ã‚‹å›žå¾©ã‚ªãƒ—ションを検討ã™ã‚‹éš›ã«ãƒã‚¤ãƒŠãƒªãƒã‚°ã«ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã®ãƒ‘フォーマンスã¸ã®å½±éŸ¿ã‚’最å°é™ã«æŠ‘ãˆã¦ã„ã¾ã™ã€‚
[anothermysqldba]> show variables like 'log_bin%';
+---------------------------------+--------------------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/binlogs/mysql-binlogs |
| log_bin_index | /var/lib/mysql/binlogs/mysql-binlogs.index |
show variables like 'binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
ã ã‹ã‚‰ã€ã“れã¯ãƒã‚¤ãƒŠãƒªãƒã‚°ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’回復ã—ã€ãã‚Œã‚’ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«æˆ»ã£ã¦é©â€‹â€‹ç”¨ã™ã‚‹ãŸã‚ã«mysqlbinlogã¯ã‚’使用ã—ã¦å˜ç´”ãªä¾‹ã§ã™ã€‚
ã¾ãšã€å¤±ã†ãŸã‚ã«ä½•ã‹ã‚’å¿…è¦ã¨ã™ã‚‹ã€‚ 何ã‹ãŒç§é”ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«èµ·ã“ã‚‹ã“ã¨ã ã£ãŸå ´åˆã¯ã€æˆ‘々ã¯ãƒ‡ãƒ¼ã‚¿ã‚’回復ã§ãるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã¾ãŸã¯å¤šåˆ†ãれã¯ã¡ã‚‡ã†ã©èª°ã‹ã®ãƒŸã‚¹ã‹ã‚‰å›žå¾©ã™ã‚‹ãŸã‚ã®æ–¹æ³•ã§ã™ã€‚
CREATE TABLE `table_w_rdata` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`somedata` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`moredata` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
ç§ãŸã¡ã¯ã“ã“ã«ãµã‚Šã‚’ã—ã€æˆ‘々ã¯éžå¸¸ã«ã‚ˆãã€é€šä¿¡ãŠã‚ˆã³/ã¾ãŸã¯ãã®ã‚³ãƒ¼ãƒ‰ã®ã‚³ãƒ”ーをä¿å˜ã—ã¦ã„ãªã„開発者/ DBAã¯ã‚’æŒã£ã¦ã„ã‚‹ã¨ä»®å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
delimiter //
CREATE PROCEDURE populate_dummydata( IN rowsofdata INT )
BEGIN
SET @A = 3;
SET @B = 15 - @A;
SET @C = 16;
SET @D = 25 - @C;
WHILE rowsofdata > 0 DO
INSERT INTO table_w_rdata
SELECT NULL, SUBSTR(md5(''),FLOOR( @A + (RAND() * @B ))) as somedata, SUBSTR(md5(''),FLOOR( @C + (RAND() * @D ))) AS moredata ;
SET rowsofdata = rowsofdata - 1;
END WHILE;
END//
delimiter ;
call populate_dummydata(50);
> SELECT NOW() \G
*************************** 1. row ***************************
NOW(): 2014-11-27 17:32:25
1 row in set (0.00 sec)
> SELECT * from table_w_rdata WHERE id > 45;
+----+----------------------------+------------------+
| id | somedata | moredata |
+----+----------------------------+------------------+
| 46 | b204e9800998ecf8427e | 0998ecf8427e |
| 47 | d98f00b204e9800998ecf8427e | 8ecf8427e |
| 48 | b204e9800998ecf8427e | 800998ecf8427e |
| 49 | 98f00b204e9800998ecf8427e | e9800998ecf8427e |
| 50 | 98f00b204e9800998ecf8427e | 998ecf8427e |
+----+----------------------------+------------------+
1プãƒã‚·ãƒ¼ã‚¸ãƒ£ãŒä½œæˆã•れã¦ã„ã‚‹é–“ã€ãれã¯å¾Œã«ã€ä»–ã®é–“é•ã£ã¦èª°ã‹ã«ã‚ˆã£ã¦ä¸Šæ›¸ãã•れる。
DROP PROCEDURE IF EXISTS populate_dummydata ;
delimiter //
CREATE PROCEDURE populate_dummydata( IN rowsofdata INT )
BEGIN
SET @A = 3;
SET @B = 15 - @A;
SET @C = 16;
SET @D = 25 - @C;
WHILE rowsofdata > 0 DO
INSERT INTO table_w_rdata
SELECT NULL, SUBSTR(md5(''),FLOOR( @C + (RAND() * @A ))) as somedata, SUBSTR(md5(''),FLOOR( @B + (RAND() * @D ))) AS moredata ;
SET rowsofdata = rowsofdata - 1;
END WHILE;
END//
delimiter ;
call populate_dummydata(50);
> SELECT NOW(); SELECT * from table_w_rdata WHERE id > 95;
+---------------------+
| NOW() |
+---------------------+
| 2014-11-27 17:36:28 |
+---------------------+
1 row in set (0.00 sec)
+-----+-------------------+---------------------+
| id | somedata | moredata |
+-----+-------------------+---------------------+
| 96 | 4e9800998ecf8427e | 00998ecf8427e |
| 97 | 9800998ecf8427e | 800998ecf8427e |
| 98 | e9800998ecf8427e | 204e9800998ecf8427e |
| 99 | e9800998ecf8427e | 4e9800998ecf8427e |
| 100 | 9800998ecf8427e | 04e9800998ecf8427e |
+-----+-------------------+---------------------+
手続ãã®ç½®ãæ›ãˆãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯æ€ã£ãŸãƒãƒ¼ãƒ ã®ã‚ˆã†ãªãƒ©ãƒ³ãƒ€ãƒ ãªå€¤ã‚’生æˆã—ã¦ã„ã¾ã›ã‚“。 手続ãã®å…ƒã®ä½œæˆè€…ã¯ã€ã¡ã‚‡ã†ã©æ¬²æ±‚䏿º€ã‹ã‚‰çµ‚了ã—ã¾ã™ã€‚ ã ã‹ã‚‰ä½•ã‚’ã™ã‚‹ã‹ï¼Ÿ ãれã¯åŒæ§˜ã«ä½œæˆã•れã¦ã‹ã‚‰å°‘ã—æ™‚é–“ãŒéŽåŽ»ã‚’æŒã£ã¦ã„ã¾ã™ã€‚ ç§ãŸã¡ã¯ç§ãŸã¡ã®ãŸã‚ã«ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹åã€ãƒ«ãƒ¼ãƒãƒ³åã¨èª¤ã£ãŸæ‰‹é †ãŒä½œæˆã•れãŸä¸€èˆ¬çš„ãªæ™‚é–“æž ã¨å¹¸é‹ã‚’知ã£ã¦ã„るビンãƒã‚°ã®å‘¨ã‚Šã«æ®‹ã£ã¦ã„ã‚‹ã®ã§ã€æˆ‘々ã¯ãれをå–りã«è¡Œãã“ã¨ãŒã§ãã¾ã™ã€‚
ç§ãŸã¡ã¯ã¡ã‚‡ã†ã©ãŸã„ã®ã§ã€å‘¨ã‚Šã®ä¸€èˆ¬çš„ãªå¤–観をå–らãªã‘れã°ãªã‚‰ãªã„ãƒã‚¤ãƒ³ãƒˆÂ·ã‚¤ãƒ³Â·ã‚¿ã‚¤ãƒ ·リカãƒãƒªãƒ¼ã“ã®procedure.Weã®æ‰‹é †ã¨ãã®å‰å¾Œãƒã‚¤ãƒŠãƒªãƒã‚°å†…ã®ä½ç½®ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒèµ·ã“る。
NOW(): 2014-11-27 19:46:17
# mysqlbinlog --start-datetime=20141127173200 --stop-datetime=20141127173628 --database=anothermysqldba mysql-binlogs.000001 | more
at 253053
at 253564
# mysql anothermysqldba --login-path =local -e "DROP PROCEDURE populate_dummydata";
# mysqlbinlog --start-position=253053 --stop-position=253564 --database=anothermysqldba mysql-binlogs.000001 | mysql --login-path =local anothermysqldba
> SHOW CREATE PROCEDURE populate_dummydata\G
*************************** 1. row ***************************
Procedure: populate_dummydata
sql_mode: NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `populate_dummydata`( IN rowsofdata INT )
BEGIN
SET @A = 3;
SET @B = 15 - @A;
SET @C = 16;
SET @D = 25 - @C;
WHILE rowsofdata > 0 DO
INSERT INTO table_w_rdata
SELECT NULL, SUBSTR(md5(''),FLOOR( @A + (RAND() * @B ))) as somedata, SUBSTR(md5(''),FLOOR( @C + (RAND() * @D ))) AS moredata ;
SET rowsofdata = rowsofdata - 1;
END WHILE;
END
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
NOW(): 2014-11-27 19:51:03
> call populate_dummydata(50);
> SELECT * from table_w_rdata WHERE id > 145;
+-----+-----------------------------+------------------+
| id | somedata | moredata |
+-----+-----------------------------+------------------+
| 146 | 98f00b204e9800998ecf8427e | 800998ecf8427e |
| 147 | cd98f00b204e9800998ecf8427e | 800998ecf8427e |
| 148 | 204e9800998ecf8427e | 98ecf8427e |
| 149 | d98f00b204e9800998ecf8427e | e9800998ecf8427e |
| 150 | 204e9800998ecf8427e | 9800998ecf8427e |
+-----+-----------------------------+------------------+
ç§ãŸã¡ã¯ã€çµŒç”±ã§ã€ãƒã‚¤ãƒŠãƒªãƒã‚°ã‹ã‚‰ç§ãŸã¡ã®æ‰‹é †ã‚’回復ã—ãŸãƒã‚¤ãƒ³ãƒˆÂ·ã‚¤ãƒ³Â·ã‚¿ã‚¤ãƒ ·リカãƒãƒªãƒ¼ 。
ã“れã¯å˜ç´”ãªä¾‹ã§ã™ãŒã€ãれã¯ã‚ãªãŸãŒå‰é€²ã—ã¦ä½¿ç”¨ã§ãるツールã®ä¾‹ã§ã™ã€‚
ãƒã‚¤ãƒŠãƒªãƒã‚°ã¯éžå¸¸ã«ä¾¡å€¤ãŒã‚ã‚‹ã®ã¯ã“ã®ãŸã‚ã§ã™ã€‚
å‚考URL:
PlanetMySQL Voting: Vote UP / Vote DOWN