這二天,微盟運維人員刪庫的事件刷屏了,造成的影響特別的大。
回顧整個事件,本人從15年的運維人員的角度來分析一下這個事件:
1、 為什麼一個運維人員會有這麼大破壞力,讓整個公司業務都癱瘓了?
很多人都會說權限沒控制好,不應該給單獨一個人這麼大的操作權限,同時一個人不應該有這麼多業務和數據庫的登陸和操作權限,沒有操作分級和審核機制等等。
說實話,一般的公司,很難請幾個不同角色的運維人員,財力與物力是不可能實現的(除了那幾個大廠外),很多公司都是二三個運維人員,交叉管理不同業務授權,做不到職責明確分類。而且大部分職業上的習慣,會擁有最大的root權限(就算很多大互聯網公司出來的運維也有這樣的習慣)。
但是,絕大多數的中小型公司來說,是不會遇到本次這種極端狀況的,真的遇到這樣的事,真的是看命好不好,看運維人員的心情狀態了,自求多福吧。
2、 為什麼恢復時間會這麼久,而且至今無法完全恢復?
極有可能是直接做了rm -rf或者fdisk這樣的基本不可逆轉文件刪除操作,而且很可能是主備一起幹掉了,同時可能平時沒有做好備份機制,或者可能是把備份也一起刪除了(很多公司備份基本上也是在運維人員手裡的)。
3、那麼,真的碰到這樣的事了,有沒有好的辦法解決呢?
1)、使用雲產品,而且要使用大廠的雲產品,這裡不是說你用雲服務器就可以了,你需要用他們的雲數據庫產品,而且要買一系列的保護盾。
2)、權限控制,如果真的沒法做到最小授權,建議上個主機安全管控軟件,或者堡壘機,多次分層級的進行審核,角色分級操作,就是下級需要操作的時候,一定要通過主管領導的審核(特別是類似rm -rf 、fdisk、drop等等這樣的高危命令的時候)。主管領導要把臨時開放操作權限掌握在自己手裡,不要怕麻煩,用一次開一次,再關一次。
3)、備份,一定要建立好備份機制:全量備份,增量備份,延遲備份,全量備份要多機房,異地備份,因為數據是核心資產,應用全刪了還可以重新部署,數據沒了,公司就沒了,就是這麼狠。就算是用了雲數據庫,備份文件也下載一份下來,自己在不同機房,不同雲,不同地方多存幾份,千萬不要怕花錢。同時備份文件要多份分多人不同地方保管。
4)、人的問題,這個就仁者見仁,智者見智了,再完美的技術,也防不住人的,這個我認為與一個公司的文化氛圍與制度、領導的魅力等是息息相關的。
但凡一個人,都有自己的道德底線,在沒有到一定程度的時候,都會剋制自己(精神病除外)。公司平時對下面的員工好一點,俗話說,好聚好散,就算你對員工不滿意,要裁員也好,要開除也好,儘量的讓對方少一些怨氣,多一份尊重。另外,儘量做些普法宣傳,每人都有點敬畏心理,可能效果會好一些。
說了這麼多的費話。 最後分享一個懶人的安裝mysql的操作代碼(直接複製改成可執行的.sh 文件執行就可以):
#!/bin/bash
echo "開始時間:`date +%Y-%m-%d\\ %T`" >> /home/mysqlsetup/logtime
echo "安裝依懶包!"
sleep 3
echo "創建用戶與組"
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
echo "開始編譯安裝mysql"
cd /home
cp /media/software/mysql-5.5.32.tar.gz ./
tar zxvf mysql-5.5.32.tar.gz
mkdir mysql
mkdir /data/mysql
mkdir /data/mysql/data/
mkdir /data/mysql/log
mkdir /data/mysql/tmp
mkdir /data/mysql/log/binlog
mkdir /data/mysql/log/relaylog
cd /home/mysql-5.5.32
cmake \\
-DSYSCONFDIR=/etc \\
-DCMAKE_INSTALL_PREFIX=/home/mysql/ \\
-DMYSQL_DATADIR=/data/mysql/data/ \\
-DMYSQL_UNIX_ADDR=/data/mysql/log/mysql13306.sock \\
-DEXTRA_CHARSETS=all \\
-DDEFAULT_CHARSET=utf8 \\
-DDEFAULT_COLLATION=utf8_general_ci \\
-DWITH_MYISAM_STORAGE_ENGINE=1 \\
-DWITH_INNOBASE_STORAGE_ENGINE=1 \\
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \\
-DWITH_MEMORY_STORAGE_ENGINE=1 \\
-DWITH_READLINE=1 \\
-DENABLED_LOCAL_INFILE=1 \\
-DMYSQL_USER=mysql \\
-DMYSQL_TCP_PORT=13306
make
make install
echo "編譯完成!"
sleep 5
echo "修改權限!"
chown -R mysql.mysql /home/mysql
chown -R mysql.mysql /data/mysql
cd /home/mysql
cp support-files/mysql.server /etc/init.d/mysql #放在啟動項裡
chmod 755 /etc/init.d/mysql
sleep 3
echo "初始化mysql"
scripts/mysql_install_db --datadir=/data/mysql/data/ --user=mysql #初始化
rm -rf /etc/my.cnf
cp /home/mysqlsetup/my.cnf /etc/my.cnf #複製標準mysql配置文件,這個需要提前寫好哦
echo "啟動mysql"
/etc/init.d/mysql start
echo "修改mysql環境變量"
cat /home/mysqlsetup/file.txt >>/etc/profile
source /etc/profile
sleep 5
echo "開始設置密碼!"
mysqladmin -u root password xxxxxxxxxxxx #記得安裝使用完後要修改與收回最高權限
echo "開始設置iptables"
sed -i '11i\\-A INPUT -m state --state NEW -m tcp -p tcp --dport 13306 -j ACCEPT' /etc/sysconfig/iptables
service iptables restart
sleep 3
echo "添加到啟動項!"
chkconfig --level 235 mysql on
echo "刪除舊文件!"
rm -rf /home/mysql-5*
echo "mysql安裝完成,並啟動,請檢查是否可用!"
echo "結束時間:`date +%Y-%m-%d\\ %T`" >> /home/mysqlsetup/logtime
########下次有機會寫一個自動備份&&主從配置自動化腳本。
閱讀更多 問我35 的文章