日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql binary mode_mysql二进制文件操作语法(mysql binary log operate statements)

發(fā)布時間:2025/4/5 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql binary mode_mysql二进制文件操作语法(mysql binary log operate statements) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在 mysql 配置文件中配置 log-bin,重啟 mysql

my.cnf (on Linux/unix) or my.ini (on Windows) 例子:

[client]

...

[mysqld]

...

log-bin=mysql-bin (log_bin=/var/mydb/bin-log,指定 log 的路徑,以及名稱前綴)

---

一旦重啟,Mysql 會自動創(chuàng)建新的二進(jìn)制文件。您也不妨看看下面的變量:

server-id = 1

expire_logs_days = 4 (自動刪除 log 的天數(shù),缺省值為 0,即不自動刪除)

sync_binlog = 1

查看 binary logs

登陸 MySQL 之后執(zhí)行如下語句:

SHOW BINARY LOGS

等價

SHOW MASTER LOGS

返回值:

mysql> show master logs;

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

| Log_name | File_size |

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

| mysql-bin.000001 | 98 |

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

1 row in set (0.00 sec)

PURGE { BINARY | MASTER } LOGS

{ TO 'log_name' | BEFORE datetime_expr }

例子:

PURGE BINARY LOGS TO 'mysql-bin.010';

PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';

datetime_expr 參數(shù)格式為 YYYY-MM-DD hh:mm:ss。

上述語法,當(dāng)從庫正在同步時,也可以安全運行。你不必要關(guān)閉從庫。如果你正在刪除一個從庫正在同步的 log,上述語句將不會做任何操作。MySQL 5.7.2 以及之后版本將會報錯。然而,如果你刪除了一個從庫沒有同步的 log,那么從庫將無法與主庫保持?jǐn)?shù)據(jù)一致。

手動安全刪除日志的步驟:

在每一個從庫的 MySQL 上運行 SHOW SLAVE STATUS,檢驗從庫沒有從主庫讀取日志

使用命令 SHOW BINARY LOGS,查看主庫上的 binary log 文件

找出在從庫中時間最早的 log 文件,這是我們要刪除的目標(biāo)文件。如果所有從庫都對同一個 log 與主庫保持同步,那么那個日志就是我們要刪除的目標(biāo)文件

刪除之前,備份 log。(這一步是可選的,但是建議你這么做)

刪除目標(biāo)文件之前的 log

可以通過設(shè)置 expire_logs_days 參數(shù),自動刪除 log。

在調(diào)用上述刪除語句之前,log 已經(jīng)被刪除,比如 linux 中使用 rm 命令,那么該語句將會報錯。

binary log 格式

binary log 會記錄所有與數(shù)據(jù)修改相關(guān)的操作,查詢不會被記錄哦。

比如我有如下的一些操作:

1. drop table student_information;

2. drop table student;

3. CREATE TABLE `student` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` char(20) NOT NULL,

`age` tinyint(2) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`),

KEY `index_name` (`name`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

4. insert student values(1,'zhangsan',20);

5. insert student values(1,'zhangsan',20);

6. insert student values(3,'wangwu',22);

通過命令將 binary log 轉(zhuǎn)為 SQL 腳本:

mysqlbinlog mysql-bin.000001 > my.sql

binary log 存儲內(nèi)容為:

SET TIMESTAMP=1473842609/*!*/;

SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;

SET @@session.sql_mode=1344274432/*!*/;

/*!\C latin1 *//*!*/;

SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;

drop table student_information

/*!*/;

# at 193

#160914 16:43:35 server id 1 end_log_pos 276 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1473842615/*!*/;

drop table student

/*!*/;

# at 276

#160914 16:43:57 server id 1 end_log_pos 578 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1473842637/*!*/;

CREATE TABLE `student` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` char(20) NOT NULL,

`age` tinyint(2) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`),

KEY `index_name` (`name`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

/*!*/;

# at 578

#160914 16:44:11 server id 1 end_log_pos 648 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1473842651/*!*/;

BEGIN

/*!*/;

# at 648

#160914 16:44:11 server id 1 end_log_pos 751 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1473842651/*!*/;

insert student values(1,'zhangsan',20)

/*!*/;

# at 751

#160914 16:44:11 server id 1 end_log_pos 778 Xid = 29

COMMIT/*!*/;

# at 778

#160914 16:44:19 server id 1 end_log_pos 848 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1473842659/*!*/;

BEGIN

/*!*/;

# at 848

#160914 16:44:19 server id 1 end_log_pos 947 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1473842659/*!*/;

insert student values(2,'lisi',21)

/*!*/;

# at 947

#160914 16:44:19 server id 1 end_log_pos 974 Xid = 30

COMMIT/*!*/;

# at 974

#160914 16:44:25 server id 1 end_log_pos 1044 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1473842665/*!*/;

BEGIN

/*!*/;

# at 1044

#160914 16:44:25 server id 1 end_log_pos 1145 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1473842665/*!*/;

insert student values(3,'wangwu',22)

/*!*/;

# at 1145

#160914 16:44:25 server id 1 end_log_pos 1172 Xid = 31

COMMIT/*!*/;

# at 1172

#160914 17:31:33 server id 1 end_log_pos 1242 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1473845493/*!*/;

BEGIN

/*!*/;

# at 1242

#160914 17:31:33 server id 1 end_log_pos 1348 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1473845493/*!*/;

update student set age = 100 where id = 1

/*!*/;

# at 1348

#160914 17:31:33 server id 1 end_log_pos 1375 Xid = 33

COMMIT/*!*/;

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

從語法上可以看出,如果是 update 操作恢復(fù)的概率相對要麻煩很多,需要對比操作。 SET TIMESTAMP 是操作的時間戳,這個相當(dāng)有用,這樣就允許我們通過時間來確定重做的范圍。delete 以及 update 都被放置在事務(wù)里邊了,但是只有當(dāng)整個 binary log 執(zhí)行完成才算成功,任何一條語法的異常都會導(dǎo)致事務(wù)回滾,重做失敗。

直接重做 binary log 中的操作:

mysqlbinlog mysql-bin.000001 | mysql -u root -p

執(zhí)行過程中發(fā)生異常就被被終止,所以在重做之前需要自己處理該文件,使得重做的動作是自己想要的。比如從上述 binary log 中有 drop table student_information 操作,而此時的數(shù)據(jù)庫中已經(jīng)不存在該表,所以重做該步驟就會拋出異常信息。ERROR 1051 (42S02) at line 16: Unknown table 'student_information'

逐行查看 binary log 中內(nèi)容:

mysqlbinlog mysql-bin.000001 | more

轉(zhuǎn)換 binary log 為 SQL 腳本:

mysqlbinlog mysql-bin.000001 > my.sql

重做 SQL 腳本:

mysql -u root -p < my.sql

如果你有多個 binary log 文件需要被執(zhí)行,安全的方式是:將所有的 binary log 一次性執(zhí)行。不安全方法的示例:

mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!

mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!

使用兩個不同連接處理 binary log 可能導(dǎo)致問題,有可能會發(fā)生如下情況:第一個 binary log 包含語法 CREATE TEMPOARY TEBLE 而第二個 binary log 使用到該臨時表。當(dāng)?shù)谝粋€ binary log 執(zhí)行完成將會刪除臨時表,那么第二個 binary log 需要使用到該臨時表的語句將報錯。

