Showing posts with label Mysql. Show all posts
Showing posts with label Mysql. Show all posts

Saturday, November 30, 2013

mysql-bin.***** mengunakan byk space

Salam,

Tiba-tiba terdetik untuk buat backup segala kerja2 di laptop.

baru aku perasan yg folder /usr/local/mysql/data aku makan byk space... hampir 300GB. mula2 aku kira logik lagi sebab aku banyak simpan & pakai data yg besar2 dlm MySQL server aku.

tapi bila tgh buat backup baru perasan yg ada satu pattern file ni ... mysql-bin.***** ada byk dlm folder data/ .... size aeach file maximum dlm 1GB... yg aku nampak ada dekat 200++ file...

aku pun tak pernah tau kewujudan file ni sebelum ni.

Lepas tanya pakcik google, baru tau apa gunanya file ni.

  • Data Recovery
  • High Avaibality/Replication

ada suggestion utk disabled bin log ni... tapi bila pikir2... bende ni perlu... incase jadi apa2... so aku ambil option ke dua utk purge shj existing bin log ni... nak purge gunakan sql command mcm ni

$ mysql -u root -p 'MyPassword' -e "PURGE BINARY LOGS TO 'mysql-bin.03';"

OR

$ mysql -u root -p 'MyPassword' -e "PURGE BINARY LOGS BEFORE '2008-12-15 10:06:06';"

Lepas purge bin log ni... aku dpt reclaim space dlm 150GB++....

kalau nak auto purge... letakkan shj command diatas ni dt cron job.... tapi aku lebih prefer manually.

Saturday, May 12, 2012

MySQL updating/add my.cnf on Mac OS X 10.6

