新聞中心
求助,mysql 自動重啟,服務宕掉問題咨詢
1.檢查是否有備份,如果備份存在,binlog存在,那么萬事大吉,一切都有挽回的余地,慢慢來搞,只要你基礎扎實,數(shù)據(jù)還原只是時間的問題。
專注于為中小企業(yè)提供成都網(wǎng)站設計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)武川免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
2.對于沒有備份的,那處理這個問題就有些棘手了,還得一步一步的來。
在my.cnf中[mysqld]下加上以下配置,采用強制恢復機制,看是否能夠啟動
[mysqld]
innodb_force_recovery=1
如果設置成1不能啟動,可以逐漸的將數(shù)據(jù)增大到6,下文會詳細說下1-6是什么意思,如果在1-6之間啟動成功了,那么你運氣還不錯,這時候不要恢復業(yè)務,趕緊把數(shù)據(jù)用邏輯方式導出來,再啟個新的實例把數(shù)據(jù)還原,有人會問,為什么mysql已經(jīng)啟動了,還要導出數(shù)據(jù)呢,原因在這:
當innodb_force_recovery被設置為大于0的時候 ,會阻止用戶insert,update,delete也就是你啟動的mysql不是一個正常的mysql服務,類似于windows系統(tǒng)下的安全模式。以下這段引于其它地方,具體地址不太清楚了,也可以從官方文檔中找到。
mysql刪除日志后一直重啟報錯couldnotopenlogfile
lsof|grepdeleted查看一下是否存在刪除了,但是沒有釋放空間的文件。查看其所屬的服務的進程號,殺掉進程,重啟服務。
1、絕對不能從操作系統(tǒng)上直接刪除binlog日志,如rm binlog。
2、在MySQL中,使用PURGE BINARY LOGS命令刪除binlog日志,才是最安全的辦法。命令如下,
PURGE BINARY LOGS BEFORE '2017-01-20 00:00:00';
PURGEBINARYLOGSBEFORE'2017-01-20 00:00:00';
解決k8s MysqlCluster 無故重啟問題
使用 bitpoke的mysql-operator 作為k8s的mysql服務,使用的版本v0.4.0,
github地址:
MysqlCluster operator主要支持如下功能
建立的mysql服務每隔一段時間就重啟,事件的報錯信息如下
為什么心跳不通過?
貌似心跳機制不通過,查看pod信息
心跳默認20秒不通過,就重啟,看源碼也沒有心跳配置項,坑啊,不過這只是表象,到底是什么導致心跳不通過?
mysqlCluster啟動時,會啟動4個容器metrices-exporter, mysql, pt-heartbeat, sidecar。看這4個容器的cpu, 內(nèi)存使用情況,發(fā)現(xiàn)mysql內(nèi)存超過,如下:
看最后狀態(tài),OOMKilled,而且當前內(nèi)存使用率3.9G 接近limit 4G的設置。 找到產(chǎn)生的問題原因了,是因為內(nèi)存超了,被容器殺掉,導致心跳不通過報錯重啟
為什么內(nèi)存使用這么高?
思考mysql使用內(nèi)存高,可能跟mysql自身緩存有關系,查內(nèi)存相關參數(shù)
看到 innodb_buffer_pool_size 設置得值特別大,這個參數(shù)設置只有主要緩存innodb表的索引,數(shù)據(jù),插入數(shù)據(jù)時的緩沖,但默認是8M。
為什么 innodb_buffer_pool_size 設置變得這么大?
翻翻mysqlCluster源碼,跟innodb_buffer_pool_size 有關代碼
default.go
問題就在這里,為了保證資源獨占,mysql設置時是request = limit,因為自動計算導致 innodb-buffer-pool-size過大,最終導致oom,需要手動設置innodb-buffer-pool-size,就手動設置2G吧
設置 innodb-buffer-pool-size 不生效?
設置后,pod不重啟? 參數(shù)沒有生效設置。設另一個512M就生效了。嘗試加入引號,作為字符串處理,配置開始生效。難道跟類型有關系? 繼續(xù)看相關源碼
default.go
看這個類型定義cluster.Spec.MysqlConf
MysqlClusterSpec
intstr
如果設置成數(shù)字,則整數(shù)是int32位
看int32位的長度
int32 the set of all signed 32-bit integers (-2147483648 to 2147483647)
至此內(nèi)存使用過大的問題,解決了,內(nèi)存使用也降下來了
網(wǎng)站標題:mysql自動重啟怎么辦 mysql數(shù)據(jù)庫自動重啟
網(wǎng)站URL:http://www.ef60e0e.cn/article/hidceg.html