最近的幾個技術問題總結和答疑
筆記寫了不少,有時候有的朋友問我幾個關鍵字,我就會從腦海裡進行搜尋,凡是寫過的,搜尋一下總能找到,幫助了別人,提高了自己,何樂而不為。
但是筆記寫了很多,如果不加以改進,那麼進步還是很小的,尤其比較怕的就是如果寫出了問題的解決方案,但是這個解決方案是非主流的方式,可能有一些潛在風險的,如果誤導了讀者,那就是罪過了。所以有時候想集中糾正一下。而且有時候看看以前寫的文章,有時候會發現有一些分析思路可能在經歷了大批次的故障處理之後,思路可能會更開闊,這些其實也可以改進改進。
寫筆記能堅持到現在不容易,讓我的筆記更有意義,幫助到別人,別誤導人,這是我的初衷。
首先我準備先來做一些筆記的改進。
運維平臺的建設思考-後設資料管理(四)http://blog.itpub.net/23718752/viewspace-1992768/
這篇有些朋友說很實用,不過這些定製指令碼的優點還在於可以改進完善,所以在這之後繼續改進,發現了幾個小問題。一併列出來。
對於磁碟空間的使用情況的分析
原來的指令碼內容為:
df -hT|egrep -v 'Filesystem|/dev/shm'|while read line; do echo -e "`echo $line|awk '{print $7}'`:`echo $line|awk '{print $5}'`:`echo $line|awk '{print $6}'`"; done > /tmp/tmpdisk
cat /tmp/tmpdisk|while read line
do
if [ `echo $line|awk -F':' '{print $3}'|sed 's/%//g'` -lt 85 ] ; then
tmpline=`echo $line|sed 's/\///g'`
sed -i "/$tmpline/d" /tmp/tmpdisk
fi
done
if [ -s /tmp/tmpdisk ] ; then
DISK_STAT=`cat /tmp/tmpdisk|sed -e ":a;N;s/\n/,/;ta"`
else
DISK_STAT='OK'
fi
rm -f /tmp/tmpdisk
但是在大批次的檢測中,發現還是有一些問題。對於一些分割槽,如果名字長一些,會序列,所以可以使用df -hTP來顯示到一行中
在顯示結果中,如果某個分割槽名過長,還有特殊字元,會有一些處理上的不足,比如下面這個是原先指令碼過濾後的結果。
/opt:109G:86%,/home/oracle/backup_stage/192.168.1.24_extradb:1.1T:71%
按照預期,應該只顯示/opt:109G 即可。所以這個部分做了改進。
改進之後的指令碼內容為:
function check_df
{
df -hTP|egrep -v 'Filesystem|/dev/shm'|while read line; do echo -e "`echo $line|awk '{print $7}'`:`echo $line|awk '{print $5}'`:`echo $line|awk '{print $6}'`"; done > /tmp/tmpdisk
cat /tmp/tmpdisk|while read line
do
if [ `echo $line|awk -F':' '{print $3}'|sed 's/%//g'` -gt 85 ] ; then
tmp_var=$line
tmpline=$line
echo $tmpline
fi
done |sed -e ":a;N;s/\n/,/;ta"
}
DISK_STAT=`check_df`
在原來的基礎上,增加了資料庫版本的統計,這個思路不能按照ORACLE_HOME的來算,我的一個切入點就是以sqlplus -v的結果為準,檢查配置的變數的方式還是有些不妥當。
得到oracle版本的思路是檢查/etc/oratab中,得到ORACLE_HOME的值,然後呼叫sqlplus -v來得到最終的版本。
export ORACLE_HOME=`cat /etc/oratab | tail -1 | awk -F: '{print $2}'`
ORA_VER=`$ORACLE_HOME/bin/sqlplus -v|awk '{print $3}'`
然後再說說另外一篇筆記。
MySQL遷移檔案的小問題 http://blog.itpub.net/23718752/
對於文章中的從庫檔案遷移,當時是使用reset slave的方式解決的,但是也有一些朋友做了更多的建議,啟榮兄給了我一個解決的方向,對於這類的檔案遷移,其實大可不必使用reset slave,這種方式還是有些太"暴力“,影響比較大。完全可以很優雅的完成。改改配置,重啟一下即可。
停庫之後修改my.cnf,修改裡面相關的路徑設定。
# /etc/init.d/mysql stop
Shutting down MySQL (Percona Server)... SUCCESS!
vi /etc/my.cnf
然後遷移檔案,作業系統命令級即可搞定。
# mv mysql_test/* mysql_3306
啟動資料庫,當然這個時候肯定會報錯。
# /etc/init.d/mysql start
Starting MySQL (Percona Server)..... ERROR! The server quit without updating PID file (/U01/app/mysql_3306/mysql.pid).
主要原因是這個時候校驗的是binlog的index檔案,裡面的路徑對應不上,所以在日誌裡會提示找不到。修改一下即可。
# vi bin-index.index
/U01/app/mysql_3306/mysql-bin.000001
/U01/app/mysql_3306/mysql-bin.000002
/U01/app/mysql_3306/mysql-bin.000003
/U01/app/mysql_3306/mysql-bin.000004
/U01/app/mysql_3306/mysql-bin.000005
/U01/app/mysql_3306/mysql-bin.000006
/U01/app/mysql_3306/mysql-bin.000007
/U01/app/mysql_3306/mysql-bin.000008
/U01/app/mysql_3306/mysql-bin.000009
修改之後再次啟動就沒有問題了。
# /etc/init.d/mysql start
Starting MySQL (Percona Server)... SUCCESS!
這個時候啟動slave還是會報錯的
> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
而原因就在於relay-index.index和relay-log裡面的檔案路徑對應不上。
錯誤日誌大體是下面的樣子:
2016-02-24 14:59:18 3962 [Note] Server socket created on IP: '::'.
2016-02-24 14:59:18 3962 [ERROR] /usr/sbin/mysqld: File '/U01/app/mysql_test/mysql-relay.000006' not found (Errcode: 2 - No such file or directory)
2016-02-24 14:59:18 3962 [ERROR] Failed to open log (file '/U01/app/mysql_test/mysql-relay.000006', errno 2)
2016-02-24 14:59:18 3962 [ERROR] Could not open log file
2016-02-24 14:59:18 3962 [ERROR] /usr/sbin/mysqld: File '/U01/app/mysql_test/mysql-relay.000005' not found (Errcode: 2 - No such file or directory)
2016-02-24 14:59:18 3962 [ERROR] Failed to open log (file '/U01/app/mysql_test/mysql-relay.000005', errno 2)
2016-02-24 14:59:18 3962 [ERROR] Could not open log file
2016-02-24 14:59:18 3962 [ERROR] /usr/sbin/mysqld: File '/U01/app/mysql_test/mysql-relay.000006' not found (Errcode: 2 - No such file or directory)
2016-02-24 14:59:18 3962 [ERROR] Failed to open log (file '/U01/app/mysql_test/mysql-relay.000006', errno 2)
2016-02-24 14:59:18 3962 [ERROR] Failed to open the relay log '/U01/app/mysql_test/mysql-relay.000006' (relay_log_pos 2599866).
當然可以手工修改,但是實際上是沒有起作用的
# vi relay-index.index
/U01/app/mysql_test/mysql-relay.000005
/U01/app/mysql_test/mysql-relay.000006
/U01/app/mysql_3306/mysql-relay.000007
> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
mob_vesta_jingmao [(none)] [15:00:47]>
需要重啟才可以。所以由此可以得出,需要同時修改binlog和relay的設定,一次啟動就可以搞定了。
修改完成之後,一次重啟即可搞定。
# /etc/init.d/mysql start
Starting MySQL (Percona Server)... SUCCESS!
> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
但是筆記寫了很多,如果不加以改進,那麼進步還是很小的,尤其比較怕的就是如果寫出了問題的解決方案,但是這個解決方案是非主流的方式,可能有一些潛在風險的,如果誤導了讀者,那就是罪過了。所以有時候想集中糾正一下。而且有時候看看以前寫的文章,有時候會發現有一些分析思路可能在經歷了大批次的故障處理之後,思路可能會更開闊,這些其實也可以改進改進。
寫筆記能堅持到現在不容易,讓我的筆記更有意義,幫助到別人,別誤導人,這是我的初衷。
首先我準備先來做一些筆記的改進。
運維平臺的建設思考-後設資料管理(四)http://blog.itpub.net/23718752/viewspace-1992768/
這篇有些朋友說很實用,不過這些定製指令碼的優點還在於可以改進完善,所以在這之後繼續改進,發現了幾個小問題。一併列出來。
對於磁碟空間的使用情況的分析
原來的指令碼內容為:
df -hT|egrep -v 'Filesystem|/dev/shm'|while read line; do echo -e "`echo $line|awk '{print $7}'`:`echo $line|awk '{print $5}'`:`echo $line|awk '{print $6}'`"; done > /tmp/tmpdisk
cat /tmp/tmpdisk|while read line
do
if [ `echo $line|awk -F':' '{print $3}'|sed 's/%//g'` -lt 85 ] ; then
tmpline=`echo $line|sed 's/\///g'`
sed -i "/$tmpline/d" /tmp/tmpdisk
fi
done
if [ -s /tmp/tmpdisk ] ; then
DISK_STAT=`cat /tmp/tmpdisk|sed -e ":a;N;s/\n/,/;ta"`
else
DISK_STAT='OK'
fi
rm -f /tmp/tmpdisk
但是在大批次的檢測中,發現還是有一些問題。對於一些分割槽,如果名字長一些,會序列,所以可以使用df -hTP來顯示到一行中
在顯示結果中,如果某個分割槽名過長,還有特殊字元,會有一些處理上的不足,比如下面這個是原先指令碼過濾後的結果。
/opt:109G:86%,/home/oracle/backup_stage/192.168.1.24_extradb:1.1T:71%
按照預期,應該只顯示/opt:109G 即可。所以這個部分做了改進。
改進之後的指令碼內容為:
function check_df
{
df -hTP|egrep -v 'Filesystem|/dev/shm'|while read line; do echo -e "`echo $line|awk '{print $7}'`:`echo $line|awk '{print $5}'`:`echo $line|awk '{print $6}'`"; done > /tmp/tmpdisk
cat /tmp/tmpdisk|while read line
do
if [ `echo $line|awk -F':' '{print $3}'|sed 's/%//g'` -gt 85 ] ; then
tmp_var=$line
tmpline=$line
echo $tmpline
fi
done |sed -e ":a;N;s/\n/,/;ta"
}
DISK_STAT=`check_df`
在原來的基礎上,增加了資料庫版本的統計,這個思路不能按照ORACLE_HOME的來算,我的一個切入點就是以sqlplus -v的結果為準,檢查配置的變數的方式還是有些不妥當。
得到oracle版本的思路是檢查/etc/oratab中,得到ORACLE_HOME的值,然後呼叫sqlplus -v來得到最終的版本。
export ORACLE_HOME=`cat /etc/oratab | tail -1 | awk -F: '{print $2}'`
ORA_VER=`$ORACLE_HOME/bin/sqlplus -v|awk '{print $3}'`
然後再說說另外一篇筆記。
MySQL遷移檔案的小問題 http://blog.itpub.net/23718752/
對於文章中的從庫檔案遷移,當時是使用reset slave的方式解決的,但是也有一些朋友做了更多的建議,啟榮兄給了我一個解決的方向,對於這類的檔案遷移,其實大可不必使用reset slave,這種方式還是有些太"暴力“,影響比較大。完全可以很優雅的完成。改改配置,重啟一下即可。
停庫之後修改my.cnf,修改裡面相關的路徑設定。
# /etc/init.d/mysql stop
Shutting down MySQL (Percona Server)... SUCCESS!
vi /etc/my.cnf
然後遷移檔案,作業系統命令級即可搞定。
# mv mysql_test/* mysql_3306
啟動資料庫,當然這個時候肯定會報錯。
# /etc/init.d/mysql start
Starting MySQL (Percona Server)..... ERROR! The server quit without updating PID file (/U01/app/mysql_3306/mysql.pid).
主要原因是這個時候校驗的是binlog的index檔案,裡面的路徑對應不上,所以在日誌裡會提示找不到。修改一下即可。
# vi bin-index.index
/U01/app/mysql_3306/mysql-bin.000001
/U01/app/mysql_3306/mysql-bin.000002
/U01/app/mysql_3306/mysql-bin.000003
/U01/app/mysql_3306/mysql-bin.000004
/U01/app/mysql_3306/mysql-bin.000005
/U01/app/mysql_3306/mysql-bin.000006
/U01/app/mysql_3306/mysql-bin.000007
/U01/app/mysql_3306/mysql-bin.000008
/U01/app/mysql_3306/mysql-bin.000009
修改之後再次啟動就沒有問題了。
# /etc/init.d/mysql start
Starting MySQL (Percona Server)... SUCCESS!
這個時候啟動slave還是會報錯的
> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
而原因就在於relay-index.index和relay-log裡面的檔案路徑對應不上。
錯誤日誌大體是下面的樣子:
2016-02-24 14:59:18 3962 [Note] Server socket created on IP: '::'.
2016-02-24 14:59:18 3962 [ERROR] /usr/sbin/mysqld: File '/U01/app/mysql_test/mysql-relay.000006' not found (Errcode: 2 - No such file or directory)
2016-02-24 14:59:18 3962 [ERROR] Failed to open log (file '/U01/app/mysql_test/mysql-relay.000006', errno 2)
2016-02-24 14:59:18 3962 [ERROR] Could not open log file
2016-02-24 14:59:18 3962 [ERROR] /usr/sbin/mysqld: File '/U01/app/mysql_test/mysql-relay.000005' not found (Errcode: 2 - No such file or directory)
2016-02-24 14:59:18 3962 [ERROR] Failed to open log (file '/U01/app/mysql_test/mysql-relay.000005', errno 2)
2016-02-24 14:59:18 3962 [ERROR] Could not open log file
2016-02-24 14:59:18 3962 [ERROR] /usr/sbin/mysqld: File '/U01/app/mysql_test/mysql-relay.000006' not found (Errcode: 2 - No such file or directory)
2016-02-24 14:59:18 3962 [ERROR] Failed to open log (file '/U01/app/mysql_test/mysql-relay.000006', errno 2)
2016-02-24 14:59:18 3962 [ERROR] Failed to open the relay log '/U01/app/mysql_test/mysql-relay.000006' (relay_log_pos 2599866).
當然可以手工修改,但是實際上是沒有起作用的
# vi relay-index.index
/U01/app/mysql_test/mysql-relay.000005
/U01/app/mysql_test/mysql-relay.000006
/U01/app/mysql_3306/mysql-relay.000007
> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
mob_vesta_jingmao [(none)] [15:00:47]>
需要重啟才可以。所以由此可以得出,需要同時修改binlog和relay的設定,一次啟動就可以搞定了。
修改完成之後,一次重啟即可搞定。
# /etc/init.d/mysql start
Starting MySQL (Percona Server)... SUCCESS!
> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1994327/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 最近的幾個技術問題總結和答疑(九)
- 最近的幾個技術問題總結和答疑 (11)
- 最近的幾個技術問題總結和答疑(七)
- 最近的幾個技術問題總結和答疑(八)
- 最近的幾個技術問題總結和答疑(二)
- 最近的幾個技術問題總結和答疑(三)
- 最近的幾個技術問題總結和答疑(四)
- 最近的幾個技術問題總結和答疑(六)
- 最近的幾個技術問題總結和答疑(五)
- 最近技術總結
- 最近遇到的幾個LINUX問題Linux
- 最近幾個月總結(17年12月)
- 總結一下最近遇到的問題
- 最近解決的幾個DIV+CSS的問題CSS
- 資料遷移中的幾個問題總結
- 配置tnsnames.ora遇到的幾個問題總結
- 外包這幾年的技術和管理經驗總結
- Python基礎技術問題總結Python
- C# 基礎技術問題總結C#
- 技術人溝通中的幾個常見問題
- 關於虛擬化技術的幾個問題薦
- 一個非技術問題的問題
- 12個iOS技術面試題及答案總結iOS面試題
- 最近思考的一個問題
- 最近處理的幾個小問題_20160311
- 兩個流程鏈路問題的排查和總結
- 最近積累的幾個關於 PHP 類與 MySQL 的小問題PHPMySql
- 最近幾天玩freebsd奮鬥成果總結
- 最近幾天做oracle stream遇到很多問題Oracle
- 原始碼防洩密幾種技術原理總結原始碼
- 和開發同學討論的一個技術問題
- 最近使用 gin 的總結
- 最近使用redis的總結Redis
- RAID技術介紹和總結AI
- 專案總結(幾大未解決問題)
- 關於最近3天連續加班解決登陸問題的總結
- 我們總結了每個技術團隊都會遇到的 4 個難題
- 彙總下最近看到的三個前端題目前端