国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySql運(yùn)維篇---008:日志:錯(cuò)誤日志、二進(jìn)制日志、查詢?nèi)罩?、慢查詢?nèi)罩?,主從?fù)制:概述 虛擬機(jī)更改ip注意事項(xiàng)、原理、搭建步驟

這篇具有很好參考價(jià)值的文章主要介紹了MySql運(yùn)維篇---008:日志:錯(cuò)誤日志、二進(jìn)制日志、查詢?nèi)罩?、慢查詢?nèi)罩?,主從?fù)制:概述 虛擬機(jī)更改ip注意事項(xiàng)、原理、搭建步驟。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 日志

1.1 錯(cuò)誤日志

錯(cuò)誤日志是 MySQL 中最重要的日志之一,它記錄了當(dāng) mysqld 啟動(dòng)和停止時(shí),以及服務(wù)器在運(yùn)行過程中發(fā)生任何嚴(yán)重錯(cuò)誤時(shí)的相關(guān)信息。當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)任何故障導(dǎo)致無法正常使用時(shí),建議首先查看此日志。

該日志是默認(rèn)開啟的,默認(rèn)存放目錄 /var/log/,默認(rèn)的日志文件名為 mysqld.log 。查看日志位置:

#先登錄mysql
mysql -uroot -p1234

#通過此系統(tǒng)變量查看日志文件的位置
show variables like '%log_error%';

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

#通過tail指令查看文件尾部的50行日志
tail -n 50 /var/log/mysqld.log	

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

1.2 二進(jìn)制日志

1.2.1 介紹

二進(jìn)制日志(BINLOG)記錄了所有的 DDL(數(shù)據(jù)定義語言:創(chuàng)建數(shù)據(jù)庫(kù)…)語句和 DML(數(shù)據(jù)操縱語言:增刪改)語句,但不包括數(shù)據(jù)查詢(SELECT、SHOW)語句。

作用:

  • ①. 災(zāi)難時(shí)的數(shù)據(jù)恢復(fù);
    • 因?yàn)槎M(jìn)制日志中記錄了數(shù)據(jù)庫(kù)、表、以及數(shù)據(jù)的變更。只需要把這里面的語句再次執(zhí)行就可以恢復(fù)數(shù)據(jù)了。
  • ②. MySQL的主從復(fù)制。在MySQL8版本中
    • 主從復(fù)制底層原理就是基于二進(jìn)制日志的,具體查看下一章。

mysql8.0版本默認(rèn)二進(jìn)制日志是開啟著的,涉及到的參數(shù)如下:

#先登錄mysql
mysql -uroot -p1234

#通過此系統(tǒng)變量來查看二進(jìn)制日志相關(guān)的參數(shù)配置
show variables like '%log_bin%';

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

參數(shù)說明:

  • log_bin:on代表二進(jìn)制日志是開著的。

  • log_bin_basename:最終生成的二進(jìn)制日志文件就在/var/lib/mysql目錄下,文件名叫做binlog,但是日志文件有可能有很多,binlog只是它的前綴。

    • 當(dāng)前數(shù)據(jù)庫(kù)服務(wù)器的binlog日志的基礎(chǔ)名稱(前綴),具體的binlog文件名需要再該basename的基礎(chǔ)上加上編號(hào)(編號(hào)從000001開始往上自增)。
    • 第一個(gè)日志文件寫滿了或者日志的格式變更了之后,它會(huì)再次開啟一個(gè)新的文件來寫日志。
  • log_bin_index:binlog的索引文件,里面記錄了當(dāng)前服務(wù)器關(guān)聯(lián)的binlog文件有哪些。

測(cè)試:

進(jìn)入到/var/lib/mysql目錄查看二進(jìn)制文件到底有沒有·

#不登錄mysql執(zhí)行
cd /var/lib/mysql

#可以看到二進(jìn)制日志文件和索引文件
ll

#查看索引文件:里面就記錄了當(dāng)前mysql數(shù)據(jù)庫(kù)關(guān)聯(lián)的日志文件有哪些
cat binlog.index

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

1.2.2 格式

MySQL服務(wù)器中提供了多種格式來記錄二進(jìn)制日志,具體格式及特點(diǎn)如下:

日志格式 含義
STATEMENT 基于SQL語句的日志記錄,記錄的是SQL語句,對(duì)數(shù)據(jù)進(jìn)行修改的SQL都會(huì)記錄在日志文件中。
ROW 基于行的日志記錄,記錄的是每一行的數(shù)據(jù)變更。(默認(rèn))
MIXED 混合了STATEMENT和ROW兩種格式,默認(rèn)采用STATEMENT,在某些特殊情況下會(huì)自動(dòng)切換為ROW進(jìn)行記錄。

舉例:如果我們執(zhí)行了一條update語句,這條update語句影響的行數(shù)是5行

  • STATEMENT:記錄的就是這條update語句
  • ROW :它記錄的是update語句所影響的這五行,每一行的數(shù)據(jù)內(nèi)容在變更之前怎么樣,在變更之后是什么樣。
