Cara membuat instalasi mysql dengan Inno Setup

Mysql sejak versi 5.6 untuk Windows file instalasinya cukup besar lebih dari 100MB.  Karena itu dalam tutorial kali ini penulis hanya membatasi topik pada MySQL versi 5.5 ke bawah di mana file instalasinya masih cukup kecil sehingga ketika dimasukkan dalam paket instalasi masih dalam ukuran wajar.

Agar dapat menginstall mysql dengan mudah termasuk konfigurasi databasenya anda harus memahami terlebih dahulu parameter-parameter yang ada dalam MysqlInstanceConfig.

Jika anda sudah memahami perintah tersebut, maka anda tinggal mengimplimentasikannya di script instalasi inno setup seperti berikut:


[code]
function getRegMysql:string;
begin
    if IsWin64 then
    result:='SOFTWARE\Wow6432Node\MySQL AB\MySQL Server 5.5'
    else
    result:=
    'Software\MySQL AB\MySQL Server 5.5';

end;
function MySQLNotInstalled:Boolean;
begin
result:=RegKeyExists(HKEY_LOCAL_MACHINE,getRegMysql)=False;
end;
function getDirMySQL:String;
var location:string;
begin
    if RegQueryStringValue(HKEY_LOCAL_MACHINE,getRegMysql,'Location',
    location) then
    result:=location
    else
    result:='';

end;
procedure StopMysql(ServiceName:string);
var ResultCode:integer;
begin
    Exec('net','stop "'+ServiceName+'"','',SW_HIDE,ewWaitUntilTerminated,ResultCode);

end;
procedure StartMysql(ServiceName:string);
var ResultCode:integer;
begin
    Exec('net','start "'+ServiceName+'"','',SW_HIDE,ewWaitUntilTerminated,ResultCode);
end;
procedure ConfigureMySQL(ServiceName,datadir,templateini,rootpassword:string);
var isMysqlInstall:boolean;
mysqlconfigwizard:string;
resultCode:integer;

dirmysql,dirdata:string;
mysqlparam:string;
myini:string;
begin

dirmysql:=addbackslash(getDirMysql);
myini:=dirmysql+'my.ini';
 
        mysqlparam:=
        '-i -q "-lC:\mysql_install_log.txt" "-p'+dirmysql+'" '+
               '"-t'+templateini+'" "-c'+dirMysql+'my.ini" DatabaseType=MIXED ServerType=DEVELOPMENT '+
               ' AddBinToPath=yes ServiceName='+ServiceName+' "-nMySQL Server 5.5" -v5.5.56 RootPassword='+rootpassword;
                
                DeleteIniEntry('mysqld','datadir',templateini);//menghapus 
datadir key section [mysqld] di file template.ini
                 DeleteIniEntry('mysqld','innodb_data_home_dir',templateini);//menghapus innodb_data_home_dir key section [mysqld] di file template.ini
                 DeleteIniEntry('mysqld','innodb_data_file_path',templateini);//menghapus innodb_data_file_path key section [mysqld] di file template.ini                 

                
                mysqlconfigwizard:=dirmysql+'bin\MySQLInstanceConfig.exe';
                forceDirectories(datadir);
            
               if Exec(mysqlconfigwizard,mysqlparam, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
                begin
//jika MySQLConfigInstance.exe selesai di jalankan maka
                  StopMysql(ServiceName);//Stop Service MySQL
//Ini file sudah ada, anda tinggal mensetting beberapa key di section [mysqld]
                     dirdata:=addbackslash(datadir);
                     stringChange(dirdata,'\','/');
                      SetIniString('mysqld','basedir','"'+dirmysql+'"',myini);
//memasang key basedir di file my.ini 
                      SetIniString('mysqld','datadir','"'+dirdata+'"',myini);
//memasang key datadir di file my.ini.  Sesuaikan dengan direktori data anda              
                      SetIniString('mysqld','innodb_data_home_dir','"'+dirdata+'"',myini);
//memasang key innodb_data_home_dir di my.ini.  Sesuaikan dengan direktori data anda.
                     
             
                   StartMysql(ServiceName);

                end
                else
                MsgBox('Konfigurasi gagal error: ' +SysErrorMessage(ResultCode) + '.',
                mbError, MB_OK);
                 
 end;
procedure InstallMySQL(Mysqlinstallfile:string);
var ResultCode:integer;
begin 
Exec('msiexec','/i '+ExpandConstant(Mysqlinstallfile)+' /quiet /norestart', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);

end;
 procedure CurStepChanged(CurStep: TSetupStep);
 var datadir,templateini:string;
 begin
      if Curstep=ssPostinstall then
      begin
      datadir:=expandConstant('{commondocs}\testdata');
      templateini:=expandConstant('{tmp}\mysql55default.ini');
      configureMySQL('MySQL5556',datadir,templateini,'');
      end;
 end;

Penjelasan:

  • Pada saat instalasi mysql selesai secara default database schema sudah terbentuk termasuk juga user root dan password(yaitu blank).  Data tersebut terletak di Folder MySQL+data, tetapi pada versi MySQL 5.56 ke atas terletak di C:\Program Data\MySQL\<Versi Mysql>\Data
  • Anda bisa memakai database schema yang terbentuk secara default di atas, tetapi anda bisa juga “membawa” database schema sendiri dengan menyertakan folder mysql dan performance schema(lihat di folder database mysql anda).  Pastikan database schema tersebut dalam keadaan kosong atau paling tidak hanya diisi dengan root password anda.
  • Prosedur install di atas di jalankan saat semua file sudah di ekstrak semua(lihat di procedure CurStepChanged).

Agar lebih mudahnya di attachment bawah penulis sudah sertakan file inno setup beserta file template.ini yang sudah siap dikompilasi.  Anda tinggal merubah beberapa hal seperti berikut:

  • Sumber instalasi MySQL sesuaikan dengan MySQL yang anda punya,
  • Sumber Folder data dan Destinasi folder data.
  • Ganti parameter data_dir dan innodb_data_homedir di template.ini
  • Ganti parameter product name(MySQL Server 5.5) dan version name (-v5.5.56) sesuaikan dengan versi mysql anda.
  • Anda bisa memakai file template.ini yang sudah saya sertakan, tapi akan lebih baik jika anda membuat sendiri sesuai kebutuhan server.

 

 

Attachments

anasmbahdien

Seorang programmer yang menguasai bahasa pemograman Delphi, VB.NET, PHP dan Android. Untuk hasil karya kunjungi mogotekno.com

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *