国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

mysql二進(jìn)制日志恢復(fù)數(shù)據(jù)

Original 2016-11-09 14:33:06 596
abstract:1、開(kāi)啟mysql的二進(jìn)制日志  在mysql的配置文件my.ini中添加:  log-bin=mysql-bin(這個(gè)名稱可以隨便取,英文,不知道中文可不可以,沒(méi)試過(guò))2、重啟mysql  重啟后,假如在mysql的存儲(chǔ)數(shù)據(jù)的目錄中出現(xiàn)一下文件,則已經(jīng)二進(jìn)制日志已經(jīng)開(kāi)啟  mysql-bin.000001是mysql的二進(jìn)制日志文件,不可以直接查看,可以通過(guò)導(dǎo)出數(shù)據(jù)查看,導(dǎo)出數(shù)據(jù)的語(yǔ)句為  解釋

1、開(kāi)啟mysql的二進(jìn)制日志

  在mysql的配置文件my.ini中添加:

  log-bin=mysql-bin(這個(gè)名稱可以隨便取,英文,不知道中文可不可以,沒(méi)試過(guò))

2、重啟mysql

  重啟后,假如在mysql的存儲(chǔ)數(shù)據(jù)的目錄中出現(xiàn)一下文件,則已經(jīng)二進(jìn)制日志已經(jīng)開(kāi)啟

6.png

  mysql-bin.000001是mysql的二進(jìn)制日志文件,不可以直接查看,可以通過(guò)導(dǎo)出數(shù)據(jù)查看,導(dǎo)出數(shù)據(jù)的語(yǔ)句為

7.png

  解釋一下:紅色下劃線的是mysql二進(jìn)制mysql-bin.000001文件所在的目錄,要進(jìn)入這里執(zhí)行后面的語(yǔ)句,這是我的情況

  mysqlbinlog的語(yǔ)法:

  mysqlbinlog 二進(jìn)制日志文件 > 目標(biāo)文件

  要導(dǎo)出到哪里自己決定,但一定先要有這個(gè)目錄,導(dǎo)出的文件則mysql會(huì)自動(dòng)生成,所以不必新建

3、查看二進(jìn)制日志狀態(tài)

  show master status;

  +------------------+----------+--------------+------------------+

  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

  +------------------+----------+--------------+------------------+

  | mysql-bin.000001 | 349 | | |

  +------------------+----------+--------------+------------------+

  1 row in set (0.00 sec)

4、測(cè)試兩個(gè)例子

  第一個(gè):

   create table bin_test(
    id int,
    name char(32)
  )engine myisam charset utf8;
 drop table bin_test;

  注意,下面的語(yǔ)句前面已經(jīng)說(shuō)過(guò),必須開(kāi)啟另一個(gè)cmd,然后進(jìn)入mysql-bin.000001的二進(jìn)制文件的目錄中執(zhí)行

  E:\itcast\GZClass14\GZBasicClass14\web\mysql\data\data>mysqlbinlog mysql-bin.000001 >D:/binlog/binlog.txt

  查看binlog.txt文件

8.png

    E:\itcast\GZClass14\GZBasicClass14\web\mysql\data\data>mysqlbinlog mysql-bin.000001 --stop_pos=239 | mysql -uroot -p

  Enter password: ****

  解釋一下:--stop_pos=239是上面create語(yǔ)句的位置,mysql二進(jìn)制恢復(fù)數(shù)據(jù)的原理就是讓mysql重新執(zhí)行二進(jìn)制里面的sql語(yǔ)句,我們執(zhí)行限制它的執(zhí)行位置,讓它在哪個(gè)位置停止不往下執(zhí)行

  第二個(gè)例子:

  因?yàn)閯偛诺腷in_test已經(jīng)恢復(fù),所以向它插入數(shù)據(jù)

  mysql> select * from bin_test;
  Empty set (0.00 sec)
  mysql> insert into bin_test values(1,'hello');
  Query OK, 1 row affected (0.08 sec)
  mysql> insert into bin_test values(default,'hi');
  Query OK, 1 row affected (0.00 sec)
  mysql> insert into bin_test values(default,'guangzhou');
  Query OK, 1 row affected (0.00 sec)
  mysql> insert into bin_test values(default,'lonely');
  Query OK, 1 row affected (0.00 sec)

  mysql> select * from bin_test;

  +------+-----------+

  | id | name |

  +------+-----------+

  | 1 | hello |

  | NULL | hi |

  | NULL | guangzhou |

  | NULL | lonely |

  +------+-----------+

  mysql> delete from bin_test;
  Query OK, 4 rows affected (0.08 sec)
  mysql> select * from bin_test;
  Empty set (0.00 sec)