#先登錄mysql
mysql -uroot -p1234

#通過此系統(tǒng)變量,查看當(dāng)前mysql的版本中默認(rèn)的日志格式是那個(gè)
show variables like '%binlog_format%';

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

如果我們需要配置二進(jìn)制日志的格式,只需要在 /etc/my.cnf 中配置 binlog_format 參數(shù)即可。

vim /etc/my.cnf 

#在這個(gè)文件中添加一行內(nèi)容
binlog_format=STATEMENT

#重新啟動(dòng)mysql服務(wù)
systemctl restart mysqld.service

cd /var/lib/mysql

#可以看到此時(shí)重新生成了一個(gè)日志文件binlog.000005,原先是1~4。
#因?yàn)樗亩M(jìn)制日志格式改了,他不會(huì)再往原來的二進(jìn)制日志文件寫入了,而是寫到一個(gè)新的日志文件中。
ll

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

再次查看此系統(tǒng)變量,發(fā)現(xiàn)日志格式已經(jīng)修改為STATEMENT

#先登錄mysql
mysql -uroot -p1234

#通過此系統(tǒng)變量,查看當(dāng)前mysql的版本中默認(rèn)的日志格式是哪個(gè)
show variables like '%binlog_format%';

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

1.2.3 查看

由于日志是以二進(jìn)制方式存儲(chǔ)的,不能直接讀取,需要通過二進(jìn)制日志查詢工具 mysqlbinlog 來查看,具體語法:

#logfilename:二進(jìn)制文件名
mysqlbinlog [ 參數(shù)選項(xiàng) ] logfilename


參數(shù)選項(xiàng):

	-d 		指定數(shù)據(jù)庫(kù)名稱,只列出指定的數(shù)據(jù)庫(kù)相關(guān)操作。
	-o 		忽略掉日志中的前n行命令。
	-v 		將行事件(數(shù)據(jù)變更)重構(gòu)為SQL語句
	-vv 	將行事件(數(shù)據(jù)變更)重構(gòu)為SQL語句,并輸出注釋信息

測(cè)試:接下來呢我們就來設(shè)置一下這兩種日志格式,來看一下它們之間的區(qū)別是什么樣子的。

情況1:當(dāng)前的日志格式是row

第一步:以db01數(shù)據(jù)庫(kù)下的stu表為例進(jìn)行演示。

客戶端1:就是登錄進(jìn)mysql執(zhí)行的命令

mysql -uroot -p1234

#當(dāng)前的日志格式是row
show variables like '%binlog_format%';

use db01;

#查看db01數(shù)據(jù)庫(kù)下面有哪些表
show tables;

#查看stu表下面有哪些數(shù)據(jù)
select * from stu;

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
第二步:執(zhí)行更新語句

客戶端1update stu set age = age +1 where id =1; 

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

第三步:查看二進(jìn)制日志表記錄的是什么內(nèi)容

客戶端2:就是沒有登錄進(jìn)mysql執(zhí)行的命令

cd /var/lib/mysql

ll

#因?yàn)槎M(jìn)制日志是第一個(gè)日志文件寫滿了之后會(huì)開啟一個(gè)新的日志文件,所以只需要看最后一個(gè)日志文件即可。
#二進(jìn)制文件不能直接查看使用cat顯示的是亂碼,需要通過mysqlbinlog 指令來查看
#日志里面是以行的格式顯示的,所以看不到sql語句,我們還需要使用-v把它重構(gòu)為sql語句才能看到
#效果:在日志的最后部分可以看到數(shù)據(jù)執(zhí)行前后的變化
mysqlbinlog  -v binlog.000004;

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
可以看出日志格式是row,記錄的是記錄的是每一行的數(shù)據(jù)變更,在變更之前怎么樣,在變更之后是什么樣。
mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

情況2:當(dāng)前的日志格式是STATEMENT

第一步:修改日志格式為STATEMENT,只需要在 /etc/my.cnf 中配置 binlog_format 參數(shù)即可

vim /etc/my.cnf 

#在這個(gè)文件中添加一行內(nèi)容
binlog_format=STATEMENT

#重新啟動(dòng)mysql服務(wù)
systemctl restart mysqld.service

cd /var/lib/mysql

#可以看到此時(shí)重新生成了一個(gè)日志文件binlog.000005,原先是1~4。
#因?yàn)樗亩M(jìn)制日志格式改了,他不會(huì)再往原來的二進(jìn)制日志文件寫入了,而是寫到一個(gè)新的日志文件中。
ll

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

第二步:再次執(zhí)行之前的更新語句

mysql -uroot -p1234

use db01;

update stu set age = age +1 where id =1; 

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

第三步:再次查看這個(gè)新生成的二進(jìn)制日志表的內(nèi)容

#進(jìn)入到二進(jìn)制日志文件存放的位置
cd /var/lib/mysql

#可以看到此目錄下有這個(gè)日志文件
ll

