2014年12月20日 星期六

[Mono Develop] 使用建立MariaDB當作asp.net Code First的資料庫(Vistual Studio Community 2013可適用)


我是用在Ubuntu下使用MonoDevelop (先前在winodw下裝mono run .net還是有點問題,查了之後在bug report上顯示尚待解決),所以你需要安裝MariaDB和Apache2和Mono和MonoDevelop,看看站內有沒有相關文件不然就Google一下。


進入主題:(Vistual Studio 2013步驟是差不多的)

1.首先在MonoDevelop下載 EntityFramework 和MySql Data Entity




















2.確認Package之中是否出現元件的參考




















[MariaDB]變更MariaDB的預設儲存引擎InnerDB到TokudB Part 2


為什縻要將預設引擎innerDB改為tokuDB請參考兩者之間的比較(光新增資料效率就差了100倍/秒)

http://www.tokutek.com/tokudb-for-mysql/tokudb-vs-innodb/



查詢mysql版本:mysql --version

10.x.x-MaridB代表新安裝的



5.x.x - MariaDB 代表之前有裝過mysql







執行:dpkg-query -l libevent-*











確定有 libevent-1.4版,沒有的話執行(Ubuntu14預設是裝2.0版,要加裝1.4版不然執行TokuDB時會有錯誤)

先切換身份到root : sudo su ,接著執行

apt-get install libevent-1.4


下載tokuDB(下面網址選mariadb那一個)

http://www.tokutek.com/tokudb-for-mysql/download-community/












將檔案儲存在暫存的資料庫,我安裝在/temp中,沒有的話,執行:mkdir /temp

接著參考此篇安裝步驟:http://docs.tokutek.com/tokudb/tokudb-index-installation.html

1.建立mysql 群組指定為927(如果/etc/group己經有此群組請跳過)

groupadd -g 927 mysql

2.建立mysql 帳號並加入至927的mysql群組中(如果/etc/passwd中己經有此帳號請跳過)

useradd -r -u 927 -g mysql mysql

3.接著建立tokuDB要使用的資料夾

mkdir -pv /opt/tokutek

4.進到該資料夾中將剛剛下載的tokuDB的壓縮檔解壓縮

cd /opt/tokutek

tar xvzf /temp/[你下載的tokuDB壓縮檔名稱]

例.tar xvzf /temp/mariadb-5.5.40-tokudb-7.5.3-linux-x86_64.tar.gz

5.將解開後很長的檔案資料名稱連結到mysql這個名稱

ln -sv [你下載的tokuDB壓縮檔名稱] mysql

例.ln -sv mariadb-5.5.40-tokudb-7.5.3-linux-x86_64 mysql

6.將解壓縮後的資料夾變更擁有者和群組權限

chown -Rv mysql:mysql [你下載的tokuDB壓縮檔名稱]

例.chown -Rv mysql:mysql   mariadb-5.5.40-tokudb-7.5.3-linux-x86_64














7.將support-files資料夾中tokuDB提供的設定檔my-small.cnf蓋掉mysql中的my.cnf檔案(原文中的/etc/my.cnf是錯的,應該是/etc/mysql/my.cnf),記得先備份原有檔案my.cnf為my.cnf.bak

cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak

cp -v support-files/my-small.cnf /etc/mysql/my.cnf

8.接著在/etc/mysql/my.cnf中[mysqld]區段後增加以下內容

datadir = /var/lib/mysql
basedir = /opt/tokutek/mysql
user = mysql
log_error = /var/log/mysql/error.log

以及將原有的socket參數改回原本mysql的路徑

/var/run/mysqld/mysqld.sock
























9.重新初始化原有的系統資料表(目前路徑還在/opt/tokutek/mysql喲)

scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql --basedir=/opt/tokutek/mysql

10.將原本/etc/init.d/mysql改成連結到tokuDB的mysql.server(一樣記得將原有的mysql備份起來)

mv /etc/init.d/mysql /etc/init.d/mysql.bak

ln -sv /opt/tokutek/mysql/support-files/mysql.server /etc/init.d/mysql

11.接著還要將hugepage關掉,不然/var/log/mysql/error.log中還會看到這個錯誤

請參考:[第三章]使用TokuDB前先將Huge pages 參數關掉

















12.最後啟動mysql 並確認TokuDB是否正常

/etc/init.d/mysql restart

mysql -u [mysql的管理員帳號] -p

例. mysql -u root -p

接著輸入 show plugins會看到tokuDB都是運作中

show plugins;

















再來show engines,會看到預設是tokuDB

show engines;









大功告成