Salam.... skop project sekarang ni byk bermain dgn data2 dlm kapasiti yg besar... hehehe aku rasa bleh tambah 1 lg expertise(bukan la expert sgt pun) dalam resume aku.... data crunching & massaging expert.. bukan itu sebenarnya aku nak sampaikan. apa aku nak kongsi adalah mcmana nak tambah/kemaskini my.cnf iaitu config file utk mysql server di Mac OS X 10.6 (snow leopard). aku ada keperluan utk tweak/ubah config utk support workload aku. by default mac os x x ada my.cnf didalam /etc/ folder dia. dia pakai dfault yg sekali mysql server. so kalau nak buat perubahan kene tambah/copy dr sample yg disediakan. copy sample my.cnf file dr mysql support folder ke folder /etc/
sudo cp /usr/local/mysql-5.5.8-osx10.6-x86_64/support-files/my-huge.cnf  /etc/my.cnf
kalau nak ubah atau kemaskini dah boleh buat dari /etc/my.cnf untuk memberi kesan, kene restart mysql server. boleh guna command ni:
sudo /Library/StartupItems/MySQLCOM/MySQLCOM restart
lepas tu bleh try connect pakai mysql client
mysql -uroot
kalau mysql server take fully restart, command kat atas ni tak akan berjaya. dia akan keluarkan error berkaitan 'cannot locate mysql.sock'. untuk kes aku, aku restart computer terus. ada tutorial suruh delete file mysql.server. tapi aku tak berjaya locate file tu. tapi selepas restart. mysql dah menggunakan config setting dari /etc/my.cnf yg baru kita tambah/ubah td. *sebenarnya masalah mysql server tak fully restart/stop aku dah hadapi beberapa kali. sebelum ni terjadi di server CentOs dimana aku dah buat hal dkt live server client aku.... hehehehe... tapi kat server client aku lg teruk. mysql server running mcm zombie. tak dpt detect pid. so tak boleh stop/kill. or aku p[unya ilmu sendiri yg tak cukup. tapi solution yg boleh dipakai ialah... RESTART COMPUTER/SERVER..... hahahahha

Sunday, January 9, 2011

MySQLCOM on Mac

lebih kurang seminggu aku mengodek mac baru aku ni... mcm2 hal aku jumpa..

start dari isu perl + mysql(DBD-mysql)
sampaila ke imagemagick & chartdirector...

alhamdulillah semua setel... amin....

last sekali aku punya statup script utk MySQLCOM x jalan.... maybe sebab aku dah byk sgt godek sana & sini.... aku kene start manually everytime start my mac.

sampaila hari ni aku decide nak cari kat mana silapnya...

last sekali jumpa gak...

error bukan di MySQLCOM tapi di mysql.server punya script...

x jumpa '.bin/mysqld_safe' .... ni mungkin sebab aku dah kacau env aritu kut... so aku just modify file mysql.server and setkan

datadir = '/usr/local/mysql/data'
basedir = '/usr/local/mysql/'

so test balik... semua run seperti sepatutnya.... alhamdulillah

Thursday, December 9, 2010

Simple MySQL tips

MySQL merupakan satu pelayan pengkalan data yang bagus.

tetapi walau sehebat mana pun sesuatu aplikasi pelayan pengkalan data itu tidak akan ada maknanya kalau kita salah mereka bentuk struktur pengkalan data kita.

masalah utama utk pengkalan data berasakan sql adalah capaian masa untuk sesuatu 'query' itu selesai.

kalau didalam pembangunan berasakan web, masa amat penting. proses timeout merupakan mimpi ngeri yg tak nak dihadapi oleh pembangun aplikasi berasakan web. ada 2 penyumbang besar kepada jumlah masa yg diperlukan utk sesuatu halaman itu berjaya dipaparkan di pelayar pengguna selain dari jangkauan dan limitasi capaian internet ialah masa yg diambil oleh bahasa pengatucara utk memproses sesuatu permintaan dan masa yg diambil oleh query utk mendapatkan keputusan dari pengkalan data.

didalam satu permintaan mungkin akan ada 1 atau lebih query yg perlu dilakukan utk mendapatkan data2 yg didinginkan. disini, masa akan menjadi panjang kalau kita tidak menstrukturkan 'table' pengkalan data dgn betul.

paling penting, 'PRIMARY KEY' ataupun kunci utama data kita. jangan ketawa jika ada yg x buat pun bende ni. byk kegunaan primary key ini. bukan shj untuk mengelakkan pengulangan data ia juga mempercepatkan carian/query kita. kesan mungkin tidak nampak jika kita bermain dgn data berskala kecil.. tetapi bila ia menjangkau ratusan ribu baris... anda akan tepuk dahi memikirkannya...

untuk mempercepatkan carian/query, kalau boleh.. column yang penting & selalu dicari setkan ia dalam kombinasi primary key. sebagai cth.

kod untuk bilik darjah : 010305
dimana:
01 mewakili id blok
03 mewakili id tingkat
05 mewakili id bilik darjah.

pendekatan yg paling sesuai adalah memecahkan kod bilik darjah itu kepada 3 column berasingan. dan gabungkan 3 column itu sebagai primary key.

ini juga memudahkan anda membuat carian bedasarkan blok atau tingkat atau bilik darjah atau mana2 gabungan mengikut keperluan. adalah lebih cepat masa yang diambil mengunakan standard operator seperti =,!= daripada mengunakan 'LIKE %someting%'.

kurangkan pengunaan varchar/char sebagai primary key. lebih sesuai jika mengunakan int atau tinyint bergantung kepada keperluan. praktikan pengunaan data rujukan yang amat membantu jika anda membangunkan aplikasi yg byk mengunakan data rujukan.

sebagai cth lg, jika anda mengunakan NO KP tai NO IC (benda yg sama) sebagai primary key. ia betul.. sesuatu yg unik. tetapi dalam format no kp lama, ada char disitu. ini akan melambatkan masa pencarian anda walaupun anda dah kenalpasti colum itu sebagai primary key.

apa yg boleh anda buat ialah. ciptakan 1 colum baru. bg nama cth 'idorang' dgn column type 'BIGINT' dgn kapasiti column sebanyak '20' dan column type 'UNSIGNED'.

gunakan query ini.

update table
SET `idorg` = CONV(SUBSTRING(CAST(SHA(TRIM(no_kp)) AS CHAR), 1, 16), 16, 10)

query diatas akan automatik ciptakan 1 unik id utk manusia yg mengunakan no kp sebagai identiti mereka bedasarkan nilai didalam column no_kp. dan ia semua int.

setakat ini sahaja tip utk mempercepatkan masa diambil utk carian didalam pengkalan data MySQL.

ada byk lg tip yg boleh dipraktikan dan diamalkan. bergantung kepada keperluan.

sekian.... salam.....

Monday, May 17, 2010

Google MAP API | Map search within Radius

Post sebelum ni aku ada postkan mysql statement utk query MySQL utk mendapatkan lat &long didalam radius yg kita perlukan.

post ini pula aku sertakan keratan javascript function utk draw radius layer on top of google map.

here's the code:

html:

Find Within Radius The circle drawn here is a circle on the surface of the Earth.

Radius: Miles Kilometers

Javascript:

function drawCircle() {
 var oUnitsMI = document.searchMap.unitsMI;
 var oUnitsKM = document.searchMap.unitsKM;
 var oRadius = document.searchMap.radiusInput;
 oRadius.value = oRadius.value ? oRadius.value : 500;
 
 
 //alert(oRadius.value);
 //circleRadius = oRadius.value;
 if (oRadius.value == '') {
  alert("Enter a number for radius");
  return;
 }
 circleRadius = parseFloat(oRadius.value);
 
 if (circleRadius > 9999) {
  alert("To Large");
  return;
 }
 
 
 if (oUnitsKM.checked) {
  circleUnits = 'KM';
 }
 else {
  circleUnits = 'MI';
 }
 
 doDrawCircle();
 
 //optional features, calling ajax if select in radius checked. uncheck to suite your ajax function
 //if(document.searchMap.inradius.checked){
  // var center = map.getCenter();
 //  var urls = '?action=search¢er=' + center + "&radius=" + circleRadius + "&unit=" + circleUnits;
 //  ajaxpage(urls,'searchcontainer'); 
 //}
}
 
 
function doDrawCircle(){
 
 if (circle) {
  map.removeOverlay(circle);
 }
 
 
 if (centerMarker) {
  map.setCenter(centerMarker.getLatLng())
 }
 else {
  centerMarker = new GMarker(map.getCenter(),{draggable:true});
  GEvent.addListener(centerMarker,'dragend',drawCircle)
  map.addOverlay(centerMarker);
 }
 
 var center = map.getCenter();
 
 var bounds = new GLatLngBounds();
 
 
 var circlePoints = Array();
 
 with (Math) {
  if (circleUnits == 'KM') {
   var d = circleRadius/6378.8; // radians
  }
  else { //miles
   var d = circleRadius/3963.189; // radians
  }
 
  var lat1 = (PI/180)* center.lat(); // radians
  var lng1 = (PI/180)* center.lng(); // radians
 
  for (var a = 0 ; a < 361 ; a++ ) {
   var tc = (PI/180)*a;
   var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
   var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
   var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
   var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
   circlePoints.push(point);
   bounds.extend(point);
  }
 
  if (d < 1.5678565720686044) {
   circle = new GPolygon(circlePoints, '#00BE00', 1, 1, '#3EFF3E', 0.25); 
  }
  else {
   circle = new GPolygon(circlePoints, '#00BE00', 1, 1); 
  }
  map.addOverlay(circle); 
 
  map.setZoom(map.getBoundsZoomLevel(bounds));
  
  
 }
}

kalau diperhatikan di penghujung function drawCircle ada line yg aku comment kan. line berkaitan adalah tambahan utk memanggil function ajax utk retrive data dr mysql ber dasarkan radius circle yg kita draw di atas map.

happy coding.

Saturday, May 15, 2010

Google MAP API | MySQL search within Radius

boleh mengunakan sql kod dibawah utk mencari lokasi mengunakan lat & long didalam databse mysql.

SELECT 
 *, 
 ( 
  3963.189  
   * 
  acos( 
   cos( radians($center_lat) ) * 
   cos( radians( field_lat ) ) * 
   cos( 
    radians( field_long ) - radians($center_long) 
   ) + 
   sin( radians($center_lat) ) * 
   sin( radians( field_lat ) ) 
  ) 
 ) AS distance 
FROM 
 table 
HAVING 
 distance < $radius
ORDER BY 
 distance

cuma kod ini agak lambat skit sebab mengunakan HAVING instead of WHERE statement.

kod di atas menggunakan mile/batu. kalau nka pakai Km tukar 3963.189 kepada 6378.8

utk kod utk peta saya akan pos kan kemudian...

happy coding.

Friday, February 5, 2010

MySQL JOIN tip

Perbezaan SQL Query dibawah

select 
        * 
from 
        table_A
LEFT JOIN 
        table_B ON table_A.tba_id = table_B.tbb_tbaid
WHERE
        table_B.tbb_year = '2009'
SQL diatas akan mengembalikan baris yg menepati WHERE condition.

select 
        * 
from 
        table_A
LEFT JOIN 
        table_B ON table_A.tba_id = table_B.tbb_tbaid AND table_B.tbb_year = '2009'
Manakala SQL diatas ini pula akan mengembalikan semua baris dari table_A dan baris dari table_B yg menepati condition di JOIN query.

Thursday, July 9, 2009

Had Bilangan Maksimum Baris Untuk Setiap Jadual MySQL

berapa kah had maksimum baris yang boleh disimpan didalam setiap jadual jikalau kita mengunakan pengkalan data MySQL?

jawapan nya:
bergantung kepada perkakasan yang anda gunakan. yang pasti jika anda mengunakan perkakasan 64bit anda boleh menyimpan lebih banyak dari perkakasan 32bit.
Sebenarnya had maksimum boleh dikawal mengikut konfigurasi sistem.

mysql> show table status like 'urls' \G;
*************************** 1. row ***************************
           Name: urls
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 1914630
 Avg_row_length: 94
    Data_length: 180376868
Max_data_length: 4294967295
   Index_length: 356147200
      Data_free: 0
 Auto_increment: 1914631
    Create_time: 2009-07-09 10:54:50
    Update_time: 2009-07-09 21:37:48
     Check_time: 2009-07-09 10:57:41
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

kalau kita perhatikan, (Max_data_length)Maksimum jumlah data ialah 4Gb. kalau kita tukar

mysql> alter table urls max_rows = 200000000000;
sekrang jadual ini boleh menampung lebih lagi.
Akan tetapi, untuk perkakasan 32bit, had paling maksimum ialah 4.2billion baris... banyak? bergantung.

Tuesday, May 26, 2009

PHP OrgChart

last night, there's somebody add me at YM. asking for help. need to build simple org chart using PHP.

at 1st, i just give him a url tutorial from mysql dev at http://dev.mysql.com/tech-resources/articles/hierarchical-data.html to get some basic idea how to build simple but dynamic orgchart.

normaly i done this using perl, but i decide to take a try to write this using php...

here the result... hahha i manage to build basic engine with only basic structure/position of chart. i let him proceed with the code... hopefully it'll help him solve hihs problem..

and here the PHP code:

 
 
 $query  = "
SELECT node.*
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND parent.name = 'ELECTRONICS'
ORDER BY node.lft;


 ";
 
 $users = Array();
 $result = mysql_query($query);
 while($row = mysql_fetch_array($result, MYSQL_ASSOC))
 {
  $users[$row['parent']][] =  $row['category_id'] . "|"  . $row['name'];
 }
 
 
 
 function recursive($parent,$array)
 { 
  $pcount = count($array[$parent]);
        
  for ($u = 0; $u < $pcount; $u++) {  
   list($id, $name) = split('\|', $array[$parent][$u]);
   $count = count($array[$id]);
   if($count > 0){
    echo "";
    echo ""; 
    echo ""; 
    recursive($id,$array);
    echo "
$name
|
"; }else{ echo "
$name
"; } } } echo ""; recursive(0,$users); echo "
";

and here the sql code:

CREATE TABLE IF NOT EXISTS `nested_category` (
 `category_id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) NOT NULL,
 `lft` int(11) NOT NULL,
 `rgt` int(11) NOT NULL,
 `parent` int(11) NOT NULL,
 PRIMARY KEY (`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

--
-- Dumping data for table `nested_category`
--

INSERT INTO `nested_category` (`category_id`, `name`, `lft`, `rgt`, `parent`) VALUES
(1, 'ELECTRONICS', 1, 20, 0),
(2, 'TELEVISIONS', 2, 9, 1),
(3, 'TUBE', 3, 4, 2),
(4, 'LCD', 5, 6, 2),
(5, 'PLASMA', 7, 8, 2),
(6, 'PORTABLE ELECTRONICS', 10, 19, 1),
(7, 'MP3 PLAYERS', 11, 14, 6),
(8, 'FLASH', 12, 13, 7),
(9, 'CD PLAYERS', 15, 16, 6),
(10, '2 WAY RADIOS', 17, 18, 6);

And Css:

.parentnode{
 margin: 5px;
 position: relative;
 width: 200px;
 text-align : center;
 border: 1px solid #ffcc33;  
 padding: 10px;
}
.childnode{
 margin: 5px;
 position: relative;
 width: 200px;
 text-align : center;
 border: 1px solid #000000; 
 padding: 10px;
}

i make some changes from MySQL Dev tutorial... as using parent child column make it easier to construct the chart. and lft & rgt column make it easier/faster to query/select required row/wing.

happy coding..