#查看此二進(jìn)制日志文件
#不需要加-v,因?yàn)槭荢TATEMENT它本身記錄的就是sql語句
#效果:可以看到此時(shí)記錄的就是sql語句而不是每一行的數(shù)據(jù)變化
mysqlbinlog  binlog.000005;

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

1.2.4 刪除

對(duì)于比較繁忙的業(yè)務(wù)系統(tǒng),每天生成的binlog數(shù)據(jù)巨大,如果長(zhǎng)時(shí)間不清除,將會(huì)占用大量磁盤空間。可以通過以下幾種方式清理日志:

指令 含義
reset master 刪除全部 binlog 日志,刪除之后,日志編號(hào),將從 binlog.000001重新開始
purge master logs to 'binlog.*****' 刪除 ***** 編號(hào)之前的所有日志
purge master logs before 'yyyy-mm-dd hh24:mi:ss' 刪除日志為 “yyyy-mm-dd hh24:mi:ss” 時(shí)間點(diǎn)之前產(chǎn)生的所有日志

也可以在mysql的配置文件中配置二進(jìn)制日志的過期時(shí)間,設(shè)置了之后,二進(jìn)制日志過期會(huì)自動(dòng)刪除。

mysql -uroot -p1234

#查看系統(tǒng)變量,在mysql命令行中執(zhí)行
#單位是秒,默認(rèn)過期時(shí)間為30天,到期之后會(huì)自動(dòng)刪除
show variables like '%binlog_expire_logs_seconds%';

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

測(cè)試:

客戶端1:

mysql -uroot -p1234

#刪除000002之前的日志文件,不包含000002
purge master logs to 'binlog.000002';

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

客戶端2:

cd /var/lib/mysql

#可以看到二進(jìn)制日志文件和索引文件
ll

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

1.3 查詢?nèi)罩?/h3>

查詢?nèi)罩局杏涗浟丝蛻舳说?strong>所有操作語句,而二進(jìn)制日志不包含查詢數(shù)據(jù)的SQL語句。默認(rèn)情況下, 查詢?nèi)罩臼?strong>未開啟的。

mysql -uroot -p1234

#檢查參數(shù)查看開關(guān)是否開啟
#可以看到默認(rèn)是關(guān)閉的以及日志文件所處位置和文件名
show variables like '%general%';

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

如果需要開啟查詢?nèi)罩?,可以修改MySQL的配置文件 /etc/my.cnf 文件,添加如下內(nèi)容:

vim  /etc/my.cnf 

#該選項(xiàng)用來開啟查詢?nèi)罩?, 可選值 : 0 或者 1 ; 0 代表關(guān)閉, 1 代表開啟
general_log=1

#設(shè)置日志的文件名 , 如果沒有指定, 默認(rèn)的文件名為 host_name.log
general_log_file=mysql_query.log

#重啟mysql服務(wù)
systemctl restart mysqld.service

#查看這個(gè)目錄下是否會(huì)生成此日志文件
cd /var/lib/mysql/

ll

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

開啟了查詢?nèi)罩局螅贛ySQL的數(shù)據(jù)存放目錄,也就是 /var/lib/mysql/ 目錄下就會(huì)出現(xiàn)mysql_query.log 文件。之后所有的客戶端的增刪改查操作都會(huì)記錄在該日志文件之中,長(zhǎng)時(shí)間運(yùn)行后,該日志文件將會(huì)非常大。所以用不上此日志文件,我們可以把它關(guān)上。

測(cè)試

客戶端1:


mysql -uroot -p1234

use db01;

#執(zhí)行查詢操作(前提是已經(jīng)登錄)
select * from stu;

#執(zhí)行更新操作
update stu set age=100 where id=7; 

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
客戶端2:

cd /var/lib/mysql/

#前提是已經(jīng)進(jìn)入到了這個(gè)目錄,并且目錄下有這個(gè)文件(上面已經(jīng)配置過了)
#實(shí)時(shí)刷新此日志文件尾部的內(nèi)容(tail查看文件尾部,-f表示實(shí)時(shí)刷新)
tail -f mysql_query.log

可以看到所有的DDL和DML操作都會(huì)在日志表當(dāng)中記錄。

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

1.4 慢查詢?nèi)罩?/h3>

慢查詢?nèi)罩居涗浟怂袌?zhí)行時(shí)間超過參數(shù) long_query_time 設(shè)置值并且掃描記錄數(shù)不小于min_examined_row_limit 的所有的SQL語句的日志,默認(rèn)未開啟。long_query_time 默認(rèn)為10 秒,最小為 0, 精度可以到微秒。

解釋:

  • 慢查詢?nèi)罩居涗浟藞?zhí)行效率比較低,執(zhí)行速度比較慢的sql語句。
  • 之前在索引的sql性能分析中講解過。

如果需要開啟慢查詢?nèi)罩荆枰贛ySQL的配置文件 /etc/my.cnf 中配置如下參數(shù):

#慢查詢?nèi)罩荆?代表開啟
slow_query_log=1

#執(zhí)行時(shí)間參數(shù):表示執(zhí)行時(shí)間超過2秒就是慢查詢?nèi)罩?,此時(shí)慢查詢?nèi)罩疚募蜁?huì)記錄這條sql.
long_query_time=2

默認(rèn)情況下,不會(huì)記錄管理語句,也不會(huì)記錄不使用索引進(jìn)行查找的查詢??梢允褂胠og_slow_admin_statements和 更改此行為 log_queries_not_using_indexes,如下所述。

解釋:

  • 通過在vim /etc/my.cnf 配置文件中配置這2個(gè)參數(shù),可以改變它的默認(rèn)行為。
  • 如果添加了log_slow_admin_statements =1:表示當(dāng)我們執(zhí)行比較慢的管理語句的時(shí)候,也會(huì)記錄在慢查詢?nèi)罩井?dāng)中。
  • 如果添加了log_queries_not_using_indexes = 1:表示如果某一條sql語句,它沒有使用索引而造成執(zhí)行效率比較慢的話,也會(huì)記錄在慢查詢?nèi)罩井?dāng)中。
  • 通過慢查詢?nèi)罩揪涂梢远ㄎ怀瞿切﹕ql執(zhí)行效率低,從而對(duì)這類的sql進(jìn)行優(yōu)化。
#記錄執(zhí)行較慢的管理語句
log_slow_admin_statements =1

#記錄執(zhí)行較慢的未使用索引的語句
log_queries_not_using_indexes = 1

上述所有的參數(shù)配置完成之后,都需要重新啟動(dòng)MySQL服務(wù)器才可以生效。

測(cè)試:

客戶端1:

mysql -uroot -p1234

#db01數(shù)據(jù)庫(kù)下有tb_sku表,存放了1000萬條記錄
#電腦太卡,所以我沒有創(chuàng)建tb_sku表,這里不在演示,只顯示最終結(jié)果
use db01;

#不會(huì)記錄
select * from tb_user limit 0,10; -- 這條SQL執(zhí)行效率比較高, 執(zhí)行耗時(shí) 0.01sec

#前面學(xué)習(xí)過SQL優(yōu)化,分頁(yè)查詢?cè)较蚝笮试降停藭r(shí)超過2秒,會(huì)記錄在慢查詢?nèi)罩局?/span>
select * from tb_user limit 1000000,10; -- 由于tb_sku表中, 預(yù)先存入了1000w的記錄, count一次,耗時(shí)4.71sec(秒)

客戶端2:

#配置慢查詢?nèi)罩?/span>
vim /etc/my.cnf 

#配置的內(nèi)容
slow_query_log=1

long_query_time=2

# 重啟Mysql服務(wù)器
systemctl restart mysqld

# 進(jìn)入到此目錄,發(fā)現(xiàn)會(huì)有一個(gè)后綴是-slow.log的日志文件
cd /var/lib/mysql/

ll

#實(shí)時(shí)刷新文件尾部的位置發(fā)現(xiàn):
#記錄了什么時(shí)間哪一個(gè)用戶在哪一個(gè)主機(jī)上執(zhí)行了什么樣的sql語句
tail -f mysql8-slow.log

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

2.主從復(fù)制

2.1 概述

主從復(fù)制是指將主數(shù)據(jù)庫(kù)的 DDL 和 DML 操作通過二進(jìn)制日志傳到從庫(kù)服務(wù)器中,然后在從庫(kù)上對(duì)這些日志重新執(zhí)行(也叫重做),從而使得從庫(kù)和主庫(kù)的數(shù)據(jù)保持同步。

MySQL支持一臺(tái)主庫(kù)同時(shí)向多臺(tái)從庫(kù)進(jìn)行復(fù)制, 從庫(kù)同時(shí)也可以作為其他從服務(wù)器的主庫(kù),實(shí)現(xiàn)鏈狀復(fù)制。

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

MySQL 復(fù)制的優(yōu)點(diǎn)主要包含以下三個(gè)方面:

  • 主庫(kù)出現(xiàn)問題,可以快速切換到從庫(kù)提供服務(wù)。
  • 實(shí)現(xiàn)讀寫分離,降低主庫(kù)的訪問壓力。
    • 增刪改操作主庫(kù),查詢操作從庫(kù)。
  • 可以在從庫(kù)中執(zhí)行備份,以避免備份期間影響主庫(kù)服務(wù)。
    • 數(shù)據(jù)備份的時(shí)候加上全局鎖以防止備份的數(shù)據(jù)不完整,此時(shí)數(shù)據(jù)庫(kù)處于只讀狀態(tài),其它的客戶端只能查詢不能做增刪改。
    • 有了主從復(fù)制后,可以在從庫(kù)當(dāng)中進(jìn)行備份只需要鎖從庫(kù)就行,主庫(kù)仍然可以進(jìn)行增刪改等操作。從庫(kù)加了全局鎖后仍然可以查詢,只不過在數(shù)據(jù)備份期間可能存在一定的數(shù)據(jù)延遲,因?yàn)樵趥浞萜陂g從庫(kù)是不能夠執(zhí)行從主庫(kù)同步過來的二進(jìn)制日志的。
    • 解決:可以使用single-transaction參數(shù)代替加全局鎖的方式進(jìn)行備份,來保證數(shù)據(jù)的一致性備份------詳情查看全局鎖。

2.2 原理

MySQL主從復(fù)制的核心就是 二進(jìn)制日志,具體的過程如下:

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

從上圖來看,復(fù)制分成三步:

  1. Master 主庫(kù)在事務(wù)提交時(shí),會(huì)把數(shù)據(jù)變更記錄在二進(jìn)制日志文件 Binlog 中。

  2. 從庫(kù)讀取主庫(kù)的二進(jìn)制日志文件 Binlog ,寫入到從庫(kù)的中繼日志 Relay Log 。

    • 從庫(kù)中的IOthread線程:發(fā)起一個(gè)請(qǐng)求連接主數(shù)據(jù)庫(kù),然后讀取主數(shù)據(jù)庫(kù)中的 Binlog日志,讀取完并返回從庫(kù)之后,此線程會(huì)把Binlog日志寫入到從庫(kù)自身的一份日志(中繼日志 Relay Log)中。
  3. slave從庫(kù)重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)。

    • 從庫(kù)中的SQLthread線程:讀取中繼日志當(dāng)中的數(shù)據(jù),然后把中繼日志當(dāng)中所記錄的數(shù)據(jù)變化在反映到自身數(shù)據(jù)庫(kù)的數(shù)據(jù)變化,從而保證主從數(shù)據(jù)的一致。

舉例:主庫(kù)執(zhí)行insert語句之后寫入到二進(jìn)制日志中,然后被IOthread線程讀取過來之后寫入到中繼日志,那么SQLthread線程讀取中繼日志就會(huì)讀取到這條insert語句,那么接下來在從庫(kù)當(dāng)中再去執(zhí)行這條insert,此時(shí)就保證了主從數(shù)據(jù)的一致。

2.3 搭建

2.3.1 環(huán)境準(zhǔn)備

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

準(zhǔn)備好兩臺(tái)服務(wù)器之后,在上述的兩臺(tái)服務(wù)器中分別安裝好MySQL,并完成基礎(chǔ)的初始化準(zhǔn)備(安裝、 密碼配置等操作)工作(注意要關(guān)閉防火墻)。 其中:

  • 192.168.10.200作為主服務(wù)器master

    • 主機(jī)名:master
  • 192.168.10.201作為從服務(wù)器slave

    • 主機(jī)名:slave
      mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

注意事項(xiàng)

  • 首先配置的ip地址要和虛擬機(jī)配置的域名解析要在同一個(gè)網(wǎng)段,只有最后一個(gè)可以不同。
    mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
  • 如果重啟虛擬機(jī)后不顯示ens33網(wǎng)卡,需要重啟網(wǎng)絡(luò)服務(wù),當(dāng)然啟動(dòng)服務(wù)時(shí)有可能會(huì)報(bào)錯(cuò),需要關(guān)閉NetworkManger 服務(wù)。
    • ifconfig異常情況不顯示ens33:
      mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

    • ifconfig正常情況顯示ens33:
      mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

#重啟網(wǎng)絡(luò)服務(wù),可能會(huì)報(bào)錯(cuò)
service network restart

#如果報(bào)錯(cuò):可能是和 NetworkManager 服務(wù)有沖突
#NetworkManager 是一個(gè)為系統(tǒng)提供檢測(cè)和配置功能以便自動(dòng)連接到網(wǎng)絡(luò)的程序。包含一個(gè)守護(hù)程序、一個(gè)命令行界面(nmcli)和一個(gè)基于 curses 的界面(nmtui)。

#解決:直接關(guān)閉 NetworkManger 服務(wù)就好了,并且禁止開機(jī)啟動(dòng),之后在重啟網(wǎng)絡(luò)服務(wù)
#關(guān)閉NetworkManger 服務(wù)
service NetworkManager stop

#禁止開機(jī)啟動(dòng)
chkconfig NetworkManager off

#此時(shí)再次啟動(dòng)網(wǎng)絡(luò)服務(wù)就會(huì)成功了
service network restart

最后查看2臺(tái)mysql服務(wù)器的運(yùn)行狀態(tài):

systemctl status mysqld

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

2.3.2 主庫(kù)配置

1.修改配置文件 vim /etc/my.cnf

#mysql 服務(wù)ID,保證整個(gè)集群環(huán)境中唯一,取值范圍:1 – 232-1,默認(rèn)為1
server-id=1

#是否只讀,1 代表只讀, 0 代表讀寫
read-only=0