==============測試=================

試著建立一個新表看看引擎是否預設為TokuDB

create database testdb ;

create table users
(
    id int not null,
    email char(50) not null,
    name char(20) not null
);


接著看users的資料表引擎

show table status from [DatabaseName] where name='[TableName]'

例. show table status from testdb where name='users'




OK !沒問題顯示為TokudB Engine



試著修改表格的engine

alter table [TableName] engine ='[Engine Name]'

例. alter table testdb.user engine ='Aria';











要將預設引擎變更可以執行

set default_storage_engine=[EngineName]






















[MariaDB]使用TokuDB前先將Huge pages 參數關掉 Part 3


訊息:TokuDB: Huge pages are enabled, disable them before continuing
















可以參考這一篇

How to enable TokuDB in MariaDB


懶得看可以參考以下:




終端機下輸入

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

接著建立一個tokudb.cnf文字檔

======================文字檔內容===================
# See https://mariadb.com/kb/en/how-to-enable-tokudb-in-mariadb/
# for instructions how to enable TokuDB
#
# See https://mariadb.com/kb/en/tokudb-differences/ for differences
# between TokuDB in MariaDB and TokuDB from http://www.tokutek.com/

plugin-load=ha_tokudb

==================================================

接著放在/etc/mysql/conf.d/tokudb.cnf (Ubuntu & Debian)











接著輸入

cat /sys/kernel/mm/transparent_hugepage/enabled

你可以看到原本的[always]被括住了,修改後變[never]被括住了








登入MariaDB後手動啟動tokuDB

INSTALL SONAME 'ha_tokudb';

再執行

show engines;

就可以看到tokuDB在引擎清單



2014.11.1
Q.系統重新啟動後,原本的HugePage又回復成always,要再查一下如何把參數設在啟動中

「修改個人登入設定」

直接將
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
寫在個人設定檔之中

vi ~/.bashrc 最底下

輸入 source ~/.bashrc 重新讀取bash(不用再登出登入)

再看一下是否正常括在[never]的地方
cat /sys/kernel/mm/transparent_hugepage/enabled

「修改系統設定」

在/etc/profile.d/dishugepage.sh,建立一個sh檔

新增底下內容:
=============================
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
                echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
               echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
=============================
系統重啟後檢查是否正常
cat /sys/kernel/mm/transparent_hugepage/enabled



方法二:修改/etc/rc.local

http://www.chriscalender.com/disabling-transparent-hugepages-for-tokudb/



2014年12月18日 星期四

[MariaDB]Ubuntu上安裝MariaDB與設定 Part 1


終端機下直接下

sudo apt-get update

sudo apt-get install mariadb-server


不記得apt-get 指令的請看這裡



修改設定my.cnf

sudo vim /etc/mysql/my.cnf


將bind-address 註解掉(前面加上#),這樣才可以遠端連線到這台資料庫(如果你的web和db在同 一台那就不用改了)

執行 mysql --version  就可以看到目前版本

如果之前有安裝過mysql ,版本會是5.x 如果是新安裝的則是10.x





2014年12月16日 星期二

[Code First,Entity Framework6,MySql,MariaDB] max key length is 767 bytes


資料庫底層改用MariaDB,之後出現max key length is 767 bytes的錯誤













參考此篇:

http://stackoverflow.com/questions/24981593/specified-key-was-too-long-max-key-length-is-767-bytes-mysql-error-in-entity-fr


另外出現此錯誤













參考此篇:

http://forums.mysql.com/read.php?38,622151,622151


用裡面中的方法2,將下面這句改放在Globa.asax中 Application_Start()

DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());

即可正常顯示






2014年12月8日 星期一

聰明的動態型別 dynamic

程式碼:

           
dynamic d = 1; //初始型別是數字
        
Console.WriteLine("d type :{0},d status:{1}", d.GetType(),d);
           
d += "test";  //故意加上文字(正常這裡vs2013編輯器就會顯示錯誤了)

Console.WriteLine("d type :{0},d status:{1}", d.GetType(), d);

Console.ReadKey();



結果:可以看到d初始型別是int32,加上文字後自動將型別轉成字串型別,沒有顯示任何錯誤













動態型別可以略過編輯時期檢查,還會自動改變型別真是太讚了!


更多內容可以參考此篇:

了解 C# 4 的動態關鍵字

2014年12月7日 星期日

[LinQ] Groupby 與 ToLookup 差異


成績類別:


    public class Grade {
        public string Name { get; set; }
        public int Value { get; set; }
        public string Group { get; set; }
    }                                                                                   


