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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql把data移走后报错_【mysql案例】Failedtoopenlog--datadir物理迁移报错

發(fā)布時(shí)間:2024/10/8 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql把data移走后报错_【mysql案例】Failedtoopenlog--datadir物理迁移报错 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.1.1.mysql5.6.14的datadir遷移時(shí)遇到報(bào)錯(cuò) 【環(huán)境描述】 在機(jī)器A上安裝了perconamysql 5.6.14,數(shù)據(jù)庫停啟正常,datadir路徑為pathA,并且已經(jīng)做了應(yīng)用數(shù)據(jù)庫的初始化工作,然后關(guān)閉了這個(gè)數(shù)據(jù)庫實(shí)例,把它的datadir和/etc/my.cnf遷移到另外一臺(tái)機(jī)器B上的pe

1.1.1. mysql5.6.14的datadir遷移時(shí)遇到報(bào)錯(cuò)

【環(huán)境描述】

在機(jī)器A上安裝了perconamysql 5.6.14,數(shù)據(jù)庫停啟正常,datadir路徑為pathA,并且已經(jīng)做了應(yīng)用數(shù)據(jù)庫的初始化工作,然后關(guān)閉了這個(gè)數(shù)據(jù)庫實(shí)例,把它的datadir和/etc/my.cnf遷移到另外一臺(tái)機(jī)器B上的percona mysql 5.6.14,遷移后的datadir路徑修改成路徑pathB,在啟動(dòng)mysql服務(wù)的時(shí)候遇到問題,啟動(dòng)失敗。

操作步驟:

1) 停掉機(jī)器A上的mysql

service mysql stop

2) 對(duì)機(jī)器A上mysql的datadir(路徑pathA)和my.cnf做打包,傳輸?shù)綑C(jī)器B,并把datadir解壓到pathB

3) 在機(jī)器B上安裝percona mysql 5.6.14

4) 使用機(jī)器A傳輸過來的my.cnf覆蓋機(jī)器B的/etc/my.cnf

5) 修改機(jī)器B的/etc/my.cnf中datadir路徑為pathB

6) 在機(jī)器B上執(zhí)行service mysql start啟動(dòng)mysql服務(wù)

7) 啟動(dòng)失敗,發(fā)生報(bào)錯(cuò)

【mysql報(bào)錯(cuò)】

啟動(dòng)時(shí)的報(bào)錯(cuò)servicemysql start:

Starting MySQL(Percona Server)......Theserver quit without[FAILED]ng PID file(/home/mysql_3306_bak/mysql.pid).

錯(cuò)誤日志中的報(bào)錯(cuò):

/usr/sbin/mysqld: File '/home/mysql_3306/mysql-bin.000003'not found (Errcode: 2 - No such file or directory)

2014-04-25 22:26:47 27048 [ERROR] Failed toopen log (file '/home/mysql_3306/mysql-bin.000003', errno 2)

2014-04-25 22:26:47 27048 [ERROR] Could notopen log file

2014-04-25 22:26:47 27048 [ERROR] Can'tinit tc log

2014-04-25 22:26:47 27048 [ERROR] Aborting

2014-04-25 22:26:47 27048 [Note] Binlog end

2014-04-25 22:26:47 27048 [Note] Shuttingdown plugin 'partition'

已經(jīng)修改了my.cnf配置文件中所有的路徑,但是Mysql仍然說找不到'/home/mysql_3306/mysql-bin.000003'路徑的文件,從報(bào)錯(cuò)看上去很詭異。

【問題原因】

Mysql報(bào)錯(cuò)提示找不到binlog,是由于my.cnf中配置了:

log-bin= /home/mysql_3306/mysql-bin

log-bin-index= /home/mysql_3306/bin-index

mysql會(huì)在log-bin-index參數(shù)指定的文件中維護(hù)log-bin的索引列表,并且它是以絕對(duì)路徑的方式記錄的:

/home/mysql_3306?mysql-bin.000001

/home/mysql_3306?mysql-bin.000002

/home/mysql_3306?mysql-bin.000003

雖然已經(jīng)把/etc/my.cnf中的所有路徑都修改正確了,但是mysql服務(wù)在啟動(dòng)時(shí),是通過讀取log-bin-index來查找log-bin日志文件的,查找的文件還是在機(jī)器A上指定的位置,所以mysql服務(wù)啟動(dòng)失敗。

【解決方法】

手動(dòng)修改log-bin-index指定的二進(jìn)制日志索引文件,修改里面所有l(wèi)og-bin的路徑,指定到當(dāng)前datadir下的二進(jìn)制日志,然后嘗試啟動(dòng)mysql服務(wù),啟動(dòng)成功,問題解決。

【問題思考】

Whatis log-bin-index paramter ?

Mysql官方手冊(cè)中說明“如果沒有在my.cnf中配置log-bin-index參數(shù)指定,mysql會(huì)自動(dòng)創(chuàng)建一個(gè)以host_name-bin.index命名的二進(jìn)制索引文件(實(shí)驗(yàn)證明是mysql-bin.index)”。

所以,嘗試去掉my.cnf中配置的log-bin-index參數(shù),然后啟動(dòng)mysql服務(wù),此時(shí)mysql服務(wù)正常啟動(dòng),查看log-bin-index文件:

#cat mysql-bin.index

/home/mysql_3306_bak/mysql-bin.000006

我們發(fā)現(xiàn)mysql自動(dòng)創(chuàng)建了名為“mysql-bin.index”的二進(jìn)制索引文件,并且文件中只包含在啟動(dòng)時(shí)重新生成的二進(jìn)制文件路徑信息。

此時(shí),mysql只知道此次啟動(dòng)時(shí)生成的二進(jìn)制文件路徑信息,那么也就意味著此時(shí)mysql丟失了編號(hào)000006之前的所有日志文件,我們進(jìn)行如下的測試:

執(zhí)行flush logs命令,讓mysql再刷出來幾個(gè)二進(jìn)制日志;

#cat mysql-bin.index

/home/mysql_3306_bak/mysql-bin.000006

/home/mysql_3306_bak/mysql-bin.000007

/home/mysql_3306_bak/mysql-bin.000008

然后,執(zhí)行purgebinary logs to 'mysql-bin.000004' 命令:

>purge binary logs to 'mysql-bin.000004';

ERROR1373 (HY000): Target log not found in binlog index

此時(shí),mysql提示無法找到000004號(hào)二進(jìn)制日志文件,接下來嘗試刪除000006號(hào)二進(jìn)制日志文件:

> purge binary logs to'mysql-bin.000007';

QueryOK, 0 rows affected (0.03 sec)

查看mysql-bin.index二進(jìn)制日志索引文件:

#cat mysql-bin.index

/home/mysql_3306_bak/mysql-bin.000007

/home/mysql_3306_bak/mysql-bin.000008

查看二進(jìn)制日志文件:

#ls -ltr mysql-bin.00000*

mysql-bin.000004

mysql-bin.000001

mysql-bin.000002

mysql-bin.000003

mysql-bin.000005

mysql-bin.000007

mysql-bin.000008

mysql已經(jīng)徹底刪除了編號(hào)000006的二進(jìn)制日志文件。

接下來,我們嘗試欺騙mysql,配置一個(gè)指向虛機(jī)路徑的二進(jìn)制日志文件:

#cat mysql-bin.index

/tmp/mysql-bin.0000005

/home/mysql_3306_bak/mysql-bin.000007

/home/mysql_3306_bak/mysql-bin.000008

在mysql中嘗試刪除編號(hào)000007之前的日志:

>purge binary logs to 'mysql-bin.000007';

ERROR 29 (HY000): File '/tmp/mysql-bin.0000005' not found (Errcode:2 - No such file or directory)

mysql在讀取log-bin-index日志索引文件刪除日志的時(shí)候發(fā)現(xiàn)日志文件不存在,報(bào)錯(cuò);

我們?cè)趪L試重啟mysql,來判斷它是如何讀取和加載log-bin-index日志索引文件 以及索引文件中指定的二進(jìn)制日志文件的:

# service mysql stop

Shutting down MySQL (PerconaServer)... [ OK ]

# service mysql start

Starting MySQL (PerconaServer).... [ OK ]

查看error.log日志:

2014-04-2600:53:28 7f752cddc700 InnoDB: Buffer pool(s) load completed at 140426 0:53:28

^G/usr/sbin/mysqld:File '/tmp/mysql-bin.0000005' not found (Errcode: 2 - No such file or directory)

2014-04-2600:53:28 16723 [ERROR] Failed to open log (file '/tmp/mysql-bin.0000005', errno2)

2014-04-2600:53:28 16723 [ERROR] Could not open log file

【總結(jié)】

雖然mysql的error日志中有error信息,但是mysql仍然成功啟動(dòng)了,也就是說mysql在啟動(dòng)過程會(huì)讀取log-bin-index文件,然后也會(huì)判斷索引指定的log-bin文件是否存在,結(jié)合本案例中遇到的情況,可以知道只有當(dāng)最后一個(gè)路徑指定的log-bin不存在時(shí),mysql服務(wù)才會(huì)中斷啟動(dòng)操作,即啟動(dòng)失敗。

【Sum Up】

1) 如果mysql沒有開啟binlog,則不會(huì)遇到這個(gè)問題;

2) 如果mysql開啟了binlog,并且在Datadir物理遷移的過程中,修改了datadir的路徑,就會(huì)遇到這個(gè)問題,此時(shí),可以編輯log-bin-index文件修復(fù)log-bin文件的路徑或者直接刪除,然后啟動(dòng)mysql服務(wù);

3) 為了避免遇到這個(gè)問題,在進(jìn)行datadir遷移的時(shí)候,盡量不要改變datadir的路徑;

本條技術(shù)文章來源于互聯(lián)網(wǎng),如果無意侵犯您的權(quán)益請(qǐng)點(diǎn)擊此處反饋版權(quán)投訴

本文系統(tǒng)來源:php中文網(wǎng)

總結(jié)

以上是生活随笔為你收集整理的mysql把data移走后报错_【mysql案例】Failedtoopenlog--datadir物理迁移报错的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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