#以下2個(gè)不需要配置,表示創(chuàng)建的所有數(shù)據(jù)庫(kù)都需要進(jìn)行同步
#忽略的數(shù)據(jù), 指不需要同步的數(shù)據(jù)庫(kù)
#binlog-ignore-db=mysql

#指定同步的數(shù)據(jù)庫(kù)
#binlog-do-db=db01

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

2.重啟MySQL服務(wù)器

#如果沒有報(bào)錯(cuò)代表配置文件中的配置成功
systemctl restart mysqld

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

3.登錄mysql,創(chuàng)建遠(yuǎn)程連接的賬號(hào),并授予主從復(fù)制權(quán)限

解釋

  • ‘itcast’@‘%’:其中itcast是用戶名,@'%代表這個(gè)用戶可以在任意主機(jī)上來訪問當(dāng)前服務(wù)器
  • 密碼是:Root@123456
#需要先登錄mysql
mysql -uroot -p1234

#創(chuàng)建itcast用戶,并設(shè)置密碼,該用戶可在任意主機(jī)連接該MySQL服務(wù)
#作用:在從庫(kù)當(dāng)中連接主庫(kù)時(shí)的賬號(hào)和密碼。
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';


#為 'itcast'@'%' 用戶分配主從復(fù)制權(quán)限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

4.通過指令,查看二進(jìn)制日志坐標(biāo)

show master status ;

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

字段含義說明:

  • file : 從哪個(gè)日志文件開始推送日志文件(寫到那個(gè)日志文件了)
  • position : 從哪個(gè)位置開始推送日志
  • binlog_ignore_db : 指定不需要同步的數(shù)據(jù)庫(kù)
  • 主庫(kù)配置完后就不要在執(zhí)行DML增刪改以及DDL語句了。

2.3.3 從庫(kù)配置

1.修改配置文件 vim /etc/my.cnf

#mysql 服務(wù)ID,保證整個(gè)集群環(huán)境中唯一,取值范圍:1 – 2^32-1,和主庫(kù)不一樣即可
server-id=2


#是否只讀,1 代表只讀, 0 代表讀寫
#從庫(kù)只需要做查詢操作不需要做修改操作,所以設(shè)置為1也可以。
#這個(gè)選項(xiàng)僅僅代表是普通用戶只讀,如果這個(gè)用戶具有超級(jí)管理員super的權(quán)限,那么他也是可以進(jìn)行讀寫的。
read-only=1

#如果想要禁用超級(jí)管理員的讀寫功能,讓它也變?yōu)橹挥凶x的功能,可以設(shè)置以下參數(shù)
super-read-only=1

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

2.重新啟動(dòng)MySQL服務(wù)

systemctl restart mysqld 

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

3.登錄mysql,設(shè)置主庫(kù)配置

現(xiàn)在主庫(kù)和從庫(kù)是沒有關(guān)系的,并沒有產(chǎn)生關(guān)聯(lián),所以接下來還要在從庫(kù)中去設(shè)置主庫(kù)的相關(guān)配置。

  • SOURCE_HOST=‘192.168.200.200’:原主機(jī)地址是多少,也就是主庫(kù)的ip
  • SOURCE_USER=‘itcast’:連接這個(gè)ip地址對(duì)應(yīng)的mysql,那么我的用戶名是多少
  • SOURCE_PASSWORD=‘Root@123456’:密碼是多少
  • SOURCE_LOG_FILE=‘binlog.000004’:從哪個(gè)二進(jìn)制日志文件開始同步
  • SOURCE_LOG_POS=663:表示從這份日志文件中的哪個(gè)位置開始同步。
mysql -uroot -p1234

CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.10.200', SOURCE_USER='itcast',SOURCE_PASSWORD='Root@123456', SOURCE_LOG_FILE='binlog.000012',SOURCE_LOG_POS=663;

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

上述是8.0.23中的語法。如果mysql是 8.0.23 之前的版本,執(zhí)行如下SQL:

CHANGE MASTER TO MASTER_HOST='192.168.10.201', MASTER_USER='itcast',MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000012',MASTER_LOG_POS=663;

2個(gè)版本的區(qū)別是參數(shù)名不同:當(dāng)前使用的8.0.26版本兼容之前的語法,所以執(zhí)行那一條都可以

參數(shù)名 含義 8.0.23之前
SOURCE_HOST 主庫(kù)IP地址 MASTER_HOST
SOURCE_USER 連接主庫(kù)的用戶名 MASTER_USER
SOURCE_PASSWORD 連接主庫(kù)的密碼 MASTER_PASSWORD
SOURCE_LOG_FILE binlog日志文件名 MASTER_LOG_FILE
SOURCE_LOG_POS binlog日志文件位置 MASTER_LOG_POS

4.開啟同步操作

start replica ; #8.0.22之后

start slave ; #8.0.22之前

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

5.查看主從同步狀態(tài)

show replica status ; #8.0.22之后
#表中的數(shù)據(jù)比較大展示出來的效果比較混亂,可以加上\G把每一列數(shù)據(jù)轉(zhuǎn)化為每一行顯示。
show replica status\G; 