主程式:


            List<Grade> val= new List<Grade> { 
                new Grade{Name="alvin",Value=85,Group ="A"},
                new Grade{Name="lily",Value=75,Group="B"},
                new Grade{Name="john",Value=65,Group="C"},
                new Grade{Name="helen",Value=77,Group="B"},
                new Grade{Name="mary",Value=78,Group="B"},
                new Grade{Name="jack",Value=89,Group="A"},
            };


            var gok = val.GroupBy(c => c.Group);    //GroupBy還沒有將資料取回
            var lok = val.ToLookup(c => c.Group);    //此段已將資料取回

            val.RemoveAll(c => true );   //將原始資料清空

            Console.WriteLine("==========GroupBy start==========");
            foreach (var g in gok) {       
                Console.WriteLine("=====group:{0}=====", g.Key);
                foreach (var p in g) {
                    Console.WriteLine("name:{0},value:{1},group:{2}",p.Name  ,p.Value  ,p.Group  );
                }
            }
          
            
            Console.WriteLine("==========ToLookup start==========");
            foreach (var g in lok) {
                Console.WriteLine("=====group-{0}=====", g.Key);
                foreach (var p in g) {
                    Console.WriteLine("name:{0},value:{1},group:{2}",p.Name  ,p.Value ,p.Group   );
                }
            }    
            Console.ReadKey();


結果:Groupby沒有資料出現,因為Groupby時沒有立即將資料取回,所以後面Removeall後,再執行就沒資料可用















完整程式碼:

https://www.dropbox.com/s/72p8ayukwaauyun/20141205.txt?dl=0

結果:差別在立即將資料取回(ToLookup)和延遲取回資料(Groupby)

2014年12月6日 星期六

[委派] Console測試匿名委派


委派函式:

delegate void TestDelegate(string str);


程式碼:
       
static void Main(string[] args) {
     TestDelegate t1 = (string s1) => { Console.WriteLine("print from s1:" + s1); };
     TestDelegate t2 = (string s2) => { Console.WriteLine("print from s2:" + s2); };

     t1 += t1 + t2 + t1;
     t1("Hello");
     t1.Invoke("Hello world");
     Console.ReadKey();
}


結果:










更多內容可以參考:

Lambda 運算式 (C# 程式設計手冊)


2014年12月5日 星期五

[第一章] 用Mono Develop直接開發C#程式(安裝流程)


按crtl+alt+t 啓動終端機

執行:

1.
sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

2.
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list

3.
apt-get install MonoDevelop

4.
安裝完成後再usr/share/applications中找到MonoDevelop


可以看到我的界面預設是簡體字














5.
在編輯>preferences將語言設為tw















6.
終端機中執行apt-get install monodevelop-database 安裝資料庫外掛工具到Mono Develop


在Mono Develop選單中的工具就出現database連接工具囉




更多內容請參考:

Install MonoDevelop on Linux


Mono Develop各作業系統版本下載:

http://www.monodevelop.com/download


2014年12月4日 星期四

[Code First] custom Initializer


建立一個類別繼承  DbContext










在web.config中指定你的連線字串[各版本的連線字串寫法]






1.自訂你的 Initializer 並選擇什麼情況下重建你的資料庫

CreateDatabaseIfNotExists (資料庫不存在時重建)


DropCreateDatabaseWhenModelChanges (改變你的模型時重建)


DropCreateDatabaseAlways (每次都重新建立)


2.覆寫Seed方法,建立資料庫的初始資料














在web.config中加入<context>記錄,指定你的context和 Initializer









更多內容可以參考此篇:

Understanding Database Initializers in Entity Framework Code First




2014年12月1日 星期一

Vistual Studio 2013開發工具與路徑


2013開發人員命令列工具:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\

執行Developer Command Prompt for VS2013.exe(英文版)













IIS Express 站台設定檔位置:

C:\Users\USER\Documents\IISExpress\config








IIS Express 命令列位置:

C:\Program Files\IIS Express

appcmd.exe list site 列出站台

appcmd.exe  site /? 站台可執行命令

iisexpress.exe /site:1 啓動IIS Express 站台1

更多內容可以參考:

http://www.iis.net/learn/extensions/using-iis-express/running-iis-express-from-the-command-line


開啓IIS Express站台供外部連結:(失敗)

用筆記本開啓 C:\Users\USER\Documents\IISExpress\config\applicationhost.config

將localhost 已為*










最後再新增保留區

netsh http add urlacl url=http://*:(埠號)/ user=everyone


20141130:在window8上測試失敗,使用IP方式出現503錯誤,localhost則正常







熱門文章