查看二進(jìn)制日志

create table bin_test(id int,name char(32))engine myisam charset utf8
/*!*/;
# at 481
#160917 15:27:45 server id 1 end_log_pos 549 Query  thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097265/*!*/;
BEGIN
/*!*/;
# at 549
#160917 15:27:45 server id 1 end_log_pos 650 Query  thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097265/*!*/;
insert into bin_test values(1,'hello')
/*!*/;
# at 650
#160917 15:27:45 server id 1 end_log_pos 719 Query  thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097265/*!*/;
COMMIT
/*!*/;
# at 719
#160917 15:28:00 server id 1 end_log_pos 787 Query  thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097280/*!*/;
BEGIN
/*!*/;
# at 787
#160917 15:28:00 server id 1 end_log_pos 891 Query  thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097280/*!*/;
insert into bin_test values(default,'hi')
/*!*/;
# at 891
#160917 15:28:00 server id 1 end_log_pos 960 Query  thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097280/*!*/;
COMMIT
/*!*/;
# at 960
#160917 15:28:09 server id 1 end_log_pos 1028 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097289/*!*/;
BEGIN
/*!*/;
# at 1028
#160917 15:28:09 server id 1 end_log_pos 1139 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097289/*!*/;
insert into bin_test values(default,'guangzhou')
/*!*/;
# at 1139
#160917 15:28:09 server id 1 end_log_pos 1208 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097289/*!*/;
COMMIT
/*!*/;
# at 1208
#160917 15:28:17 server id 1 end_log_pos 1276 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097297/*!*/;
BEGIN
/*!*/;
# at 1276
#160917 15:28:17 server id 1 end_log_pos 1384 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097297/*!*/;
insert into bin_test values(default,'lonely')
/*!*/;
# at 1384
#160917 15:28:17 server id 1 end_log_pos 1453 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097297/*!*/;
COMMIT
/*!*/;
# at 1453
#160917 15:29:11 server id 1 end_log_pos 1521 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097351/*!*/;
BEGIN
/*!*/;
# at 1521
#160917 15:29:11 server id 1 end_log_pos 1604 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1474097351/*!*/;
delete from bin_test

另一個(gè)cmd窗口執(zhí)行下面的語(yǔ)句

9.png

上面的at 1521的對(duì)應(yīng)點(diǎn):

11.png

不過(guò)這個(gè)時(shí)候恢復(fù)數(shù)據(jù)報(bào)錯(cuò),那是因?yàn)槲覀冊(cè)倩謴?fù)數(shù)據(jù)的時(shí)候給了一個(gè)終點(diǎn),沒(méi)有給起點(diǎn),所以mysql會(huì)從開(kāi)始一直回復(fù)到終點(diǎn)的地方,而二進(jìn)制文件中已經(jīng)存在

這個(gè)可以對(duì)比上面二進(jìn)制文件的內(nèi)容

而此刻mysql數(shù)據(jù)庫(kù)中已經(jīng)存在bin_test數(shù)據(jù)表了,這個(gè)是我們前面恢復(fù)的,所以sql會(huì)報(bào)這個(gè)錯(cuò)誤:

10.png

 針對(duì)這個(gè)問(wèn)題,我們可以給它設(shè)置一個(gè)恢復(fù)數(shù)據(jù)的啟點(diǎn)來(lái)解決:

E:\itcast\GZClass14\GZBasicClass14\web\mysql\data\data>mysqlbinlog mysql-bin.000001 --start_pos=549 --stop_pos=1521 | mysql -uroot -p

Enter password: ****

E:\itcast\GZClass14\GZBasicClass14\web\mysql\data\data>

這里的起點(diǎn)位置就是第一次開(kāi)始插入sql語(yǔ)句的位置,可以對(duì)比前面的二進(jìn)制日志的時(shí)間點(diǎn),這里就不再截圖,這里沒(méi)有報(bào)錯(cuò)表示已經(jīng)成功了


Release Notes

Popular Entries