show slave status ; #8.0.22之前

效果:只需要以下2個(gè)選項(xiàng)為yes就代表主從復(fù)制正常,IO-Running代表那一組io線程運(yùn)行是否正常,SQL-Running代表那一組sql線程運(yùn)行是否正常。

錯(cuò)誤情況:如果是克隆的虛擬機(jī),mysql的uuid值是一樣的,必須修改從庫(kù)虛擬機(jī)的mysql服務(wù)器uuid的值,和主庫(kù)不能一樣
mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

解決:

#不需要登錄mysql
#修改此文件中的uuid值,隨便修改一個(gè)字符
vim  /var/lib/mysql/auto.cnf

#重啟mysql服務(wù)
systemctl restart mysqld 

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

再次查詢主從同步狀態(tài),此時(shí)都為yes(注意在從庫(kù)執(zhí)行)

#登錄進(jìn)mysql后執(zhí)行,可以開啟多個(gè)會(huì)話窗口這樣就不需要多次登陸了
show replica status\G; 

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

2.3.4 測(cè)試

先查詢此時(shí)的數(shù)據(jù)庫(kù)狀態(tài):

show databases;

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android
mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

1.在主庫(kù) 192.168.10.200 上創(chuàng)建數(shù)據(jù)庫(kù)、表,并插入數(shù)據(jù)

create database db02;

use db02;

create table tb_user(

	id int(11) primary key not null auto_increment,
	name varchar(50) not null,
	sex varchar(1)
	
)engine=innodb default charset=utf8mb4;

insert into tb_user(id,name,sex) values(null,'Tom', '1'),(null,'Trigger','0'),(null,'Dawn','1');

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

2.在從庫(kù) 192.168.10.201 中查詢數(shù)據(jù),驗(yàn)證主從是否同步

show datables;

use db02;

show tables;

select * from tb_user;

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android

注意:

  • 我們剛才所演示的這種主從復(fù)制,它是從二進(jìn)制日志的當(dāng)前位置往后進(jìn)行主從復(fù)制的,如果我們要把之前的數(shù)據(jù)也需要同步到從庫(kù),那么這個(gè)時(shí)候我們可以先把主庫(kù)的數(shù)據(jù)導(dǎo)出到一個(gè)sql腳本當(dāng)中,然后在從庫(kù)當(dāng)中把sql腳本執(zhí)行,先保證主庫(kù)和從庫(kù)的初始數(shù)據(jù)是一致的,然后再?gòu)漠?dāng)前位置往后再進(jìn)行同步。

2.4 總結(jié)

mysql查詢錯(cuò)誤日志,二、數(shù)據(jù)庫(kù)+jdbc,mysql,運(yùn)維,android文章來源地址http://www.zghlxwxcb.cn/news/detail-765816.html

