網頁

顯示具有 MySQL 標籤的文章。 顯示所有文章
顯示具有 MySQL 標籤的文章。 顯示所有文章

2020年7月17日 星期五

MySQL 多版本並存 @ Windows

同主機內多版本 MySQL並存安裝方式:

下載 MySQL instraller ,點選並執行它。安裝過程參考附圖。過程中要注意的事項如下:
  1. 由於是要同主機多版本並存使用,所以 installer 的第一個頁面要選擇 Cancel後,再點選 Add 按鈕 (圖二)。
  2. port 衝突的問題,記得預設 port 號要更改。
  3.  Authentication Method 更動,主要是考量到版本相容性而已。
附圖參考:



















相關參考:

2018年1月10日 星期三

MySQL 5.7 Incorrect datetime value '0000-00-00 00:00:00' 問題

MySQL 5.6 升級到 5.7,有些系統在寫入資料時會出現問題。
主要是因為 MySQL5.7 在日期格式做了點調整。

時間預設格式採用 0000-00-00 00:00:00 會造成資料無法寫入的狀況。

最簡單,不想要調整程式的做法如下:
調整 my.ini 將 sql-mode 內的 NO_ZERO_DATE 刪除即可。

相關資料:

2017年4月11日 星期二

MySQL 更新 5.6.36 版本出現 MSVCR100.dll 問題

這是第一次在做同版次更新升級時出現無法順利啟動的狀況。手動執行啟動 mysql 時會出現 MSVCR100.dll問題。目前狀況不明,先註記一下。

查了一下相關資料,目前看來是再安裝 Visual C++ 2010 即可解決此問題。但怪的是以前的版本更新都不會出現這種問題。

後來查一下官方手冊,在 5.6版本是需要有 Visual C++ 2010 。
但真的蠻奇怪的是原本服務的主機本來就沒有安裝Visual C++ 2010 而且也運作多年了,這時才出現這個狀況確實蠻妙的。

先切換回前版本,後續再視狀況看看要不要升級至 5.6.36版本。

106.07.18 後續追蹤:升級  5.6.37版本仍有相同的問題。另外安裝Visual C++ 2010 後也確實解決該狀況。

相關資料:


2016年12月1日 星期四

MySQL noinstall on Windows

  • 服務啟動
    • /MySQL/bin/mysqld --console
  • install or remove 於系統服務內
    • /MySQL/bin/mysld.exe --install  or --install {服務名稱}
      • example : mysqld.exe --install MySQL5
    • /MySQL/bin/mysld.exe --remove {服務名稱}

2016年10月20日 星期四

Mongodb 安裝


安裝版本 : Version 3.2.9
安裝平台 : Server 2008 64bit 

  • 安裝方式 
    • unzip binary files (不利用 msi 介面安裝) : msiexec.exe /q /i mongodb-win32-x86_64-2008plus-ssl-3.2.9-signed.msi INSTALLLOCATION="D:\mongo\" ADDLOCAL="all"

  • 自動啟動
    • sc.exe create MongoDB binPath= "D:\mongo\bin\mongod.exe --service --config=\"D:\mongo\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"

  •  移除自動啟動的方式
    •  sc.exe delete MongoDB
  • mongodb 啟動/停止指令 
    • MongoDB start / stop

 相關連結
  1. Install MongoDB Community Edition on Windows

2016年6月6日 星期一

mysqldump: unknown option '--no--beep' issue

解決方式:調整 my.ini 內的設定,將  no-beep 給註解掉即可。

原本還以為是 MySQL 5.7 版本在 win10 的 Bug。但實際測試後,發現不管是安裝 MySQL 5.6 or 5.7 在 win10 與  win7 都會出現 mysqldump: unknown option ‘--no--beep’ 的狀況。

相關參考:


2016年1月29日 星期五

MySQL5.7 安裝 @ Windows

利用MySQL所提供的 mysql-installer-community 來做安裝的動作。下載後,點選執行檔案後,按安裝介面內的提示操作就可以了。我的習慣是將程式集中到 /MySQL/ 目錄,將 Installation Path & Data Path 指向要放的目錄 (如圖),再來就依 UI 介面內的指示一一設定上去就可以很迅速的完成安裝的動作了。

相關資料



2015年9月23日 星期三

JSON 轉換小技巧

最近利用 FullCalendar 來架設開館時間的行事曆。不過在於資料提供的方面,想到要請同仁直接提供符合 JSON 格式的資料,對同仁來說可能會有些困擾。但如果要將 FullCalendar 改寫,將資料的來源取自資料庫,又覺得沒有必要這樣大費周章。另外撰寫一個轉換格式的程式也覺得沒必要。後來想到,其實也可以利用 phpmyadmin 。將同仁彙整的 CSV 檔案直接將匯入到資料庫(MySQL),再利用 phpmyadmin 資料匯出成符合 JSON 的格式(如圖)。按一按選一選,就可以很快得到符合需求的 JSON 格式資料。

  • 輸出成果:
[{"id":"1","title":"09:00-18:00","start":"2015-09-20","end":"2015"}, {"id":"2","title":"08:00-22:00","start":"2015-09-21","end":"2015"}, {"id":"3","title":"09:00-22:00","start":"2015-09-26","end":"2015"}]



2015年7月10日 星期五

MySQL 效能調整

效能調整要考慮的因素很多。最簡單也能最能自主掌握的應是由 my.ini or my.cnf 設定檔。以下是最為重要的幾個參數的相關整理。

參數名稱       建議

key_buffer_size               //Do not set it larger than 30% of your available memory
innodb_buffer_pool_size //you may set this  parameter up to 80% of the machine physical memory size ;Typical values are 5-6GB (8GB RAM), 20-25GB (32GB RAM), 100-120GB (128GB RAM).
innodb_log_files_size     // This has been lifted in MySQL 5.6.
query_cache_size           // The best option is to disable it from day 1 by setting query_cache_size = 0 (now the default on MySQL 5.6) ; Or Try 32 - 128M (caution: 512!)
thread_cache_size          //8 - 128M 

innodb_buffer_pool_size

相關參考:

2014年5月1日 星期四

XOOPS頁面空白問題

這是一件很神奇的事,因為同仁反應在 news 模組內無法發表評論。這個現象後來查出來是因為在升級 2.6版本時,在 xoops.xoops_xoopscoomments 資料表沒有正確的被 update所造成,但在升級的時候應該是有按手冊的升級方式確實完成升級。解決的方式,按此篇文章第9樓所提及的,將缺少的項目新增到資料表就可以了。

上面出現的問題修正後過了幾天後。又突然發現管理者的帳號在使用閱讀全文功能時會出現空白頁面的狀況,而前一天還可以正常的使用。這現象推測有可能是同仁在調整其它使用者帳號後所發生的。也因為沒有錯誤記錄可供參考,我這就直接比對先前可以使用時的 SQL檔案。發現只要將 xoops_users{umode} 內的 nest 改成 thread 就可以正常的呈現資料了。

相關資料:


2014年2月7日 星期五

MySQL5.6 同版次的更新方式

  • MySQL 官方網站 下載需要更新的檔案。
  • 停止MySQL服務。
  • 將下載後的檔案解壓縮,並將 bin、include、lib、share 與 support-files 目錄內的檔案直接覆蓋更新。
  • 重新啟動MySQL(更新完成)。


2013年8月28日 星期三

MySQL5.6 無痛升級

先收集相關資料,等改天再來升級 MySQL資料庫管理系統。

