一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務器之家 - 數(shù)據(jù)庫 - Mysql - MySQL binlog_ignore_db 參數(shù)的具體使用

MySQL binlog_ignore_db 參數(shù)的具體使用

2021-03-15 17:47MySQL技術(shù) Mysql

這篇文章主要介紹了MySQL binlog_ignore_db 參數(shù)的具體作用,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下

前言: 

經(jīng)過前面文章學習,我們知道 binlog 會記錄數(shù)據(jù)庫所有執(zhí)行的 DDL 和 DML 語句(除了數(shù)據(jù)查詢語句select、show等)。注意默認情況下會記錄所有庫的操作,那么如果我們有另類需求,比如說只讓某個庫記錄 binglog 或排除某個庫記錄 binlog ,是否支持此類需求呢?本篇文章我們一起來看下。

1. binlog_do_db 與 binlog_ignore_db

當數(shù)據(jù)庫實例開啟 binlog 時,我們執(zhí)行 show master status 命令,會看到有 Binlog_Do_DB 與 Binlog_Ignore_DB 選項。

?
1
2
3
4
5
6
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000009 |   282838 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+

默認情況下,這兩個選項為空,那么這兩個參數(shù)有何作用?是否如同其字面意思一個只讓某個庫記錄 binglog 一個排除某個庫記錄 binlog 呢?筆者查閱官方文檔,簡單說明下這兩個參數(shù)的作用:

  • binlog_do_db:此參數(shù)表示只記錄指定數(shù)據(jù)庫的二進制日志,默認全部記錄。
  • binlog_ignore_db:此參數(shù)表示不記錄指定的數(shù)據(jù)庫的二進制日志。

這兩個參數(shù)為互斥關(guān)系,一般只選擇其一設(shè)置,只能在啟動命令行中或配置文件中加入。指定多個數(shù)據(jù)庫要分行寫入,舉例如下:

?
1
2
3
4
5
6
7
8
9
# 指定 db1 db2 記錄binlog
[mysqld]
binlog_do_db = db1
binlog_do_db = db2
 
# 不讓 db3 db4 記錄binlog
[mysqld]
binlog_ignore_db = db3
binlog_ignore_db = db4

此外,這二者參數(shù)具體作用與否還與 binlog 格式有關(guān)系,在某些情況下 binlog 格式設(shè)置為 STATEMENT 或 ROW 會有不同的效果。在實際應用中 binlog_ignore_db 用途更廣泛些,比如說某個庫的數(shù)據(jù)不太重要,為了減輕服務器寫入壓力,我們可能不讓該庫記錄 binlog 。網(wǎng)上也有文章說設(shè)置 binlog_ignore_db 會導致從庫同步錯誤,那么設(shè)置該參數(shù)到底有什么效果呢,下面我們來具體實驗下。

2. binlog_ignore_db 具體效果

首先說明下,我的測試數(shù)據(jù)庫實例是 5.7.23 社區(qū)版本,共有 testdb、logdb 兩個業(yè)務庫,我們設(shè)置 logdb 不記錄 binlog ,下面來具體實驗下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
# binlog 為 ROW 格式 
 
# 1.不使用 use db
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |      154 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
mysql> select database();
+------------+
database() |
+------------+
NULL       |
+------------+
1 row in set (0.00 sec)
mysql> CREATE TABLE testdb.`test_tb1` ( id int name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.06 sec)
 