到了這里,關(guān)于MySql運(yùn)維篇---008:日志:錯(cuò)誤日志、二進(jìn)制日志、查詢?nèi)罩?、慢查詢?nèi)罩荆鲝膹?fù)制:概述 虛擬機(jī)更改ip注意事項(xiàng)、原理、搭建步驟的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • mysql三大日志—— 二進(jìn)制日志binlog

    binlog用于記錄數(shù)據(jù)庫(kù)執(zhí)行的寫入性操作,是一種 邏輯日志 ,binlog 處于服務(wù)層 ,通過 追加寫入 的方式以二進(jìn)制的形式保存在磁盤中。 binlog主要用于 主從復(fù)制 和數(shù)據(jù)恢復(fù)。 主從復(fù)制:在主機(jī)端開啟binlog日志管理,主機(jī)將binlog日志發(fā)送到各個(gè)從機(jī),從機(jī)來讀取binlog文件來做到

    2024年02月13日
    瀏覽(21)
  • MySQL 日志之二進(jìn)制日志-binlog

    MySQL 日志之二進(jìn)制日志-binlog

    1、簡(jiǎn)介 ? ? ? ? MySQL 的二進(jìn)制日志記錄了對(duì) MySQL 所有的更改操作,不包括 select 和 show 等操作。二進(jìn)制日志文件主要有:數(shù)據(jù)恢復(fù)、主從復(fù)制、審計(jì)(判斷是否有注入攻擊)等作用。 2、二進(jìn)制日志參數(shù)配置 2.1、文件參數(shù)配置 ? ? ? ? linux 中 MySQL的配置文件在 /etc/my.cnf,通

    2024年01月21日
    瀏覽(26)
  • 開啟MySQL二進(jìn)制日志(binlog)

    前言 binlog即二進(jìn)制日志 Binary Log,它記錄了所有的DDL和DML(除了數(shù)據(jù)查詢語句)語句,以事件形式記錄,還包含語句所執(zhí)行的消耗的時(shí)間,MySQL的二進(jìn)制日志是事務(wù)安全型的。一般來說開啟二進(jìn)制日志大概會(huì)有一定的性能損耗。 二進(jìn)制日志有兩個(gè)最重要的使用場(chǎng)景: Mysql主從復(fù)制

    2023年04月09日
    瀏覽(87)
  • 第81講:清理MySQL Binlog二進(jìn)制日志的方式

    Binlog日志非常重要,但是占用的磁盤空間也很大,我們也需要定期的去清理二進(jìn)制日志,在MySQL數(shù)據(jù)庫(kù)中,提供了自動(dòng)清理Binlog日志的參數(shù),根據(jù)指定的天數(shù),保留n天內(nèi)的Binlog日志,也可以手動(dòng)人為刪除。 在手動(dòng)刪除Binlog日志時(shí),要切記不要使用rm -rf直接刪除Binlog,會(huì)導(dǎo)致主

    2024年02月04日
    瀏覽(25)
  • MySQL主從復(fù)制基于二進(jìn)制日志的高可用架構(gòu)指南

    在現(xiàn)代數(shù)據(jù)庫(kù)架構(gòu)中,MySQL主從復(fù)制技術(shù)扮演著重要角色。它不僅可以提升數(shù)據(jù)庫(kù)性能和可擴(kuò)展性,還賦予系統(tǒng)卓越的高可用性和災(zāi)難恢復(fù)能力。本文將深入剖析MySQL主從復(fù)制的內(nèi)部機(jī)制,同時(shí)通過一個(gè)實(shí)際案例,展示其在實(shí)際場(chǎng)景中的強(qiáng)大作用。 MySQL主從復(fù)制基于二進(jìn)制日志

    2024年02月13日
    瀏覽(47)
  • 圖文結(jié)合帶你搞懂MySQL日志之Binary log(二進(jìn)制日志)

    圖文結(jié)合帶你搞懂MySQL日志之Binary log(二進(jìn)制日志)

    往期回顧 圖文結(jié)合帶你搞定MySQL日志之Undo log(回滾日志) 圖文結(jié)合帶你搞懂InnoDB MVCC 圖文結(jié)合帶你搞懂MySQL日志之Redo Log(重做日志) 圖文結(jié)合帶你搞懂MySQL日志之Error Log(錯(cuò)誤日志) 圖文結(jié)合帶你搞懂MySQL日志之Slow Query Log(慢查詢?nèi)罩荆?圖文結(jié)合帶你搞懂MySQL日志之relay log(中

    2024年02月07日
    瀏覽(91)
  • 第78講:截取MySQL Binlog二進(jìn)制日志中特定部分內(nèi)容的技巧

    我們通過Binlog二進(jìn)制日志恢復(fù)數(shù)據(jù)時(shí),一般都會(huì)先用備份恢復(fù)全庫(kù)的數(shù)據(jù),然后再使用Binlog恢復(fù)備份中不存在的數(shù)據(jù),因此再使用Binlog進(jìn)行數(shù)據(jù)恢復(fù)時(shí),并不是直接恢復(fù)整個(gè)Binlog日志中的數(shù)據(jù),只是恢復(fù)Binlog中的部分?jǐn)?shù)據(jù)。 根據(jù)特定的情況以及需求去恢復(fù)Binlog日志中的數(shù)據(jù)時(shí)

    2024年02月03日
    瀏覽(89)
  • 【MySQL 數(shù)據(jù)寶典】【磁盤結(jié)構(gòu)】- 006 bin log 二進(jìn)制日志的基本模式和參數(shù)設(shè)置

    【MySQL 數(shù)據(jù)寶典】【磁盤結(jié)構(gòu)】- 006 bin log 二進(jìn)制日志的基本模式和參數(shù)設(shè)置

    binlog是一個(gè)二進(jìn)制格式的文件,用于記錄 用戶對(duì)數(shù)據(jù)庫(kù)更新的SQL 語句信息,例如更改數(shù)據(jù)庫(kù)表和更改內(nèi)容的SQL語句都會(huì)記錄到binlog里,但是不會(huì)記錄SELECT和SHOW這類操作。 binlog在MySQL的Server層實(shí)現(xiàn)(引擎共用) binlog為邏輯日志,記錄的是一條SQL語句的原始邏輯 binlog不限制大小,追

    2024年04月24日
    瀏覽(102)
  • MySQL 8.0 OCP (1Z0-908) 考點(diǎn)精析-架構(gòu)考點(diǎn)1:二進(jìn)制日志文件(Binary log)

    【免責(zé)聲明】文章僅供學(xué)習(xí)交流,觀點(diǎn)代表個(gè)人,與任何公司無關(guān)。 編輯|SQL和數(shù)據(jù)庫(kù)技術(shù)(ID:SQLplusDB) MySQL中有多種類型的日志文件,這些日志可用于故障排除、性能調(diào)整和審計(jì)等目的,幫助找出正在發(fā)生的活動(dòng)。 常見的日志文件包括: 日志類型 寫入日志的信息 錯(cuò)誤日志(

    2024年02月16日
    瀏覽(91)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包