項目第一期上線後,後期的升級需要升級腳本,不能直接導入整個sql。所以這裡開啟mysql的bin-log,將所有執行的sql都記錄到bin-log中。
我的系統是windows,mysql是社區版5.6 。
1. bin-log所在目錄
mysql5.6安裝完成後,其數據文件和log都保存在C:\Documentsand Settings\All Users\Application Data\MySQL\MySQL Server 5.6\data 這個目錄下。
2. 確認bin-log日志是否開啟
SHOW VARIABLES LIKE 'log_bin'
3. 開啟bin-log
mysql的配置文件my.ini,所在目錄C:\Documentsand Settings\All Users\Application Data\MySQL\MySQL Server 5.6 。添加log-bin=”log_bin”,bin-log的文件名稱為log_bin.00000x。
如下圖所示,這樣就開啟了myql的bin-log日志了,mysql會在data目錄生成log_bin.00000x文件。
4.bin-log轉換為txt文本
bin-log是二進制文件,可以使用mysqlbinlog命令將其轉換成文本格式。
mysqlbinlog log_bin.000001 > log_bin.txt
5. 生成新的log文件
flush logs
6.bin-log日志恢復
將整個log_bin.000001進行恢復數據
mysqlbinlog log_bin.000001
bin-log恢復到某個點
現在要從log_bin.000001(bin-log文件)恢復某個點到某個點:
mysqlbinlog --start-position 325--stop-position 567 log_bin.000001
參數:
--start-position開始點
--stop-position結束點
--start-date 開始時間
--stop-date 結束時間
log_bin.000001內容:
/*!*/;
# at 325
#130929 16:30:46 server id 1 end_log_pos 490 CRC32 0x9501d4ba Query thread_id=16 exec_time=0 error_code=0
SET TIMESTAMP=1380443446/*!*/;
ALTER TABLE `sdghdb`.`test` ADD COLUMN `name` VARCHAR(45) NULL COMMENT '名稱' AFTER `info`
/*!*/;
# at 490
#130929 16:31:22 server id 1 end_log_pos 567 CRC32 0xefc463e6 Query thread_id=17 exec_time=0 error_code=0
SET TIMESTAMP=1380443482/*!*/;
BEGIN
/*!*/;
# at 567
#130929 16:31:22 server id 1 end_log_pos 706 CRC32 0xfa48b5d3 Query thread_id=17 exec_time=0 error_code=0
SET TIMESTAMP=1380443482/*!*/;
INSERT INTO `sdghdb`.`test` (`info`, `name`) VALUES ('aaa', 'bbbb')
/*!*/;