Upgrading MySQL on Windows:應該做以下步驟即可

  1. 先備份所有的資料庫
  2. 停止 MySQL服務
    • 取消掉系統 mysql 服務: mysqld.exe --remove yourservicename
  3. 將下載下來的壓縮檔解壓縮後覆蓋到 MySQL目錄內,如果要保留原主機內的資料,請記得刪除更新檔內的 /data/* 內的檔案後再行覆蓋。
    • 重新將系統 mysql服務加入:mysqld.exe --install mysql5 (其實我不是很確定這步驟是必須的)
  4. 啟動 MySQL服務
  5. 執行 /bin/mysql_upgrade ,讓它去檢查資料表與相關的升級的動作
  6. 升級完成
my.ini修改:
在 mysql 5.5 升級至 5.6有些語法需要修正:


其它相關參考資料:


搞了半天,一點都不無痛:

最簡單的方式還是利用MySQL所提供的 mysql-installer-community-5.6.13.exe 來做安裝的動作,只要將要放的路徑決定好,再使用它的 UI介面,按介面內的提示安裝,就會自動產生 my.ini 檔案。此時再將舊主機內所備份的SQL備份檔案,將它給 dump回新的 MySQL5.6資料庫就完成了。這樣子就不需再調整舊主機內的 my.ini 的設定,因為如果要做調整就需要一個個去了解那些功能在 5.6版本是已宣告不支援,一個個手動修改。@@

透過 MySQL installer 的安裝方式,很簡單,在這稍做記錄,待往後有空時再來看看是否要升級:

執行 MySQL installer,我的習慣是將程式集中到 /MySQL/ 目錄,將 Installation Path & Data Path 指向要放的目錄 (如圖),再來就依 UI 介面內的指示一一設定上去就可以很迅速的完成安裝的動作了。



















2013年6月27日 星期四

PHP Calendar

寫一個月曆系統是有些難度的。稍微 Google 一下,也有不少 open sources code 可以使用,不過有些做的過於複雜,有些則是呈現上不符合自己的喜好。

找著找著,這位作者所做的 Build a Calendar Using PHP, XHTML, and CSS,就做的很棒,基本上可以拿這個當作基礎往上再自行發揮。作者從最為基本的操作、增加控制器到如何使用事件寫的很清楚。

我在實作這篇 Add Events to the PHP Calendar 時是有碰到一些問題 (作者並沒有將 SQL與Connection to MySQL With PHP Function 一同放上去,自訂的 SQL 與相關註記如下),在此稍微記錄一下:
  • 新增 MySQL Schema:
CREATE TABLE IF NOT EXISTS `events` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) COLLATE utf8_bin NOT NULL,
  `event_date` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
  • 新增與修改以下 PHP Script
$db_link = mysql_connect('127.0.0.1', 'root', 'password');
mysql_select_db('calendar', $db_link) or die('Could not select database.');
$month=sprintf("%02d",$month);//1 tobe 01

$query = "SELECT title, DATE_FORMAT(event_date,'%Y-%m-%d') AS event_date FROM events WHERE event_date LIKE '$year-$month%';";
PS,(1) 新增MySQL Connection function ;(2) 因為(int)宣告與 mysql 檢索條件的緣故,所以改為將 $month 變數內的數字自動補 0;(3) DATE_FORMAT(event_date,'%Y-%m-%D')改為DATE_FORMAT(event_date,'%Y-%m-%d'),後來發現改成 %d後也是有問題,使用%d的條件,在1-9的日期不會呈現在月曆上,需改成 %e 才可以,DATE_FORMAT(event_date,'%Y-%m-%e'),這樣才運作正常。

2013年5月24日 星期五

Win7上MySQL回應很慢的問題

自從升級 Win7 以後。發現到PHP連結到 MySQL時,它的反應都很慢。可是所撰寫好的 code放到服務的主機確沒有這樣的現象發生。

稍微 google 一下。有些文章建議調整 my.ini 內的設定,將 skip-name-resolve=off 的設定加入減少 DNS Query;有些建議直接修改 window host的檔案,將 127.0.0.1 加入。可是我這實際按建議調整後其實成效不大;另外,其實也很怪,在 Apache輸入http://localhost/* 也可以很快速的回應頁面,所以修改 host內的檔案與之到底有沒有關係也是一個疑問。

總之,後來發現到只要將PHP連線的 localhost 主機修改成127.0.0.1後,一切恢復正常,連線的速度快多了。真的很神奇 @@。

2013年4月23日 星期二

MySQL ibdata1容量增加的問題


mysql ibdata1容量一直增加的問題,這個問題在未來應該也可能會用的到,先註記起來。

在一開始使用 MySQL時,就可以為每一個資料庫指定相關設定 (innodb_file_per_table ; you can store each InnoDB table and its indexes in its own file),這樣子此問題就不會浮現。不過這方式必須是一開始就選用。

但若一開始未規劃好,當然也可以撐到MySQL 能存放的最大容量為,最大容量會視 MySQL所安裝的作業系統的不同而不同,但說實在的對於一些小型的網站來說要達到最大的限制也不太容易。而且就找到的參考資料,也是有人說不太需要採用 innodb_file_per_table 的作法,事實上他的論點也是相似,而且他認為 T的容量也不算 Big DATA ( Terabytes is not big data, petabytes is)。所以不怕,繼續撐著。

參考資料:

2013年3月29日 星期五

MySQL 加解密

之前因為個資法上路的緣故,好不容易將系統內記錄個資欄位的資料去除。不過變化趕不上計劃。因為某些因素又不得不去修改回來。

基本上系統能做的防護,應該該做的也差不多了。

例如,
  1. 該主機僅限特定區域的電腦才能存取;區網的部份有切開,防火牆有做好相關設定
  2. 系統介面有做特定的 IP檢查
  3. 系統介面有做帳號的登入檢查機制
  4. 系統有做 injection 的相關防護
  5. 連線走 SSL 的加密連線措施
  6. 定期修補作業系統MySQL PHP

在資料的儲存方面還可以再加強。將敏感性的文字加以處理,經加密後再放在資料庫內會更加安全些。
 
研究了一下,MySQL Encryption and Compression Functions。使用 AES_DECRYPT() 與 AES_ENCRYPT() ,可以將要放的文字經自行定義後的 KEY值,經 AES演算法處理後再放在資料庫儲放,當然取出的方式也是要經 AES_DECRYPT() 處理後,才能完整呈現加密前的文字。只要是沒有取到程式內所記錄的 Key 值,直接觀看記錄的結果,它會是一連串的亂碼。

使用的方式很簡單,範例如下:

(1) 修改資料型態:
use a column with a VARBINARY or BLOB binary string data type

(2) 加密的方式:
INSERT INTO `table` (
`name` ,
`phone` ,
`address`
)
VALUES (
'TEST', '035742995', AES_ENCRYPT('要儲放聯絡地址文字','Your Key')
);

(3) 取出的方式:
SELECT *, AES_DECRYPT(address , 'Your Key') Decode_address  FROM `table` WHERE `name` = 'TEST';

2012年10月31日 星期三

Too many connections - MySQL

今天突然許多系統發生異常的狀況,查了一下應該是後端資料庫管理系統 MySQL所造成,它的 Connections 的連結超出限制值所造成的,稍微調整 max_connections 的設定值,將它調整為 250,再重新啟動後就正常了。

不過回家後,還是有發現相同的狀況。只是蠻奇怪的,以前從來沒有發生過。不過真是莫非定律,明天要休假才發生問題。不過它的連線都是因為 OPAC 所崁入的功能所造成的 ( 之前為了執行的效率,所以 PHP- MySQL 的連結方式都是採 persistent connection 的方式 ) ,連線數過高加上沒有釋放,今天發生的原因應該就是這樣。

最近的事也真不少,先暫時調整一下 MySQL 的設定,將 mysql.allow_persistent 暫時關閉 ( mysql.allow_persistent=Off ),暫時先解決此問題,有空再去改寫相關的程式。

 ......

最後還是直接去修改程式的原始碼,再陸續觀察看看了。

相關資料:

2012年10月25日 星期四

phpMyAdmin - Class 'COM' not found Problem

phpMyAdmin 是管理 MySQL的一套軟體,透過 Web 介面可以很快速的管理 MySQL。

偶而也會利用它內建的功能來觀察 MySQL的運行資訊,不過自從將  PHP 版本升級至 5.4.X 版後,在使用這個功能時,都會出現異常狀況,在後端的 LOG 可以觀看到  PHP Fatal error:  Class 'COM' not found 的訊息,也一直以為是 PHP 5.4.x 版本的 Bug,也就沒去管它了。

不過後來詳細了解後,原來自己擺烏龍,主要是 COM 模組沒有啟動所造成的。
只要簡單的在 php.ini 加入 extension=php_com_dotnet.dll 後,重新啟動 Apache 後,功能就可以正常使用了。

相關資料:
  1. PHP COM
  2. PHP COM Install

2012年9月21日 星期五

個人資料保護法因應措施

個人資料保護法將在今年的十月份正式上路,想要多了解個人資料保護法,可以來看看
新版個資法大解密這個網站的內容資訊。

為了避免未來發生令人困擾的事,我的想法是最好這些敏感性的資料根本就沒有存在於資料庫內,它就不會發生。所以目前重新審查所管理的一些系統,想儘量的將一些不必要的資料欄位刪除;在界定那些欄位可以做刪除的過程中,發現有些欄位的資料與實際作業時是一定要存在的,是無法避免的,例如需要生日欄位來計算使用者的年齡。

對於此點,最後的做法,應是將這欄位的資料另外編碼處理,想法子把資料的組合從原來的「可直接辨識資料」轉換成「間接的識別資料」。雖然這樣子做,到時是不是合於法條的解釋,不過看起來,這應也是目前唯一所能做的解套方式。當然,若是從實際的作業流程來做修改,應是更直接也更可行,不過許多事也不是個人想怎做就怎麼做的。

編碼的實作:

生日欄位做編碼的動作,第一個直覺就是轉換成 UNIX TIME OR TIMESTAMP 的做法,不過後來才發現 TIMESTAMP 在時間處理上有些限制,它僅能表示 '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC 的範圍,(http://dev.mysql.com/doc/refman/5.5/en/datetime.html

此路不通,山不轉路轉。

查一下 MySQL 文件,有部份是針對字串的加解密的 Function,應該是可以利用  ENCODE 與 DECODE 函數來完成。語法為 ENCODE(str, pass_str) 、DECODE(crpty_str, pass_str),要稍微注意的是它儲存加密資料的欄位一定要改為 BLOG型態。
這樣一來,所取出的資料即是一連串編碼後的文字,透過解密動作後,再調用相關的日期的函數,重新轉成日期,應該就可以了。


參考資料:

2012年6月6日 星期三

Keyword

<?php
$keyword= 'keyword1 keyword2';

$search_word=explode(' ',$keyword);

foreach ($search_word as $word){

    //echo  $word."<br />";

    $where_list[]="`question` LIKE '%$word%'";//SQL

    $where_clause = implode(' OR ',$where_list);

}

if(!empty($where_clause)){

    $search_query .= " WHERE $where_clause";

}

echo $search_query; //WHERE `question` LIKE '%keyword1%' OR `question` LIKE '%keyword2%'
?>