Mysql篇

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;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容