1.數(shù)據(jù)刪除
背景:服務(wù)器是虛擬機,硬盤只有50G,數(shù)據(jù)庫中error表,60萬的報警數(shù)據(jù),已經(jīng)達到50G,導(dǎo)致磁盤已滿。也未打算進行數(shù)據(jù)歸檔,需要刪除表中部分無用的數(shù)據(jù)。遇到的問題和解決辦法.
- 死鎖現(xiàn)象
通過mysql show processlist檢查mysql死鎖的方法
SUPER權(quán)限,則可以看到全部的線程;否則只能看到自己發(fā)起的線程
注:MySQL帳戶運行的線程、Kill掉死鎖的進程 - 刪除數(shù)據(jù)太慢
在考慮刪除部分?jǐn)?shù)據(jù)時,開始考慮直接用delete from tablename where (符合的條件),那么如何來刪除呢?
當(dāng)時首先采取編寫php腳本的方法,通過瀏覽器執(zhí)行,結(jié)果出現(xiàn)超時終止程序。因為php默認(rèn)腳本執(zhí)行超時是30秒,php.ini中的max_execution_time變量指定,服務(wù)器會在30秒強行終止正在執(zhí)行的程序。 - 為了解決超時問題,可以通過修改php.ini的腳本執(zhí)行時間限制的方法,也可以通過用php的函數(shù)取消腳本時間限制,當(dāng)然還有其他的方法.我采取了用
Set_time_limit(0)來解決超時的問題。
注:set_time_limit用來設(shè)置腳本的超時時間,此函數(shù)規(guī)定從該句運行是起程序必須在指定的秒數(shù)內(nèi)運行結(jié)束,超時則程序出錯退出
秒數(shù)為0時,表示該腳本沒有時間限制 - 其實我們完全用命令行去運行php腳本就可以解決php執(zhí)行超時的問題。再后來直接通過mysql后臺執(zhí)行sql語句就行,沒有必要寫php腳本。
但是問題又出現(xiàn)了,sql語句執(zhí)行相當(dāng)緩慢,刪除1萬條數(shù)據(jù)(數(shù)據(jù)里面包含大量的詳細報警信息,所以數(shù)據(jù)很大)需要1個小時。
當(dāng)然不是索引的問題,不過最終還是找到了解決辦法,在where指定id段范圍,sql執(zhí)行起來就會相當(dāng)?shù)目臁?br> 2. Mysql服務(wù)啟動
背景:服務(wù)器本身自帶mysql數(shù)據(jù)庫,sa人員安裝了新的mysql數(shù)據(jù)庫,啟動的數(shù)據(jù)庫時,該如何啟動指定的mysql。
當(dāng)時啟動mysql服務(wù),只知道要通過etc/init.d/mysql start,通過和dba溝通,才知道不管啟動的那個mysql,其實都是指向一個庫的。所以如果跟mysql版本沒有多大關(guān)系的時候啟動那個都沒有關(guān)系,他們共用一個my.cnf配置文件。
/mysqld_safe --defaults-file=/etc/my.cnf --user=root &
??除了去對應(yīng)的目錄下去啟動mysql服務(wù),我們還可以怎么啟動指定的mysql服務(wù)?
將mysql/share/mysql.server拷貝到etc/init.d目錄下即可。原來我們啟動的服務(wù)其實就是mysql/share/mysql.server,只不過默認(rèn)在etc/init.d下存在一個mysql.server的別名mysql。
3. Mysql運行
Mysql -u root -p時,出現(xiàn)如下錯誤:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Mysql.sock是mysql主機和客戶機在同一host(物理服務(wù)器)上的時候,使用unix domain socket作為通訊協(xié)議的載體,它比tcp快.通常遇到上述問題是由于mysql服務(wù)沒有運行起來
4. Mysql導(dǎo)數(shù)據(jù)
由于sql文件大于4G,在linux用unzip命令解壓zip壓縮包是不成功的,需要用7zip軟件,命令格式:7z e filename
大數(shù)據(jù)導(dǎo)入:mysql>source 相關(guān)路徑/filename.sql文件即可
無法登陸系統(tǒng),登錄系統(tǒng)時,返回信息報錯信息如下:
Mysqld connot connect to MySql 4.1+using the old insecure authentication
解決方法:
mysql> set old_passwords=0;
mysql> update user set password=password("123") where user='root'; mysql> flush privileges;
mysql> exit;