隨筆 - 175  文章 - 202  trackbacks - 0
          <2025年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          第一個(gè)Blog,記錄哈哈的生活

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Java links

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          按照如下步驟安裝到 DBD::mysql 時(shí),出錯(cuò),提示找不到 mysql_config

          perl -MCPAN -eshell
          CPAN> install Time::HiRes
          CPAN> install Term::ReadKey
          CPAN> install DBI
          CPAN> install DBD::mysql

          需要到 mysql 網(wǎng)站下載

          MySQL-devel-community-5.1.57-1.rhel5.x86_64.rpm

          安裝,才可以。
          我找了半天。
          posted @ 2011-06-22 13:39 哈哈的日子 閱讀(184) | 評(píng)論 (0)編輯 收藏
          轉(zhuǎn)自:http://dolphin-ygj.iteye.com/blog/366314
          vi替換命令用法詳解
          : ranges /pat1/pat2/g
          其中
          : 這是Vi的命令執(zhí)行界面。
          range 是命令執(zhí)行范圍的指定: 百分號(hào)(%)表示所有行
          點(diǎn)(.)表示當(dāng)前行
          美元($)表示最末行

          例如:
          10,20表示第10到20行,
          .,$表示當(dāng)前行到最后一行,.
          +2,$-5表示當(dāng)前行后兩行直到全文的倒數(shù)第五行

          s 表示其后是一個(gè)替換命令。
          pat1 這是要查找的一個(gè)正則表達(dá)式
          pat2 這是希望把匹配串變成的模式的正則表達(dá)式

          g 可選標(biāo)志,帶這個(gè)標(biāo)志表示替換將針對(duì)行中每個(gè)匹配的串進(jìn)行,否則則只替換行中第一個(gè)匹配串。


          :/string #向下查找
          :?stirng   # 向上查找


          1

          vi編輯命令責(zé)任編輯:黑色聯(lián)想   更新日期:2006-9-7重復(fù)執(zhí)行命令
          數(shù)字N+命令     重復(fù)執(zhí)行命令N次,如刪除15行,就在命令狀態(tài)下輸入15dd
          .              重復(fù)執(zhí)行上一條命令
          vi命令使用的一些選項(xiàng)及含義
          -c sub-command 在對(duì)指定的文件編輯前,先執(zhí)行指定的命令 sub-command .
          -r filename 恢復(fù)指定的文件filename .
          -R 將指定的文件以只讀的方式放入編輯器中,這樣不會(huì)保存對(duì)文件的任何修 改。
          -y number 將編輯窗口的大小設(shè)為number行。
          光標(biāo)移動(dòng)
          命令模式下,在同一行上移動(dòng)的子命令:
          h   將光標(biāo)左移一格
          l   將光標(biāo)右移一格
          j   將光標(biāo)下移一格
          k   將光標(biāo)上移一格
          w   將光標(biāo)移到下一個(gè)小字的前面
          W  將光標(biāo)移到下一個(gè)大字的前面
          b   將光標(biāo)移到前一個(gè)小字的前面
          B   將光標(biāo)移到前一個(gè)大字的前面
          e   將光標(biāo)移到下一個(gè)小字的后面
          E   將光標(biāo)移到前一個(gè)大字的后面
          fc  把光標(biāo)移到同一行的下一個(gè)c字符處
          Fc  把光標(biāo)移到同一行的前一個(gè)c字符處
          tc  把光標(biāo)移到同一行的下一個(gè)字符c的前一格
          Tc  把光標(biāo)移到同一行的前一個(gè)字符c的后一格
          number|把光標(biāo)移到遞number列上
          命令模式下在行間移動(dòng)的子命令:     
          +或Enter   把光標(biāo)移至下一行第一個(gè)非空白字符
          -   把光標(biāo)移至上一行第一個(gè)非空白字符 
          0   把光標(biāo)移到當(dāng)前行的第一個(gè)字符處
          $   把光標(biāo)移到當(dāng)前行的最后一個(gè)字符處
          H   把光標(biāo)移到屏幕最頂端一行
          L   把光標(biāo)移到屏幕最底端一行
          M  把光標(biāo)移到屏幕中間
          :number 光標(biāo)移動(dòng)到第number行
          :$  光標(biāo)移動(dòng)到最后以行
          屏幕翻滾類命令
          Ctrl+u   向文件首翻半屏
          Ctrl+d   向文件尾翻半屏
          Ctrl+f   向文件尾翻一屏
          Ctrl+b  向文件首翻一屏
          nz     將第n行滾至屏幕頂部,不指定n時(shí)將當(dāng)前行滾至屏幕頂部
          插入文本
          I   在光標(biāo)前
          I   在當(dāng)前行首
          a   光標(biāo)后
          A   在當(dāng)前行尾
          o   在當(dāng)前行之下新開一行
          O  在當(dāng)前行之上新開一行
          r   替換當(dāng)前字符
          R   替換當(dāng)前字符及其后的字符,直至按ESC鍵
          s   從當(dāng)前光標(biāo)位置處開始,以輸入的文本替代指定數(shù)目的字符
          S   刪除指定數(shù)目的行,并以所輸入文本代替之
          ncw或nCW  修改n個(gè)單詞
          nCC修改指定數(shù)目的行
          刪除
          x       刪除光標(biāo)所指的一個(gè)字母
          X      刪除光標(biāo)左邊的一個(gè)字母
          dd     刪除光標(biāo)所在的一行文字,同時(shí)本行文字會(huì)放到緩存中
          d0     刪至行首
          d$     刪至行尾
          D      刪除本行光標(biāo)右邊的所有文字,包括光標(biāo)位置的字母
          d$     刪除本行光標(biāo)右邊的所有文字,包括光標(biāo)位置的字母
          dw     刪除光標(biāo)右邊的一個(gè)單詞
          ndw    刪除n個(gè)單詞
          d1G       刪除光標(biāo)所在行以上的所有行
          dG     刪除光標(biāo)所在行及光標(biāo)以下所有行
          復(fù)制
          yy          復(fù)制本行文字到緩存中
          number yy   復(fù)制number行到緩存中
          粘貼
          p      把緩存中的行粘貼到光標(biāo)所在的下一行,
          P      把緩存中的行粘貼到光標(biāo)所在的上一行
          替換
          :s/pattern1/pattern2/g    把光標(biāo)當(dāng)前行的pattern1替換為pattern2
          :%s/pattern1/pattern2/g   把所有行的pattern1替換為pattern2
          :g/parttern1/s//parttern2  把所有行的pattern1替換為pattern2
          :num1,num2 s/pattern1/pattern2/g     把num1到num2的partten1替換為partten2
          被替換的文字用^表示行首,$表示行尾,如:%s/^/111/g就表示在每一行的行首插入111
          文件
          :r filename   把文件filename的內(nèi)容粘貼在光標(biāo)以下行
          :w         保存當(dāng)前編輯的文件名
          :w filename  當(dāng)filename不存在時(shí),把修改后的文件存為文件filename ,當(dāng)文件filename
          存在時(shí),報(bào)錯(cuò)。
          !w filename  如果文件filename存在時(shí),把修改后的文件保存為文件filename
          :q         退出vi ,若文件被修改,系統(tǒng)不會(huì)讓用戶使用q命令退出
          q!         不保存退出
          x          保存退出
          wq         保存退出
          在多個(gè)文件之間切換
          :n開始編輯vi激活的文件列表中的下一個(gè)文件
          :n filenames 指定將被編輯的新的文件列表
          在當(dāng)前文件和另外一個(gè)文件間切換:
          :e filename  使用filename激活vi(在vi中裝入另一個(gè)文件filename)
          e!         重新裝入當(dāng)前文件,若當(dāng)前文件有改動(dòng),則丟棄以前的改動(dòng)
          :e+filename  使用filename激活vi ,并從文件尾部開始編輯
          :e+number filename  使用filename激活vi ,并在第number行開始編輯
          :e#        開始編輯另外一個(gè)文件
          查找
          /pattern     向后尋找指定的pattern ,若遇到文件尾,則從頭再開始。
          ?pattern   向前尋找指定的pattern ,若遇到文件頭,則從尾再開始。
          n          在上次指定的方向上,再次執(zhí)行上次定義的查找。
          N         在上次指定的方向的相反方向上,再次執(zhí)行上次定義的查找。
          /pattern/+number    將光標(biāo)停在包含pattern的行后面第number行上。
          /pattern/-number     將光標(biāo)停在包含pattern的行前面第number行上。
          %                移到匹配的"()"或"{}"上。
          選項(xiàng)設(shè)置
          all         列出所有選項(xiàng)設(shè)置情況
          term        設(shè)置終端類型
          ignorance   在搜索中忽略大小寫
          list         顯示制表位(Ctrl+I)和行尾標(biāo)志($)
          number    顯示行號(hào)
          report       顯示由面向行的命令修改過的數(shù)目
          terse       顯示簡(jiǎn)短的警告信息
          warn        在轉(zhuǎn)到別的文件時(shí)若沒保存當(dāng)前文件則顯示NO write信息
          nomagic     允許在搜索模式中,使用前面不帶“\”的特殊字符
          nowrapscan 禁止vi在搜索到達(dá)文件兩端時(shí),又從另一端開始
          mesg       允許vi顯示其他用戶用write寫到自己終端上的信息
          、在vi中使用的查找替換方法
          利用 :s 命令可以實(shí)現(xiàn)字符串的替換。具體的用法包括:
          :s/str1/str2/ 用字符串 str2 替換行中首次出現(xiàn)的字符串str1
          :s/str1/str2/g 用字符串 str2 替換行中所有出現(xiàn)的字符串str1
          :.,$ s/str1/str2/g 用字符串 str2 替換正文當(dāng)前行到末尾所有出現(xiàn)的字符串str1
          :1,$ s/str1/str2/g 用字符串 str2 替換正文中所有出現(xiàn)的字符串str1
          :g/str1/s//str2/g 功能同上從上述替換命令可以看到:g 放在命令末尾,表示對(duì)搜索字符串的每次出現(xiàn)進(jìn)行替換;不加 g,表示只對(duì)搜索字符串的首次出現(xiàn)進(jìn)行替換;g 放在命令開頭,表示對(duì)正文中所有包含搜索字符串的行進(jìn)行替換操作。

          2、在shell中使用find結(jié)合grep進(jìn)行文件的替換
          # find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
          上面命令可以在當(dāng)前目錄下(包括子目錄)查找包含str1的文件,自動(dòng)替換成str2,并且生成源文件的bak文件。

           
          posted @ 2011-06-17 15:39 哈哈的日子 閱讀(240) | 評(píng)論 (0)編輯 收藏
          準(zhǔn)備寫一個(gè)說不清楚的問題,我表示鴨梨很大。

          背景:
              1. 業(yè)務(wù)分區(qū),多用戶,用戶間無交叉
              2. 水平切分,一張表存到兩個(gè)庫(kù)里去
          Bug:
              用戶1引用了用戶2的數(shù)據(jù)(這不算什么,后面一句才重要),平時(shí)看不出來
          問題:
              第一場(chǎng)
              用戶1來了,建了一大堆東西。
              用戶2來了,關(guān)聯(lián)了用戶1的東西,因?yàn)槎挤謳?kù)到 s1, s2,所以,相安無事。
              第二場(chǎng)
              用戶1來了,又建了一大堆東西。
              用戶2來了,又想關(guān)聯(lián)用戶1的數(shù)據(jù)。但是,卻分庫(kù)到 s2, s1,注意順序不一樣,然后,沒關(guān)聯(lián)到,出錯(cuò)了。

          我另外發(fā)現(xiàn)了一個(gè)問題,我真無聊。
          posted @ 2011-06-07 17:18 哈哈的日子 閱讀(144) | 評(píng)論 (0)編輯 收藏
          目前項(xiàng)目有個(gè)需要,就是在所有查詢的參數(shù)中,增加一個(gè)屬性。
          自然想到使用 interceptor 將每個(gè) parameter wraper 一下,加上這個(gè)屬性
          我就使用 cglib 生成了一個(gè) wrapper class,然后再 proxy 到原來的 parameter 上。

          后來,出了錯(cuò)誤,找了好長(zhǎng)時(shí)間,發(fā)現(xiàn)
          ibatis sql 中寫著 isPrimary,可其實(shí)在 java 里是這樣的

          private boolean isPrimary;
          public boolean isPrimary() {
              return isPrimary;
          }

          其實(shí)屬性名字是 primary 啊,為什么在 wrapper 之前就不出錯(cuò)呢。

          找了一下,ibatis 是通過他自己的 probe 來獲得屬性值的,這個(gè) probe 不僅會(huì)通過方法取值,還會(huì)通過 field name 取值,沒訪問權(quán)限的,還會(huì)加上權(quán)限。

          就是 ClassInfo 的下面方法


            private void addFields(Class clazz) {

              Field[] fields = clazz.getDeclaredFields();

              for (int i = 0; i < fields.length; i++) {

                Field field = fields[i];

                if (canAccessPrivateMethods()) {

                  try {

                    field.setAccessible(true);

                  } catch (Exception e) {

                    // Ignored. This is only a final precaution, nothing we can do.

                  }

                }

                if (field.isAccessible()) {

                  if (!setMethods.containsKey(field.getName())) {

                    addSetField(field);

                  }

                  if (!getMethods.containsKey(field.getName())) {

                    addGetField(field);

                  }

                }

              }

              if (clazz.getSuperclass() != null) {

                addFields(clazz.getSuperclass());

              }

            }


          解決辦法,將 isPrimary 改成 primary

          posted @ 2011-06-01 15:58 哈哈的日子 閱讀(189) | 評(píng)論 (0)編輯 收藏
          也一直使用 quartz,但沒仔細(xì)看過,看了一個(gè)非常詳細(xì)的文章,轉(zhuǎn)發(fā)一下。另外,官方文檔鏈接也附在下面:
          http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html

          轉(zhuǎn)自:http://wangrui.iteye.com/blog/150947

           一個(gè)Cron表達(dá)式是由7個(gè)子表達(dá)式組成的字符串,這些子表達(dá)式用空格分隔,其中最后一個(gè)子表達(dá)式是可選的,其他都是必須的。每個(gè)子表達(dá)式都描述了一個(gè)單獨(dú)的日程細(xì)節(jié)。每一個(gè)子表達(dá)式的含義如下: 

          子表達(dá)式名稱(取值范圍)(允許的特殊字符) 
          1.Seconds秒 (0-59) (, - * /) 
          2.Minutes分鐘 (0-59) (, - * /) 
          3.Hours小時(shí) (0-23) (, - * /) 
          4.Day-of-Month月中的天 (1-31) (, - * ? / L W) 
          5.Month月 (1-12或JAN-DEC) (, - * /) 
          6.Day-of-Week周中的天 (1-7或SUN-SAT) (, - * ? / L #) 
          7.Year(optional)年(可選) (空或1970-2099) (, - * /) 

              一個(gè)cron表達(dá)式的例子字符串為"0 0 12 ? * WED",這表示“每周三的中午12:00”。 
              
              單個(gè)子表達(dá)式可以包含范圍或者列表。例如:前面例子中的周中的天這個(gè)域(這里是"WED")可以被替換為"MON-FRI", "MON, WED, FRI"或者甚至"MON-WED,SAT"。 
              
              所有的域中的值都有特定的合法范圍,這些值的合法范圍相當(dāng)明顯,例如:秒和分域的合法值為0到59,小時(shí)的合法范圍是0到23,Day-of-Month中值得合法凡范圍是0到31,但是需要注意不同的月份中的天數(shù)不同。月份的合法值是0到11?;蛘哂米址甁AN,FEB MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV 及DEC來表示。Days-of-Week可以用1到7來表示(1=星期日)或者用字符串SUN, MON, TUE, WED, THU, FRI 和SAT來表示.  
              
              通配符('*')可以被用來表示域中“每個(gè)”可能的值。因此在"Month"域中的*表示每個(gè)月,而在Day-Of-Week域中的*則表示“周中的每一天”。 
              
              '?'字符可以用在day-of-month及day-of-week域中,它用來表示“沒有指定值”。這對(duì)于需要指定一個(gè)或者兩個(gè)域的值而不需要對(duì)其他域進(jìn)行設(shè)置來說相當(dāng)有用。 

              '/'字符用來表示值的增量,例如, 如果分鐘域中放入'0/15',它表示“每隔15分鐘,從0開始”,如果在份中域中使用'3/20',則表示“小時(shí)中每隔20分鐘,從第3分鐘開始”或者另外相同的形式就是'3,23,43'。 

              'L'字符可以在day-of-month及day-of-week中使用,這個(gè)字符是"last"的簡(jiǎn)寫,但是在兩個(gè)域中的意義不同。例如,在day-of-month域中的"L"表示這個(gè)月的最后一天,即,一月的31日,非閏年的二月的28日。如果它用在day-of-week中,則表示"7"或者"SAT"。但是如果在day-of-week域中,這個(gè)字符跟在別的值后面,則表示"當(dāng)月的最后的周XXX"。例如:"6L" 或者 "FRIL"都表示本月的最后一個(gè)周五。當(dāng)使用'L'選項(xiàng)時(shí),最重要的是不要指定列表或者值范圍,否則會(huì)導(dǎo)致混亂。 

              'W' 字符用來指定距離給定日最接近的周幾(在day-of-week域中指定)。例如:如果你為day-of-month域指定為"15W",則表示“距離月中15號(hào)最近的周幾”。 

              '#'表示表示月中的第幾個(gè)周幾。例如:day-of-week域中的"6#3" 或者 "FRI#3"表示“月中第三個(gè)周五”。 
          posted @ 2011-05-30 10:23 哈哈的日子 閱讀(249) | 評(píng)論 (0)編輯 收藏
          1. 在之前的2.x版本下,我一般編譯程序到機(jī)子的做法是修改xproject去掉iPhone Developer的方法,(參考http://www.cocoachina.com/bbs/read.php?tid-1822-fpage-4.html )
          如果以前這樣修改過xproject文件的,要先恢復(fù)到原始狀態(tài),把iPhone Developer那句話加回去(隨意找個(gè)2.x時(shí)期的官方sample就有)
          2. 制作自己的證書,制作方法參考http://www.weiphone.com/thread-222380-1-1.html ,說明的是,最后的存放位置據(jù)說應(yīng)該是登錄(login)而不是系統(tǒng),反正我現(xiàn)在用的就是登錄.
          3. 打開終端,執(zhí)行如下代碼,這個(gè)是XCode的補(bǔ)丁,因?yàn)樵?.13的xcode修補(bǔ)了3.12的免簽名漏洞,打這個(gè)補(bǔ)丁才行
          #!/bin/bash
          cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
          dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
          printf "\x8f\x2a\x00\x00" >> working
          dd if=iPhoneOS\ Build\ System\ Support of=working bs=1 skip=127504 seek=127504
          /bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
          /bin/mv working iPhoneOS\ Build\ System\ Support
          chmod a+x iPhoneOS\ Build\ System\ Support
           
          或者你懶的去執(zhí)行,也可以下載這個(gè)文件(要解壓下)    patch.sh.zip (1 K) 下載次數(shù):103 放在用戶根目錄,執(zhí)行
          sudo sh ./patch.sh

          4. 在終端執(zhí)行如下命令

          mkdir /Developer/iphoneentitlements30
          cd /Developer/iphoneentitlements30
          curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt 
          mv gen_entitlements.txt gen_entitlements.py
          chmod 777 gen_entitlements.py

          5. XCode中打開你的project,在菜單project->New Build Phase > New Run Script Build Phase,那個(gè)script空白框,拷貝如下代碼進(jìn)去

          export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
          if [ "${PLATFORM_NAME}" == "iphoneos" ]; then
          /Developer/iphoneentitlements30/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
          codesign -f -s "iPhone Developer" --resource-rules "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/ResourceRules.plist" \
          --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent"  "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
          fi
           

          6. 修改"/Developer/Platforms/iPhoneOS.platform/Info.plist"文件,默認(rèn)是用Property List Editor打開,然后添加:
          PROVISIONING_PROFILE_ALLOWED = NO
          PROVISIONING_PROFILE_REQUIRED = NO

          7. 在你的project的info.list里面增加一行,也就是你之前步驟2建的自定義的證書名字啦.
          SignerIdentity=iPhone Developer 

          8. 把你的iphone連接到電腦,提示連接成功,后 xcode菜單,window->Organizer里面,把iphone設(shè)為調(diào)試設(shè)備.
          對(duì)了,我忘記了我做的一個(gè)步驟,不知道是不是必須的,這里補(bǔ)上
          9. iphone要安裝MobileInstallation Patch ,安裝步驟:打開cydia,進(jìn)入manage->sources->edit->Add,在網(wǎng)址輸入框里面輸入www.iphone.org.hk/adp/ 
          完成后,進(jìn)入sources 可以看到www.iphone.org.hk 這個(gè)網(wǎng)站,然后進(jìn)去,可以找到MobileInstallation Patch,點(diǎn)擊安裝即可.
          安裝完成重啟手機(jī).
          posted @ 2011-05-17 00:29 哈哈的日子 閱讀(245) | 評(píng)論 (0)編輯 收藏

          轉(zhuǎn)自:http://blog.csdn.net/cafecheng/archive/2009/07/17/4357248.aspx



          H2, HSQLDB, DERBY, POSTGRESQL, MYSQL

          openSourceDatabaseComparison

          posted @ 2011-05-06 16:58 哈哈的日子 閱讀(1097) | 評(píng)論 (0)編輯 收藏
               摘要: 轉(zhuǎn)自:http://www.001pp.com/chengxuyouhua/mysql%20xingnengyouhua2183.html 網(wǎng)上有不少mysql 性能優(yōu)化方案,不過,mysql的優(yōu)化同sql server相比,更為麻煩與負(fù)責(zé),同樣的設(shè)置,在不同的環(huán)境下 ,由于內(nèi)存,訪問量,讀寫頻率,數(shù)據(jù)差異等等情況,可能會(huì)出現(xiàn)不同的結(jié)果,因此簡(jiǎn)單地根據(jù)某個(gè)給出方案來配置mysql是行不通的,...  閱讀全文
          posted @ 2011-05-04 15:50 哈哈的日子 閱讀(186) | 評(píng)論 (0)編輯 收藏

          轉(zhuǎn)自 http://imysql.cn/node/609

          作/譯者:吳炳錫,來源:http://imysql.cn?。Α?a style="color: #027ac6; text-decoration: none; ">http://imysql.cn/blog/3208 轉(zhuǎn)載請(qǐng)注明作/譯者和出處,并且不能用于商業(yè)用途,違者必究。

           

          介紹:
          InnoDB給MySQL提供了具有提交,回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID兼容)存儲(chǔ)引擎。InnoDB鎖定在行級(jí)并且也在SELECT語句提供一個(gè)Oracle風(fēng)格一致的非鎖定讀。這些特色增加了多用戶部署和性能。沒有在InnoDB中擴(kuò)大鎖定的需要,因?yàn)樵贗nnoDB中行級(jí)鎖定適合非常小的空間。InnoDB也支持FOREIGN KEY強(qiáng)制。在SQL查詢中,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來,甚至在同一個(gè)查詢中也可以混合。
          Innodb 的創(chuàng)始人:Heikki Tuuri
          Heikki Tuuri在Innodb的Bug社區(qū)里也是很活躍的,如果遇到Bug也可以直接提到社區(qū),得到作者的解答。

          為什么要學(xué)習(xí)Innodb的調(diào)優(yōu):
          目前來說:InnoDB是為Mysql處理巨大數(shù)據(jù)量時(shí)的最大性能設(shè)計(jì)。它的CPU效率可能是任何其它基于磁盤的關(guān)系數(shù)據(jù)庫(kù)引擎所不能匹敵的。在數(shù)據(jù)量大的網(wǎng)站或是應(yīng)用中Innodb是倍受青睞的。
          另一方面,在數(shù)據(jù)庫(kù)的復(fù)制操作中Innodb也是能保證master和slave數(shù)據(jù)一致有一定的作用。

          參數(shù)調(diào)優(yōu)內(nèi)容:
            1. 內(nèi)存利用方面
          2. 日值控制方面
          3. 文件IO分配,空間占用方面
          4. 其它相關(guān)參數(shù)

          1.內(nèi)存利用方面:
          首先介紹一個(gè)Innodb最重要的參數(shù):
          innodb_buffer_pool_size
          這個(gè)參數(shù)和MyISAM的key_buffer_size有相似之處,但也是有差別的。這個(gè)參數(shù)主要緩存innodb表的索引,數(shù)據(jù),插入數(shù)據(jù)時(shí)的緩沖。為Innodb加速優(yōu)化首要參數(shù)。
          該參數(shù)分配內(nèi)存的原則:這個(gè)參數(shù)默認(rèn)分配只有8M,可以說是非常小的一個(gè)值。如果是一個(gè)專用DB服務(wù)器,那么他可以占到內(nèi)存的70%-80%。這個(gè)參數(shù)不能動(dòng)態(tài)更改,所以分配需多考慮。分配過大,會(huì)使Swap占用過多,致使Mysql的查詢特慢。如果你的數(shù)據(jù)比較小,那么可分配是你的數(shù)據(jù)大?。保埃プ笥易鰹檫@個(gè)參數(shù)的值。例如:數(shù)據(jù)大小為50M,那么給這個(gè)值分配innodb_buffer_pool_size=64M
          設(shè)置方法:
          innodb_buffer_pool_size=4G
          這個(gè)參數(shù)分配值的使用情況可以根據(jù)show innodb status\G;中的
          ----------------------
          BUFFER POOL AND MEMORY
          ----------------------
          Total memory allocated 4668764894;
           
          去確認(rèn)使用情況。


          第二個(gè):
          innodb_additional_mem_pool:
          作用:用來存放Innodb的內(nèi)部目錄
          這個(gè)值不用分配太大,系統(tǒng)可以自動(dòng)調(diào)。不用設(shè)置太高。通常比較大數(shù)據(jù)設(shè)置16M夠用了,如果表比較多,可以適當(dāng)?shù)脑龃?。如果這個(gè)值自動(dòng)增加,會(huì)在error log有中顯示的。
          分配原則:
          show innodb status\G;去查看運(yùn)行中的DB是什么狀態(tài)(參考BUFFER POOL AND MEMORY段中),然后可以調(diào)整到適當(dāng)?shù)闹怠?br /> ----------------------
          BUFFER POOL AND MEMORY
          ----------------------
          Total memory allocated 4668764894; in additional pool allocated 16777216
          參考:in additional pool allocated 16777216
          根據(jù)你的參數(shù)情況,可以適當(dāng)?shù)恼{(diào)整。
          設(shè)置方法:
          innodb_additional_mem_pool=16M


          2.關(guān)于日值方面:
          innodb_log_file_size
          作用:指定日值的大小
          分配原則:幾個(gè)日值成員大小加起來差不多和你的innodb_buffer_pool_size相等。上限為每個(gè)日值上限大小為4G.一般控制在幾個(gè)LOG文件相加大小在2G以內(nèi)為佳。具體情況還需要看你的事務(wù)大小,數(shù)據(jù)大小為依據(jù)。
          說明:這個(gè)值分配的大小和數(shù)據(jù)庫(kù)的寫入速度,事務(wù)大小,異常重啟后的恢復(fù)有很大的關(guān)系。
          設(shè)置方法:
          innodb_log_file_size=256M


          innodb_log_files_in_group
          作用:指定你有幾個(gè)日值組。
          分配原則: 一般我們可以用2-3個(gè)日值組。默認(rèn)為兩個(gè)。
          設(shè)置方法:
          innodb_log_files_in_group=3


          innodb_log_buffer_size:
          作用:事務(wù)在內(nèi)存中的緩沖。
          分配原則:控制在2-8M.這個(gè)值不用太多的。他里面的內(nèi)存一般一秒鐘寫到磁盤一次。具體寫入方式和你的事務(wù)提交方式有關(guān)。在Oracle等數(shù)據(jù)庫(kù)了解這個(gè),一般最大指定為3M比較合適。
          參考:Innodb_os_log_written(show global status 可以拿到)
          如果這個(gè)值增長(zhǎng)過快,可以適當(dāng)?shù)脑黾觟nnodb_log_buffer_size
          另外如果你需要處理大理的TEXT,或是BLOB字段,可以考慮增加這個(gè)參數(shù)的值。
          設(shè)置方法:
          innodb_log_buffer_size=3M

          innodb_flush_logs_at_trx_commit
          作用:控制事務(wù)的提交方式
          分配原則:這個(gè)參數(shù)只有3個(gè)值,0,1,2請(qǐng)確認(rèn)一下自已能接受的級(jí)別。默認(rèn)為1,主庫(kù)請(qǐng)不要更改了。
          性能更高的可以設(shè)置為0或是2,但會(huì)丟失一秒鐘的事務(wù)。
          說明:
          這個(gè)參數(shù)的設(shè)置對(duì)Innodb的性能有很大的影響,所以在這里給多說明一下。
          當(dāng)這個(gè)值為1時(shí):innodb 的事務(wù)LOG在每次提交后寫入日值文件,并對(duì)日值做刷新到磁盤。這個(gè)可以做到不丟任何一個(gè)事務(wù)。
          當(dāng)這個(gè)值為2時(shí):在每個(gè)提交,日志緩沖被寫到文件,但不對(duì)日志文件做到磁盤操作的刷新,在對(duì)日志文件的刷新在值為2的情況也每秒發(fā)生一次。但需要注意的是,由于進(jìn)程調(diào)用方面的問題,并不能保證每秒100%的發(fā)生。從而在性能上是最快的。但操作系統(tǒng)崩潰或掉電才會(huì)刪除最后一秒的事務(wù)。
          當(dāng)這個(gè)值為0時(shí):日志緩沖每秒一次地被寫到日志文件,并且對(duì)日志文件做到磁盤操作的刷新,但是在一個(gè)事務(wù)提交不做任何操作。mysqld進(jìn)程的崩潰會(huì)刪除崩潰前最后一秒的事務(wù)。

          從以上分析,當(dāng)這個(gè)值不為1時(shí),可以取得較好的性能,但遇到異常會(huì)有損失,所以需要根據(jù)自已的情況去衡量。


          設(shè)置方法:
          innodb_flush_logs_at_trx_commit=1

          3. 文件IO分配,空間占用方面
          innodb_file_per_table
          作用:使每個(gè)Innodb的表,有自已獨(dú)立的表空間。如刪除文件后可以回收那部分空間。
          分配原則:只有使用不使用。但DB還需要有一個(gè)公共的表空間。
          設(shè)置方法:
          innodb_file_per_table=1

          innodb_file_io_threads
          作用:文件讀寫IO數(shù),這個(gè)參數(shù)只在Windows上起作用。在LINUX上只會(huì)等于4
          設(shè)置方法:
          innodb_file_io_threads=4

          innodb_open_files
          作用:限制Innodb能打開的表的數(shù)據(jù)。
          分配原則:如果庫(kù)里的表特別多的情況,請(qǐng)?jiān)黾舆@個(gè)。這個(gè)值默認(rèn)是300。
          設(shè)置方法:
          innodb_open_files=800 
          請(qǐng)適當(dāng)?shù)脑黾觮able_cache


          4. 其它相關(guān)參數(shù)
          這里說明一個(gè)比較重要的參數(shù):
          innodb_flush_method
          作用:Innodb和系統(tǒng)打交道的一個(gè)IO模型
          分配原則:Windows不用設(shè)置。
          Unix可以設(shè)置:fsync() or O_SYNC/O_DSYNC
          如果系統(tǒng)可以禁止系統(tǒng)的Cache那就把他禁了。
          Linux可以選擇:O_DIRECT 
          直接寫入磁盤,禁止系統(tǒng)Cache了
          設(shè)置方法:
          innodb_flush_method=O_DIRECT

          innodb_max_dirty_pages_pct 
          作用:控制Innodb的臟頁在緩沖中在那個(gè)百分比之下,值在范圍1-100,默認(rèn)為90.
          這個(gè)參數(shù)的另一個(gè)用處:當(dāng)Innodb的內(nèi)存分配過大,致使Swap占用嚴(yán)重時(shí),可以適當(dāng)?shù)臏p小調(diào)整這個(gè)值,使達(dá)到Swap空間釋放出來。建義:這個(gè)值最大在90%,最小在15%。太大,緩存中每次更新需要致?lián)Q數(shù)據(jù)頁太多,太小,放的數(shù)據(jù)頁太小,更新操作太慢。
          設(shè)置方法:
          innodb_max_dirty_pages_pct=90
          動(dòng)態(tài)更改需要有Super權(quán)限:
          set global innodb_max_dirty_pages_pct=50;

          總結(jié):
          這里只算是列出了Innodb部分的重要參數(shù),不能認(rèn)為是對(duì)Mysql的整體調(diào)優(yōu)。Mysql的參數(shù)一般分為:全局參數(shù),具體引擎的參數(shù)。全局參數(shù)方面請(qǐng)參考http://imysql.cn/2007_12_08_optimize_mysql_under_linux yejr的那個(gè)Mysql調(diào)優(yōu)的PPT。

          posted @ 2011-05-04 15:37 哈哈的日子 閱讀(214) | 評(píng)論 (0)編輯 收藏
          手動(dòng)創(chuàng)建目錄 .ssh 的時(shí)候,權(quán)限可能不對(duì),默認(rèn)應(yīng)該是 775,這樣不行,需要改成 755 或者 700 之類的,才可以。
          authorized_keys 文件權(quán)限也要改成 600

          順便把步驟寫一下:

          1. ssh-keygen 生成 key pair,默認(rèn)是 rsa 的
          2. 把 public key 放到服務(wù)器上,然后執(zhí)行 cat xxx >> ~/.ssh/authorized_keys,xxx 是 public key 文件名

          posted @ 2011-05-04 10:04 哈哈的日子 閱讀(201) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題
          共17頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 荆门市| 榆社县| 安达市| 通州区| 吉木乃县| 曲阳县| 永宁县| 万源市| 定兴县| 红安县| 黎平县| 通化市| 林州市| 双鸭山市| 海南省| 靖远县| 叶城县| 五常市| 阿瓦提县| 阳高县| 营山县| 久治县| 青龙| 芷江| 宕昌县| 石泉县| 镇康县| 高州市| 稻城县| 嘉善县| 大名县| 社会| 锡林郭勒盟| 广德县| 巴东县| 余庆县| 伊宁县| 琼中| 全椒县| 大英县| 东阳市|