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';
例. 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 就可以看到目前版本
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());
即可正常顯示
標籤:
Entity Framework,
MariaDB
2014年12月8日 星期一
聰明的動態型別 dynamic
程式碼:
結果:可以看到d初始型別是int32,加上文字後自動將型別轉成字串型別,沒有顯示任何錯誤
動態型別可以略過編輯時期檢查,還會自動改變型別真是太讚了!
更多內容可以參考此篇:
了解 C# 4 的動態關鍵字
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
標籤:
Mono Develop,
Ubuntu
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則正常
2014年11月24日 星期一
Coding First Data Annotations (Model屬性的相關標註說明)
假設有一個Model的類別
[Key]:索引鍵
[Key,Column(Oerder=n)]複合索引鍵:
[MaxLength(n),ErrorMessage=”your message“,MinLength(n)]:最大和最小值和自訂錯誤訊息
[NotMapped]:不須建立資料庫的欄位
[Table][Column]:自訂資料庫表格和欄位名稱
[Index]:欄位建立搜尋索引EF6.1以後版本才有此功能,預設的索引名稱是IX_
需要參考以下兩個組件:
public class User { public int Id { get; set; } public string PersonalId { get; set; } public string Name { get; set; } }
[Key]:索引鍵
[Key] public int Id { get; set; }
[Key,Column(Oerder=n)]複合索引鍵:
[Key] [Column(Order=1)] public string PersonalId { get; set; } [Key] [Column(Order=2)] public string Name {get;set;}
[Required]:必要欄位不可為空
[Required] public int Id { get; set; }
[MaxLength(n),ErrorMessage=”your message“,MinLength(n)]:最大和最小值和自訂錯誤訊息
[MaxLength(2),ErrorMessage=”姓名欄位請輸入2~5個字“,MinLength(5)] public string Name { get; set; }
[NotMapped]:不須建立資料庫的欄位
[NotMapped] string sex = PersonalId.Substring(1, 1)=="1"?"男":"女";
[Table][Column]:自訂資料庫表格和欄位名稱
[Table("MyUser")] public class UserModel{ [Column("Myid",TypeName="ntext")] string PersonalId{get;set;} }
[Index]:欄位建立搜尋索引EF6.1以後版本才有此功能,預設的索引名稱是IX_
[Index("MyIndexName")] public string Name {get;set;} }
需要參考以下兩個組件:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
2014年11月23日 星期日
各版本的Sql connection 字串寫法
LocalDB:
SQL Azure:
Entity Framework Database:
Sql Compact:
<add name="ConnectionStringName" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFileName=|DataDirectory|\DatabaseFileName.mdf;InitialCatalog=DatabaseName;Integrated Security=True;MultipleActiveResultSets=True" />Sql Express:
<add name="ConnectionStringName" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=DatabaseName;Integrated Security=True;MultipleActiveResultSets=True"/>Sql Server:
<add name="ConnectionStringName" providerName="System.Data.SqlClient" connectionString="Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=False;User Id=userid;Password=password;MultipleActiveResultSets=True" />
SQL Azure:
<add name="ConnectionStringName" providerName="System.Data.SqlClient" connectionString="Data Source=tcp:ServerName.database.windows.net,1433;Initial Catalog=DatabaseName;Integrated Security=False;User Id=username@servername;Password=password;Encrypt=True;TrustServerCertificate=False;MultipleActiveResultSets=True" />
Entity Framework Database:
<add name="ConnectionStringName" providerName="System.Data.EntityClient" connectionString="metadata=res://*/ ContextClass.csdl|res://*/ ContextClass.ssdl|res://*/ ContextClass.msl;provider=System.Data.SqlClient;provider connection string="Data Source=ServerName;Integrated Security=False;User Id=userid;Password=password;MultipleActiveResultSets=True"" />
Sql Compact:
<add name="ConnectionStringName" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|\DatabaseFileName.sdf" />
2014年11月20日 星期四
Adjacent selectors的用法,li中的範例
<style type="text/css">
li{
color: maroon;
}
li+li{
color: silver;
}
li+li+li{
color: blue;
}
</style>
<body>
<ol>
<li>第1個重點</li>
<li>第2個不太重要</li>
<li>第3個太不重要了</li>
</ol>
</body>
結果:
2014年11月19日 星期三
child selector 與 descendant selector的差異性
<style type="text/css">
div{
font-size:x-large;
background-color:black;
}
//descendant selector 後代
div span{
background:red;
}
//child selector 孩子
div > span{
background:blue;
}
</style>
<body>
<div><span>123</span><span>456<span>789</span></span></div>
</body>
結果:
div{
font-size:x-large;
background-color:black;
}
//descendant selector 後代
div span{
background:red;
}
//child selector 孩子
div > span{
background:blue;
}
</style>
<body>
<div><span>123</span><span>456<span>789</span></span></div>
</body>
結果:
2014年11月12日 星期三
[Database] 在Ubuntu安裝sqlite和sqlitebrowser
安裝sqlite
sudo apt-get install sqlite3
試看看是否可以登入sqlite3 (資料庫不存在的話會自動建立)
sqlite3 [DatabaseName]
例:sqlite3 test.db
.help 顯示相關命令
.databases 顯示資料庫
.table 顯示表格
.exit or .quit 離開
安裝sqlite browser
英文文件請參考:https://github.com/sqlitebrowser/sqlitebrowser/blob/master/BUILDING.md
請先安裝libqt4-dev和libsqlite3-dev 和 qp-sdk
sudo apt-get install libqt4-dev
sudo apt-get install libsqlite3-dev
sudo apt-get install qp-sdk
下載:source 檔案
https://github.com/sqlitebrowser/sqlitebrowser/zipball/master
更多檔案格式請見官網:http://sqlitebrowser.org/
============安裝=================
- 打開終端機進到你的解壓縮的目錄
- 建立build資料夾 mkdir build
- 進去資料夾 cd build
- 執行cmake ..
- make
- sudo make install
註.cmake前請先檢查寫入權限問題,請用chmod改變權限
make過程
sudo make install
再來執行 /usr/local/share/applications/sqlitebrowser.desktop 就可以了
圖形還是比較人性化,這樣建schema就大大方便了
出現could not exec gnu/qt4/bin/qmake 的錯誤就是沒有安裝上面libqt4-dev和libsqlite3-dev
2014年11月9日 星期日
[NO SQL] MongoDB 安裝
原文內容請直接參考:
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
第一步:取得金鑰
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
第二步:增加更新來源的網址
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
第三步:sudo apt-get update
第四步:安裝mongoDB
sudo apt-get install -y mongodb-org
MongoDB資料放在/var/lib/mongodb
log檔放在 /var/log/mongodb
啟動設定檔放在/etc/mongod.cnf,使用port:27017為預設連接port
啟動:sudo service mongod start
停止:sudo service mongod stop
2014年11月8日 星期六
apt-get 常用指令
apt-cache search package 搜索程式
apt-cache show package 取得程式的訊息
sudo apt-get install package 安装程式
sudo apt-get install package - - reinstall 重新安装程式
sudo apt-get -f install 修复安装 "-f = --fix-missing"
sudo apt-get remove package 移除程式
sudo apt-get remove package - - purge 删除程式,包括删除配置文件等
sudo apt-get update 更新程式
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-get dselect-upgrade 使用 dselect 升级
apt-cache depends package 了解程式依存關係
sudo apt-get build-dep package 安装編譯的程式
apt-get source package 下載程式的開源碼
sudo apt-get clean && sudo apt-get autoclean 清理無用的檔案
sudo apt-get check 檢查程式的依存關係是否有損壞
2014年11月2日 星期日
char欄位插入中文字與英文字的差別
建立一個char(5)的文字欄位
試著新增‘中字長度六個’的文字
新增‘1234567890a’的11個英文字
出乎意料,英文字也是在第六個字就截斷了
所以char(5)在中文字和英文字的結果都是一樣的
2014年11月1日 星期六
查詢文字欄位的長度
select length('中'),佔3個byte
select bit_length('中'),佔了24個bit
select char_length('中'),得到1個中文字
結論:計算中文字長度要用char_length()函數
訂閱:
文章 (Atom)
熱門文章
-
解決辦法:(沒實際試過僅供參考) 1. ASP.NET預設連結資料庫的Connection數為100個,在Connection String裡加入Max Pool Size=xxx的設定 2. 重啓SQL資料庫的服務 查詢目前DB連線數 USE mast...
-
===終端機命令列上執行=== 版本查詢:mysql --version MariaDB啟動的參數內容:mysqld --verbose --help === MY SQL 內執行=== 顯示目前MariaDB的設定值:show variables;show...
-
執行Eclipse時出現 ADB server didn't ACK 的錯誤時可以參考 Error : ADB Server Didn't ACK on Windows 另外要找哪一個PID佔用的5037(ADB的Port)有時會很長一串,如果要分...
-
修改 /etc/mysql/my.cnf sudo vim /etc/mysql/my.cnf 在[mysqld]中加上此行 ============================= [mysqld] character-set-server=utf8mb4...
-
2015.06.07 安裝mono sudo apt-get install mono-complete sudo apt-get install mono-runtime ==================下面是舊文章僅供參考================...
-
首先檢查Eclipse版本 我的版本是Kepler Service Release 2 接下來複製要更新語言包的網址 http://www.eclipse.org/babel/downloads.php 再來打開Eclipse工具...
-
先安裝Python的Mysql連線模組(請用管理員身份開啟命令字元) pip install MySQL-python 出現錯誤,必須要安裝Microsoft Vistual C++ 14.0 https://www.micros...
-
開發時,有時需要倒一下線上機的資料來測試時 線上機( Ubuntu ) : mysql -u root -p SELECT * FROM [TABLE_NAME] INTO OUTFILE "/PATH/FILE_NAME.TXT"; 本地...
-
終於找到UBUNTU 15.04開機進入COMMAND LINE 的方式了(趕緊記錄一下) sudo vim /etc/default/grub 1. 將 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 註...