binlog 基本認(rèn)識
? ? MySQL的二進(jìn)制日志可以說是MySQL最重要的日志了,它記錄了所有的DDL和DML(除了數(shù)據(jù)查詢語句)語句,以事件形式記錄,還包含語句所執(zhí)行的消耗的時間,MySQL的二進(jìn)制日志是事務(wù)安全型的。
? ? 一般來說開啟二進(jìn)制日志大概會有1%的性能損耗(參見MySQL官方中文手冊 5.1.24版)。二進(jìn)制有兩個最重要的使用場景:
? ? 其一:MySQLReplication在Master端開啟binlog,Mster把它的二進(jìn)制日志傳遞給slaves來達(dá)到master-slave數(shù)據(jù)一致的目的。
? ? 其二:自然就是數(shù)據(jù)恢復(fù)了,通過使用mysqlbinlog工具來使恢復(fù)數(shù)據(jù)。
? ? 二進(jìn)制日志包括兩類文件:二進(jìn)制日志索引文件(文件名后綴為.index)用于記錄所有的二進(jìn)制文件,二進(jìn)制日志文件(文件名后綴為.00000*)記錄數(shù)據(jù)庫所有的DDL和DML(除了數(shù)據(jù)查詢語句)語句事件。
一、開啟binlog日志:
? ? vi編輯打開mysql配置文件
? ? # vi /usr/local/mysql/etc/my.cnf? ? 在[mysqld] 區(qū)塊
? ? 設(shè)置/添加log-bin=mysql-bin? 確認(rèn)是打開狀態(tài)(值mysql-bin 是日志的基本名或前綴名);
? ? 重啟mysqld服務(wù)使配置生效
? ? # pkill mysqld# /usr/local/mysql/bin/mysqld_safe --user=mysql &二、也可登錄mysql服務(wù)器,通過mysql的變量配置表,查看二進(jìn)制日志是否已開啟 單詞:variable[?v?ri?b?l] 變量
? ? 登錄服務(wù)器
? ? # /usr/local/mysql/bin/mysql -uroot -p123456mysql> show variables like 'log_%';
? ? +----------------------------------------+---------------------------------------+? ? | Variable_name? ? ? ? ? ? ? ? ? ? ? ? ? | Value? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? +----------------------------------------+---------------------------------------+? ? | log_bin? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ON? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ------> ON表示已經(jīng)開啟binlog日志
? ? | log_bin_basename? ? ? ? ? ? ? ? ? ? ? | /usr/local/mysql/data/mysql-bin? ? ? |? ? | log_bin_index? ? ? ? ? ? ? ? ? ? ? ? ? | /usr/local/mysql/data/mysql-bin.index |? ? | log_bin_trust_function_creators? ? ? ? | OFF? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? | log_bin_use_v1_row_events? ? ? ? ? ? ? | OFF? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? | log_error? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | /usr/local/mysql/data/martin.err? ? ? |? ? | log_output? ? ? ? ? ? ? ? ? ? ? ? ? ? |FILE|? ? | log_queries_not_using_indexes? ? ? ? ? | OFF? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? | log_slave_updates? ? ? ? ? ? ? ? ? ? ? | OFF? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? | log_slow_admin_statements? ? ? ? ? ? ? | OFF? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? | log_slow_slave_statements? ? ? ? ? ? ? | OFF? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? | log_throttle_queries_not_using_indexes | 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? | log_warnings? ? ? ? ? ? ? ? ? ? ? ? ? | 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? +----------------------------------------+---------------------------------------+三、常用binlog日志操作命令
? ? 1.查看所有binlog日志列表
? ? ? mysql> show master logs;
? ? 2.查看master狀態(tài),即最后(最新)一個binlog日志的編號名稱,及其最后一個操作事件pos結(jié)束點(diǎn)(Position)值
? ? ? mysql> show master status;
? ? 3.刷新log日志,自此刻開始產(chǎn)生一個新編號的binlog日志文件
? ? ? mysql>flush logs;
? ? ? 注:每當(dāng)mysqld服務(wù)重啟時,會自動執(zhí)行此命令,刷新binlog日志;在mysqldump備份數(shù)據(jù)時加 -F 選項也會刷新binlog日志;
? ? 4.重置(清空)所有binlog日志
? ? ? mysql>reset master;
四、查看某個binlog日志內(nèi)容,常用有兩種方式:
? ? 1.使用mysqlbinlog自帶查看命令法:
? ? ? 注: binlog是二進(jìn)制文件,普通文件查看器cat more vi等都無法打開,必須使用自帶的 mysqlbinlog 命令查看
? ? ? ? ? binlog日志與數(shù)據(jù)庫文件在同目錄中(我的環(huán)境配置安裝是選擇在/usr/local/mysql/data中)
? ? ? 在MySQL5.5以下版本使用mysqlbinlog命令時如果報錯,就加上 “--no-defaults”選項
? ? ? # /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000013? ? ? ? 下面截取一個片段分析:
? ? ? ? ...............................................................................# at 552#131128 17:50:46 server id 1? end_log_pos 665? Query? thread_id=11? ? exec_time=0? ? error_code=0 ---->執(zhí)行時間:17:50:46;pos點(diǎn):665SET TIMESTAMP=1385632246/*!*/;
? ? ? ? update zyyshop.stu set name='李四' where id=4? ? ? ? ? ? ? ---->執(zhí)行的SQL
? ? ? ? /*!*/;
? ? ? ? # at 665#131128 17:50:46 server id 1? end_log_pos 692? Xid = 1454 ---->執(zhí)行時間:17:50:46;pos點(diǎn):692 ...............................................................................? ? ? ? 注: server id 1? ? 數(shù)據(jù)庫主機(jī)的服務(wù)號;
? ? ? ? ? ? end_log_pos 665 pos點(diǎn)
? ? ? ? ? ? thread_id=11? ? 線程號
? ? 2.上面這種辦法讀取出binlog日志的全文內(nèi)容較多,不容易分辨查看pos點(diǎn)信息,這里介紹一種更為方便的查詢命令:
? ? ? mysql> show binlog events [IN 'log_name'] [FROMpos] [LIMIT [offset,] row_count];
? ? ? ? ? ? 選項解析:
? ? ? ? ? ? ? IN 'log_name'? 指定要查詢的binlog文件名(不指定就是第一個binlog文件)
? ? ? ? ? ? ? FROM pos? ? ? ? 指定從哪個pos起始點(diǎn)開始查起(不指定就是從整個文件首個pos點(diǎn)開始算)
? ? ? ? ? ? ? LIMIT [offset,] 偏移量(不指定就是0)
? ? ? ? ? ? ? row_count? ? ? 查詢總條數(shù)(不指定就是所有行)
? ? ? ? ? ? 截取部分查詢結(jié)果:
? ? ? ? ? ? *************************** 20. row ***************************? ? ? ? ? ? ? ? Log_name:mysql-bin.000021? ----------------------------------------------> 查詢的binlog日志文件名
? ? ? ? ? ? ? ? ? ? Pos: 11197 ----------------------------------------------------------> pos起始點(diǎn):? ? ? ? ? ? ? Event_type: Query ----------------------------------------------------------> 事件類型:Query
? ? ? ? ? ? ? Server_id: 1 --------------------------------------------------------------> 標(biāo)識是由哪臺服務(wù)器執(zhí)行的
? ? ? ? ? ? End_log_pos: 11308 ----------------------------------------------------------> pos結(jié)束點(diǎn):11308(即:下行的pos起始點(diǎn))
? ? ? ? ? ? ? ? ? ? Info:use`zyyshop`; INSERT INTO `team2` VALUES (0,345,'asdf8er5') ---> 執(zhí)行的sql語句
? ? ? ? ? ? *************************** 21. row ***************************? ? ? ? ? ? ? ? Log_name:mysql-bin.000021Pos: 11308 ----------------------------------------------------------> pos起始點(diǎn):11308(即:上行的pos結(jié)束點(diǎn))
? ? ? ? ? ? ? Event_type: Query
? ? ? ? ? ? ? Server_id: 1? ? ? ? ? ? End_log_pos: 11417? ? ? ? ? ? ? ? ? ? Info:use`zyyshop`;/*!40000 ALTER TABLE `team2` ENABLE KEYS */*************************** 22. row ***************************? ? ? ? ? ? ? ? Log_name:mysql-bin.000021Pos: 11417? ? ? ? ? ? ? Event_type: Query
? ? ? ? ? ? ? Server_id: 1? ? ? ? ? ? End_log_pos: 11510? ? ? ? ? ? ? ? ? ? Info:use`zyyshop`; DROP TABLEIF EXISTS `type`
? ? ? 這條語句可以將指定的binlog日志文件,分成有效事件行的方式返回,并可使用limit指定pos點(diǎn)的起始偏移,查詢條數(shù);
? ? ? A.查詢第一個(最早)的binlog日志:
? ? ? ? mysql> show binlog events\G;
? ? ? B.指定查詢mysql-bin.000021 這個文件:
? ? ? ? mysql> show binlog events in 'mysql-bin.000021'\G;
? ? ? C.指定查詢mysql-bin.000021 這個文件,從pos點(diǎn):8224開始查起:
? ? ? ? mysql> show binlog events in 'mysql-bin.000021' from 8224\G;
? ? ? D.指定查詢mysql-bin.000021 這個文件,從pos點(diǎn):8224開始查起,查詢10條
? ? ? ? mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 10\G;
? ? ? E.指定查詢mysql-bin.000021 這個文件,從pos點(diǎn):8224開始查起,偏移2行,查詢10條
? ? ? ? mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 2,10\G;
五、恢復(fù)binlog日志實驗(zyyshop是數(shù)據(jù)庫)
? ? 1.假設(shè)現(xiàn)在是凌晨4:00,我的計劃任務(wù)開始執(zhí)行一次完整的數(shù)據(jù)庫備份:
? ? ? 將zyyshop數(shù)據(jù)庫備份到 /root/BAK.zyyshop.sql 文件中:
? ? ? # /usr/local/mysql/bin/mysqldump -uroot -p123456 -lF --log-error=/root/myDump.err -B zyyshop > /root/BAK.zyyshop.sql......? ? ? ? 大約過了若干分鐘,備份完成了,我不用擔(dān)心數(shù)據(jù)丟失了,因為我有備份了,嘎嘎~~~? ? ? 由于我使用了-F選項,當(dāng)備份工作剛開始時系統(tǒng)會刷新log日志,產(chǎn)生新的binlog日志來記錄備份之后的數(shù)據(jù)庫“增刪改”操作,查看一下:
? ? ? mysql> show master status;
? ? ? +------------------+----------+--------------+------------------+? ? ? |File| Position | Binlog_Do_DB | Binlog_Ignore_DB |? ? ? +------------------+----------+--------------+------------------+? ? ? |mysql-bin.000023 |? ? ? 120 |? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |? ? ? +------------------+----------+--------------+------------------+? ? ? 也就是說, mysql-bin.000023 是用來記錄4:00之后對數(shù)據(jù)庫的所有“增刪改”操作。
? ? 2.早9:00上班了,業(yè)務(wù)的需求會對數(shù)據(jù)庫進(jìn)行各種“增刪改”操作~~~~~~~? ? ? @ 比如:創(chuàng)建一個學(xué)生表并插入、修改了數(shù)據(jù)等等:
? ? ? ? CREATE TABLE IF NOT EXISTS `tt` (
? ? ? ? ? `id` int(10) unsigned NOTNULLAUTO_INCREMENT,? ? ? ? ? `name` varchar(16) NOTNULL,? ? ? ? ? `sex` enum('m','w') NOTNULLDEFAULT'm',? ? ? ? ? `age` tinyint(3) unsigned NOTNULL,? ? ? ? ? `classid` char(6)DEFAULTNULL,? ? ? ? ? PRIMARY KEY (`id`)
? ? ? ? ) ENGINE=InnoDBDEFAULTCHARSET=utf8;
? ? ? 導(dǎo)入實驗數(shù)據(jù)
? ? ? mysql> insert into zyyshop.tt(`name`,`sex`,`age`,`classid`) values('yiyi','w',20,'cls1'),('xiaoer','m',22,'cls3'),('zhangsan','w',21,'cls5'),('lisi','m',20,'cls4'),('wangwu','w',26,'cls6');
? ? ? 查看數(shù)據(jù)
? ? ? mysql> select * from zyyshop.tt;
? ? ? +----+----------+-----+-----+---------+? ? ? | id | name? ? | sex | age | classid |? ? ? +----+----------+-----+-----+---------+? ? ? |? 1 | yiyi? ? | w? |? 20 | cls1? ? |? ? ? |? 2 | xiaoer? | m? |? 22 | cls3? ? |? ? ? |? 3 | zhangsan | w? |? 21 | cls5? ? |? ? ? |? 4 | lisi? ? | m? |? 20 | cls4? ? |? ? ? |? 5 | wangwu? | w? |? 26 | cls6? ? |? ? ? +----+----------+-----+-----+---------+? ? ? 中午時分又執(zhí)行了修改數(shù)據(jù)操作
? ? ? mysql> update zyyshop.tt set name='李四' where id=4;
? ? ? mysql> update zyyshop.tt set name='小二' where id=2;
? ? ? 修改后的結(jié)果:
? ? ? mysql> select * from zyyshop.tt;
? ? ? +----+----------+-----+-----+---------+? ? ? | id | name? ? | sex | age | classid |? ? ? +----+----------+-----+-----+---------+? ? ? |? 1 | yiyi? ? | w? |? 20 | cls1? ? |? ? ? |? 2 | 小二? ? | m? |? 22 | cls3? ? |? ? ? |? 3 | zhangsan | w? |? 21 | cls5? ? |? ? ? |? 4 | 李四? ? | m? |? 20 | cls4? ? |? ? ? |? 5 | wangwu? | w? |? 26 | cls6? ? |? ? ? +----+----------+-----+-----+---------+? ? ? 假設(shè)此時是下午18:00,莫名地執(zhí)行了一條悲催的SQL語句,整個數(shù)據(jù)庫都沒了:
? ? ? mysql> drop database zyyshop;
? ? 3.此刻杯具了,別慌!先仔細(xì)查看最后一個binlog日志,并記錄下關(guān)鍵的pos點(diǎn),到底是哪個pos點(diǎn)的操作導(dǎo)致了數(shù)據(jù)庫的破壞(通常在最后幾步);
? ? ? 備份一下最后一個binlog日志文件:
? ? ? # ll /usr/local/mysql/data | grep mysql-bin# cp -v /usr/local/mysql/data/mysql-bin.000023 /root/? ? ? 此時執(zhí)行一次刷新日志索引操作,重新開始新的binlog日志記錄文件,理論說 mysql-bin.000023 這個文件不會再有后續(xù)寫入了(便于我們分析原因及查找pos點(diǎn)),以后所有數(shù)據(jù)庫操作都會寫入到下一個日志文件;
? ? ? mysql>flush logs;
? ? ? mysql> show master status;
? ? 4.讀取binlog日志,分析問題
? ? ? 方式一:使用mysqlbinlog讀取binlog日志:
? ? ? ? # /usr/local/mysql/bin/mysqlbinlog? /usr/local/mysql/data/mysql-bin.000023? ? ? 方式二:登錄服務(wù)器,并查看(推薦):
? ? ? ? mysql> show binlog events in 'mysql-bin.000023';
? ? ? ? 以下為末尾片段:
? ? ? ? +------------------+------+------------+-----------+-------------+------------------------------------------------------------+? ? ? ? | Log_name? ? ? ? |Pos| Event_type | Server_id | End_log_pos | Info? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? ? ? +------------------+------+------------+-----------+-------------+------------------------------------------------------------+? ? ? ? |mysql-bin.000023 |? 922 | Xid? ? ? ? |? ? ? ? 1 |? ? ? ? 953 | COMMIT/* xid=3820 */|? ? ? ? |mysql-bin.000023 |? 953 | Query? ? ? |? ? ? ? 1 |? ? ? ? 1038 | BEGIN? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? ? ? |mysql-bin.000023 | 1038 | Query? ? ? |? ? ? ? 1 |? ? ? ? 1164 |use`zyyshop`; update zyyshop.tt set name='李四' where id=4|? ? ? ? |mysql-bin.000023 | 1164 | Xid? ? ? ? |? ? ? ? 1 |? ? ? ? 1195 | COMMIT/* xid=3822 */|? ? ? ? |mysql-bin.000023 | 1195 | Query? ? ? |? ? ? ? 1 |? ? ? ? 1280 | BEGIN? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? ? ? |mysql-bin.000023 | 1280 | Query? ? ? |? ? ? ? 1 |? ? ? ? 1406 |use`zyyshop`; update zyyshop.tt set name='小二' where id=2|? ? ? ? |mysql-bin.000023 | 1406 | Xid? ? ? ? |? ? ? ? 1 |? ? ? ? 1437 | COMMIT/* xid=3823 */|? ? ? ? |mysql-bin.000023 | 1437 | Query? ? ? |? ? ? ? 1 |? ? ? ? 1538 | drop database zyyshop? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? ? ? +------------------+------+------------+-----------+-------------+------------------------------------------------------------+? ? ? ? 通過分析,造成數(shù)據(jù)庫破壞的pos點(diǎn)區(qū)間是介于 1437--1538 之間,只要恢復(fù)到1437前就可。
? ? 5.現(xiàn)在把凌晨備份的數(shù)據(jù)恢復(fù):
? ? ? # /usr/local/mysql/bin/mysql -uroot -p123456 -v < /root/BAK.zyyshop.sql;? ? ? 注: 至此截至當(dāng)日凌晨(4:00)前的備份數(shù)據(jù)都恢復(fù)了。
? ? ? ? ? 但今天一整天(4:00--18:00)的數(shù)據(jù)腫么辦呢?就得從前文提到的mysql-bin.000023 新日志做文章了......? ? 6.從binlog日志恢復(fù)數(shù)據(jù)
? ? ? 恢復(fù)語法格式:
? ? ? # mysqlbinlog mysql-bin.0000xx | mysql -u用戶名 -p密碼 數(shù)據(jù)庫名? ? ? ? 常用選項:
? ? ? ? ? --start-position=953? ? ? ? ? ? ? ? ? 起始pos點(diǎn)
? ? ? ? ? --stop-position=1437? ? ? ? ? ? ? ? ? 結(jié)束pos點(diǎn)
? ? ? ? ? --start-datetime="2013-11-29 13:18:54" 起始時間點(diǎn)
? ? ? ? ? --stop-datetime="2013-11-29 13:21:53"? 結(jié)束時間點(diǎn)
? ? ? ? ? --database=zyyshop? ? ? ? ? ? ? ? ? ? 指定只恢復(fù)zyyshop數(shù)據(jù)庫(一臺主機(jī)上往往有多個數(shù)據(jù)庫,只限本地log日志)
? ? ? ? 不常用選項:? ?
? ? ? ? ? -u --user=name? ? ? ? ? ? ? Connect to the remote serverasusername.連接到遠(yuǎn)程主機(jī)的用戶名
? ? ? ? ? -p --password[=name]? ? ? ? Password to connect to remote server.連接到遠(yuǎn)程主機(jī)的密碼
? ? ? ? ? -h --host=name? ? ? ? ? ? ? Get the binlog from server.從遠(yuǎn)程主機(jī)上獲取binlog日志
? ? ? ? ? --read-from-remote-server? Read binary logs from aMySQLserver.從某個MySQL服務(wù)器上讀取binlog日志
? ? ? 小結(jié):實際是將讀出的binlog日志內(nèi)容,通過管道符傳遞給mysql命令。這些命令、文件盡量寫成絕對路徑;
? ? ? A.完全恢復(fù)(本例不靠譜,因為最后那條 drop database zyyshop 也在日志里,必須想辦法把這條破壞語句排除掉,做部分恢復(fù))
? ? ? ? # /usr/local/mysql/bin/mysqlbinlog? /usr/local/mysql/data/mysql-bin.000021 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop? ? ? B.指定pos結(jié)束點(diǎn)恢復(fù)(部分恢復(fù)):
? ? ? ? @ --stop-position=953 pos結(jié)束點(diǎn)
? ? ? ? 注:此pos結(jié)束點(diǎn)介于“導(dǎo)入實驗數(shù)據(jù)”與更新“name='李四'”之間,這樣可以恢復(fù)到更改“name='李四'”之前的“導(dǎo)入測試數(shù)據(jù)”
? ? ? ? # /usr/local/mysql/bin/mysqlbinlog --stop-position=953 --database=zyyshop /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop? ? ?
? ? ? ? 在另一終端登錄查看結(jié)果(成功恢復(fù)了):
? ? ? ? mysql> select * from zyyshop.tt;
? ? ? ? +----+----------+-----+-----+---------+? ? ? ? | id | name? ? | sex | age | classid |? ? ? ? +----+----------+-----+-----+---------+? ? ? ? |? 1 | yiyi? ? | w? |? 20 | cls1? ? |? ? ? ? |? 2 | xiaoer? | m? |? 22 | cls3? ? |? ? ? ? |? 3 | zhangsan | w? |? 21 | cls5? ? |? ? ? ? |? 4 | lisi? ? | m? |? 20 | cls4? ? |? ? ? ? |? 5 | wangwu? | w? |? 26 | cls6? ? |? ? ? ? +----+----------+-----+-----+---------+? ? ? C.指定pso點(diǎn)區(qū)間恢復(fù)(部分恢復(fù)):
? ? ? ? 更新 name='李四' 這條數(shù)據(jù),日志區(qū)間是Pos[1038] --> End_log_pos[1164],按事務(wù)區(qū)間是:Pos[953] --> End_log_pos[1195];
? ? ? ? 更新 name='小二' 這條數(shù)據(jù),日志區(qū)間是Pos[1280] --> End_log_pos[1406],按事務(wù)區(qū)間是:Pos[1195] --> End_log_pos[1437];
? ? ? ? c1.單獨(dú)恢復(fù) name='李四' 這步操作,可這樣:
? ? ? ? ? # /usr/local/mysql/bin/mysqlbinlog --start-position=1038 --stop-position=1164 --database=zyyshop? /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop? ? ? ? ? 也可以按事務(wù)區(qū)間單獨(dú)恢復(fù),如下:
? ? ? ? ? # /usr/local/mysql/bin/mysqlbinlog --start-position=953 --stop-position=1195 --database=zyyshop? /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop? ? ? ? c2.單獨(dú)恢復(fù) name='小二' 這步操作,可這樣:
? ? ? ? ? # /usr/local/mysql/bin/mysqlbinlog --start-position=1280 --stop-position=1406 --database=zyyshop? /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop? ?
? ? ? ? ? 也可以按事務(wù)區(qū)間單獨(dú)恢復(fù),如下:
? ? ? ? ? # /usr/local/mysql/bin/mysqlbinlog --start-position=1195 --stop-position=1437 --database=zyyshop? /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop? ? ? ? c3.將 name='李四'、name='小二' 多步操作一起恢復(fù),需要按事務(wù)區(qū)間,可這樣:
? ? ? ? ? # /usr/local/mysql/bin/mysqlbinlog --start-position=953 --stop-position=1437 --database=zyyshop? /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop? ? ? D.在另一終端登錄查看目前結(jié)果(兩名稱也恢復(fù)了):
? ? ? ? mysql> select * from zyyshop.tt;
? ? ? ? +----+----------+-----+-----+---------+? ? ? ? | id | name? ? | sex | age | classid |? ? ? ? +----+----------+-----+-----+---------+? ? ? ? |? 1 | yiyi? ? | w? |? 20 | cls1? ? |? ? ? ? |? 2 | 小二? ? | m? |? 22 | cls3? ? |? ? ? ? |? 3 | zhangsan | w? |? 21 | cls5? ? |? ? ? ? |? 4 | 李四? ? | m? |? 20 | cls4? ? |? ? ? ? |? 5 | wangwu? | w? |? 26 | cls6? ? |? ? ? ? +----+----------+-----+-----+---------+? ? ? E.也可指定時間區(qū)間恢復(fù)(部分恢復(fù)):除了用pos點(diǎn)的辦法進(jìn)行恢復(fù),也可以通過指定時間區(qū)間進(jìn)行恢復(fù),按時間恢復(fù)需要用mysqlbinlog命令讀取binlog日志內(nèi)容,找時間節(jié)點(diǎn)。
? ? ? ? 比如,我把剛恢復(fù)的tt表刪除掉,再用時間區(qū)間點(diǎn)恢復(fù)
? ? ? ? mysql> drop table tt;
? ? ? ? @ --start-datetime="2013-11-29 13:18:54"? 起始時間點(diǎn)
? ? ? ? @ --stop-datetime="2013-11-29 13:21:53"? 結(jié)束時間點(diǎn)
? ? ? ? # /usr/local/mysql/bin/mysqlbinlog --start-datetime="2013-11-29 13:18:54" --stop-datetime="2013-11-29 13:21:53" --database=zyyshop /usr/local/mysql/data/mysql-bin.000021 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop? ? ? 總結(jié):所謂恢復(fù),就是讓mysql將保存在binlog日志中指定段落區(qū)間的sql語句逐個重新執(zhí)行一次而已。