mysql> insert into testdb.test_tb1 values (1001,'sdfde');
Query OK, 1 row affected (0.01 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |      653 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> CREATE TABLE logdb.`log_tb1` ( id int name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.05 sec)
 
mysql> insert into logdb.log_tb1 values (1001,'sdfde');
Query OK, 1 row affected (0.00 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |      883 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
mysql> insert into logdb.log_tb1 values (1002,'sdsdfde'); 
Query OK, 1 row affected (0.01 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |      883 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
 
mysql> alter table logdb.log_tb1 add column c3 varchar(20);   
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     1070 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
# 結(jié)論:其他庫記錄正常 logdb庫會記錄DDL 不記錄DML
 
# 2.使用 use testdb跨庫
mysql> use testdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> select database();
+------------+
database() |
+------------+
| testdb     |
+------------+
1 row in set (0.00 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     1070 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> CREATE TABLE `test_tb2` ( id int name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.05 sec)
 
mysql> insert into test_tb2 values (1001,'sdfde');
Query OK, 1 row affected (0.04 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     1574 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> CREATE TABLE logdb.`log_tb2` ( id int name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.05 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     1810 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> insert into logdb.log_tb2 values (1001,'sdfde');
Query OK, 1 row affected (0.01 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     1810 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
# 結(jié)論:同樣logdb庫會記錄DDL 不記錄DML
 
# 3.使用 use logdb跨庫
mysql> use logdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> select database();
+------------+
database() |
+------------+
| logdb      |
+------------+
1 row in set (0.00 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     1810 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> CREATE TABLE testdb.`test_tb3` ( id int name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.23 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     1810 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> insert into testdb.test_tb3 values (1001,'sdfde');
Query OK, 1 row affected (0.02 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     2081 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> CREATE TABLE `log_tb3` ( id int name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.05 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     2081 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> insert into log_tb3 values (1001,'sdfde');
Query OK, 1 row affected (0.02 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     2081 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
# 結(jié)論:logdb都不記錄 同時不記錄其他庫的DDL
 
# 4.每次操作都進入此庫 不跨庫
mysql> use testdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     2081 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> CREATE TABLE `test_tb4` ( id int name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.05 sec)
 
mysql> insert into test_tb4 values (1001,'sdfde');
Query OK, 1 row affected (0.01 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     2585 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> use logdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> CREATE TABLE `log_tb4` ( id int name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.04 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     2585 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
mysql> insert into log_tb4 values (1001,'sdfde');
Query OK, 1 row affected (0.01 sec)
 
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 |     2585 |              | logdb            |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
# 結(jié)論:其他庫全部記錄 logdb全不記錄

同樣的,將 binlog 格式設(shè)置為 STATEMENT ,再次進行測試,這里不再贅述測試過程,總結(jié)下 STATEMENT 格式下的實驗結(jié)果:

  • 未選擇任何數(shù)據(jù)庫進行操作,所有都會記錄。
  • 選擇testdb,對testdb和logdb分別進行操作,所有庫都會記錄。
  • 選擇logdb,對testdb和logdb分別進行操作,所有庫都不會記錄。
  • 選擇某個庫并只對當前庫進行操作,則記錄正常,不會記錄logdb。

看了這么多實驗數(shù)據(jù),你是否眼花繚亂了呢,下面我們以思維導圖的形式總結(jié)如下:

MySQL binlog_ignore_db 參數(shù)的具體使用

這么看來 binlog_ignore_db 參數(shù)的效果確實和諸多因素有關(guān),特別是有從庫的情況下,主庫要特別小心使用此參數(shù),很容易產(chǎn)生主從同步錯誤。不過,按照嚴格標準只對當前數(shù)據(jù)庫進行操作,則不會產(chǎn)生問題。這也告訴我們要嚴格按照標準來,只賦予業(yè)務賬號某個單庫的權(quán)限,也能避免各種問題發(fā)生。

總結(jié): 

不清楚各位讀者是否對這種介紹參數(shù)的文章感興趣呢?可能這些是數(shù)據(jù)庫運維人員比較關(guān)注的吧。本篇文章主要介紹關(guān)于 binlog 的 binlog_ignore_db 參數(shù)的具體作用,可能本篇文章實驗環(huán)境還不夠考慮周全,有興趣的同學可以參考下官方文檔,有助于對該參數(shù)有更深入的了解。

以上就是MySQL binlog參數(shù)的使用的詳細內(nèi)容,更多關(guān)于MySQL binlog參數(shù)的資料請關(guān)注服務器之家其它相關(guān)文章!

原文鏈接:https://mp.weixin.qq.com/s/Xwwr1HJKRglNH9V-Ddihlg

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产在线99 | 欧美成人aaaa免费高清 | 国产免费美女视频 | 亚洲精品乱码久久久久久蜜桃欧美 | 免费视频左左视频 | 亚洲 无码 制服 日韩 | 精品久久免费视频 | 婷婷色伊人 | 亚洲乱码一二三四五六区 | 非洲一级毛片又粗又长aaaa | 亚洲 欧美 国产 综合 播放 | 大香人蕉免费视频75 | 亚洲品质自拍视频 | 大学生特黄特色大片免费播放 | 亚洲精品欧洲久久婷婷99 | 操国产美女 | 日本在线观看视频网站 | 国产91精品久久久久久 | 96日本xxxxxxxxx70| 亚州第一页 | 美女黄板视频 | 日韩欧美推理片免费看完整版 | 91看片淫黄大片欧美看国产片 | 亚洲AVAV天堂AV在线网爱情 | 免费视频专区一国产盗摄 | 九九精品视频在线观看九九 | 黑人干亚洲人 | 亚洲欧美日韩国产一区图片 | 欧美xxx000喷水 | 日本videos有奶水的hd | 无遮挡激情 | 午夜一个人在线观看完整版 | 色999| 欧美牛逼aa | 白丝出水| 欧美黑人换爱交换乱理伦片 | 干妞网免费视频 | 无人在线视频高清免费播放 | 天天久久综合网站 | 亚洲欧美综合在线观看 | 91色爱 |