在一個連接中完成 binary logs 的處理,例子如下:

mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

另外一種方法,將 binary logs 合并為一個 SQL 腳本:

mysqlbinlog binlog.000001 > /tmp/statements.sql

mysqlbinlog binlog.000002 >> /tmp/statements.sql

mysql -u root -p -e "source /tmp/statements.sql"

在讀取包含GTID的二進(jìn)制日志時寫入轉(zhuǎn)儲文件(請參見第18.1.3節(jié)“使用全局事務(wù)標(biāo)識符復(fù)制”),在mysqlbinlog中使用--skip-gtids選項,如下所示:

mysqlbinlog --skip-gtids binlog.000001 > /tmp/dump.sql

mysqlbinlog --skip-gtids binlog.000002 >> /tmp/dump.sql

mysql -u root -p -e "source /tmp/dump.sql"

歡迎轉(zhuǎn)載,但請注明本文鏈接,謝謝你。

2016.9.14 19:08

總結(jié)

以上是生活随笔為你收集整理的mysql binary mode_mysql二进制文件操作语法(mysql binary log operate statements)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产91亚洲精品 | 精品人妻一区二区乱码 | 超碰在线最新地址 | 美女久久久 | 蜜臀精品| 91麻豆影视 | 天天综合网天天综合 | 中文字幕第一页av | 天天爱天天插 | 欧美福利网址 | 国产精品污网站 | 精品久久香蕉国产线看观看亚洲 | 秋霞福利 | 欧洲中文字幕 | 男人天堂亚洲 | 日韩精品首页 | 国产精品久久国产精品 | 午夜手机福利 | 国产精品aaa | 99精品久久久久 | 毛片传媒| www九色| 制服诱惑一区二区三区 | 久久成人午夜 | av黄色网址| 山村大伦淫第1部分阅读小说 | 久久久噜噜噜久久 | 在线视频第一页 | 96福利视频 | 日本加勒比在线 | av手机在线免费观看 | 69re视频| 国产在线激情视频 | 射死你天天日 | 波多野吉衣视频在线观看 | 超碰色偷偷 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产一区二区三区在线视频观看 | 狠狠躁日日躁夜夜躁av | 国产一区二区成人 | 美日韩中文字幕 | 欧美日韩一区二区三区在线 | 狼友视频国产精品 | 午夜av一区 | 欧美少妇网 | 深夜福利视频在线 | 国产精品mm| 亚洲精品国产精品乱码不99热 | 精品一区二区三区入口 | 久久久久噜噜噜亚洲熟女综合 | 国产高清视频免费在线观看 | 久久精品一区二区国产 | 尹人综合在线 | 深夜福利网站 | 一区二区中文字幕在线观看 | 中文字幕亚洲一区二区三区 | 日本羞羞网站 | 亚洲成人精品视频 | 日本精品一区在线 | 欧美熟妇精品久久久久久 | 国产九九热| 欧美国产专区 | 99看片| 在线观看欧美亚洲 | a天堂中文在线 | 超碰人人人| 北岛玲一区二区 | 中文字幕精品一区 | 亚洲欧美在线视频观看 | 新91在线 | 国产免费一区二区三区最新6 | 国产精品高清网站 | 美女上床网站 | www黄色大片 | 波多野结衣电车痴汉 | 亚洲女同女同女同女同女同69 | 17c一起操| 嫩草影院黄色 | 欧美亚洲视频一区 | 久久久久久国产 | 露脸丨91丨九色露脸 | 91精品在线观看视频 | 青青草综合| 中文字字幕一区二区三区四区五区 | 欧美激情一区二区三级高清视频 | 少妇又色又紧又黄又刺激免费 | 多啪啪免费视频 | 99午夜视频 | 天堂网av2018 | 男女男精品视频 | 国产一级片在线播放 | 国产色视频一区二区三区qq号 | 日本性爱动漫 | 久久93 | 制服丝袜影音先锋 | 天天爽天天操 | 91黑丝美女| 91色视频 | 91嫩草香蕉|