Ahir vaig realitzar una actualitzacio de programari al servidor, actualitzacions de seguretat, i no em vaig adonar que l’instal·lador va parar el servidor de la base de dades.
Així que durant unes hores el servidor ha estat KO.
|
|
CODI ÇBlog de tecnologia en Català
|
|
|
||||||||||||||||||||||||
Ahir vaig realitzar una actualitzacio de programari al servidor, actualitzacions de seguretat, i no em vaig adonar que l’instal·lador va parar el servidor de la base de dades.
Així que durant unes hores el servidor ha estat KO.
Si quan tracteu d’instal·lar o executar HeidiSQL amb Wine, us peta de manera estrepitosa, la solució és ben senzilla.
Heu de canviar la configuració de Wine per a que funcioni com si es tractés d’un windows XP.
Amb això HeidiSQL arrencarà sense problemes.
Crec que el problema rau en que HeidiSQL és incompatible amb algunes versions de windows, com windows 2000, i encara que hi ha una llibreria dll específica que en teoria ho arregla, jo no vaig aconseguir que funcionés.
En canvi indicar a Wine que funcioni com si es tractés d’un windows XP és ben senzill, i soluciona el problema.
Aquest article pretén cobrir un dubte recurrent que es fa molta gent que té una màquina virtual al núvol, amb MySql i tot i obrir els port 3306 al tallafocs (firewall) no pot connectar-s’hi remotament.
La solució consisteix a editar l’arxiu:
my.cnf
Normalment ubicat a /etc/mysql/my.cnf
I allà comentar la línia que diu:
bind-address = 127.0.0.1
Això el que fa és canviar la configuració per defecte de MySql de només escoltar peticions a la ip 127.0.0.1 (localhost), i que el servidor MySql escolti a totes les adreces que la màquina té disponible.
Llavors reiniciem el servidor:
service mysql restart
Una altra cosa que haurem de tenir en compte, és que per a poder connectar al servidor l’usuari amb el que accedir haurà d’estar creat localment, i també amb %.
Això ho fem creant l’usuari de manera local i amb accès des de tot arreu (%) o des de la ip que hagi de poder accedir:
CREATE USER 'carles'@'localhost' IDENTIFIED BY 'CatalunyaTriomfant'; GRANT USAGE ON *.* TO 'carles'@'localhost'; GRANT SELECT, SHOW VIEW, INSERT ON `projectes`.* TO 'carles'@'localhost'; FLUSH PRIVILEGES; CREATE USER 'carles'@'%' IDENTIFIED BY 'CatalunyaTriomfant'; GRANT USAGE ON *.* TO 'carles'@'%'; GRANT SELECT, SHOW VIEW, INSERT ON `projectes`.* TO 'carles'@'%'; FLUSH PRIVILEGES;
Altrament no ens acceptaria consultes des de ip’s remotes.
Per als que treballeu amb Oracle, és d’interès que Quest Software ha alliberat la versió 11.5 de Toad.
Encara que aquest programari és bastant “buggy”, és a dir, que acostuma a contenir força errors, i peta sovint, cal dir que és una eina imprescindible per a treballar amb Oracle.
Més de 2 milions de desenvolupador l’empren al món.
Les millores que presenta són:
Aquí podeu veure un vídeo on expliquen les millores (en anglès):
El proppassat 12 de Febrer es va alliberar la versió d’aquest genial giny per a treballar amb bases de dades MySQL.
El que fa especial aquesta versió és que funciona amb Linux, amb Wine.
Jo considero que és el millor gestor de bases de dades que he fet servir fins la data.
A part de poder editar schemas amb facilitat, procediments emmagatzemats (stored procedures), fer backups, executar queries en diferents pestanyes… també permet editar les dades directament a la graella de resultats d’una consulta.
El proppassat 29 de Gener s’alliberà la versió de MyDebugger 1.2.1.1584.
Aquest programa per a MySQL permet fer un debug de procediments emmagatzemats (stored procedures), funcions i veure variables, establir punts d’aturada (break points), etc.. sense ni tan sols haver d’enregistrar les modificacions per a provar-les.
És una eina imprescindible, que estalvia hores i hores de feina als programadors de MySQL.
El seu cost és d’uns 40 dolars aproximadament però si teniu un bloc i en parleu us regalen la llicència.
De vegades quan treballem amb bases de dades, volem ordenar per la última inserció.
Això normalment es fa amb un:
SELECT * FROM la_meva_taula ORDER BY nom_del_camp DESC;
o millor encara amb :
SELECT nom_camp1, nom_camp2, nom_camp3 FROM la_meva_taula ORDER BY nom_del_camp DESC;
Però quan treballem amb moltes taules és habitual no recordar el nom dels camps.
Així que si sabem que el camp pel que volem ordenar és la primera columna (normalment la clau primària), simplemente podem fer:
SELECT * FROM la_meva_taula ORDER BY 1 DESC;
Si fos la tercera columna seria:
SELECT * FROM la_meva_taula ORDER BY 3 DESC;
Adreça curta Twitter: http://wp.me/pzeab-1Ki
Si voleu veure els usuaris de MySQL només heu de fer:
select * from mysql.user;
Si voleu veure tots els camps que conformen les propietats d’un usuari:
desc mysql.user;
Enllaç curt Twitter: http://wp.me/pzeab-1Kb
Ahir va ser alliberat MyDebugger versió 1.2.1.1583. Aquest genial debugger per a MySql, incorpora novetats com preparar l’entorn per a la stored procedure o funció que volem testejar.
Descarregar-lo de: www.mydebugger.com
El proppassat 6 de Gener d’enguany foren alliberades les versions de PHP 5.3.5 i la 5.2.17. Amdues solucionen diversos errors, un d’ells molt greu que afecta als processos PHP de 32 bits.
Aquest codi d’exemple, fa que peti.
Veure notes de la versió: http://www.php.net/index.php#id2011-01-06-1
A principis de gener també fou alliberada la versió 4.7.5 de midnight commander, que és una utilitat per a Linux clon de les norton utilities per a msdos però amb molres més millores.
Aquesta darrera versió incorpora moltes novetats, a més de solucionar uns quants bugs.
Per a instal·lar-lo, si no el tenim ja, hem de fer:
sudo add-apt-repository ppa:nilarimogard/webupd8 sudo apt-get update sudo apt-get install mc
Via: WebUpd8
La versió de Linux 2.6.37 fou alliberada la primera setmana de gener i presenta moltes millores:
- millora de rendiment per a múltiples processadors (SMP)
- més controladors de programari
- gestió millorada de la memòria
- més velocitat en les operacions d’entrada i sortida (Input/Output)
Via: Desktop Linux
Acabo de descobrir que al bloc s’han reiniciat totes les etiquetes i categories.
Això vol dir que tots els articles han perdut la seva categoria, tot apareix publicat a general, i les seves etiquetes.
Per aquest motiu no apareixen articles relacionats, no funcionen les categories, i si véns de google per categories o etiquetes no trobaràs, cosa que ja ha penalitzat el webranking.
Crec que té a veure amb un bug de la darrera versió de WordPress, la 3.0.4. Estic investigant si només afecta a la versió en Català, no ho crec, o a totes.
Estic reportant-ho a WordPress.
Actualització: Després de revisar el sistema, s’havia quedat pràcticament sense espai en disc. En alliberar espai, la situació s’ha recuperat sola i les Categories i Etiquetes han tornat. Com la incidència ha durat mitja hora, la baixada de visites es deu a la temporada de l’any.
El proppassat dia 20 de Novembre s’alliberà la versió 6.0 de HeidiSql, el programari lliure per a gestionar bases de dades MySql.
Aquesta versió presenta la solució de més de 300 errors (bugs), i novetats com la possibilitat d’executar diversos procediments emmagatzemats (stored procedures) en diferents pestanyes (tabs), múltiples connexions amb una sola sessió, resultats de consultes editables, noves funcions de copiar taula amb filtres de WHERE, vista prèvia d’imatges BLOB, una ajuda de SQL millorada, sortida de les cel·les que suporten els formats LaTeX i Wiki entre d’altres millores.
Adreça curta Twitter: http://wp.me/pzeab-1BC
Tot sovint l’ús de diferent collation entre la connexió i la configuració de la base de dades i/o les taules causen un error de collation.
A partir de MySql 4.1.8 podem comprovar quin collation s’està fent servir amb una sentència com aquesta:
SELECT COLLATION(USER()), COLLATION('@');
Podem definir el collation amb el que volem que es defineixin les variables amb SET NAMES:
SET CHARACTER SET 'UTF8'; SET NAMES 'utf8' COLLATE 'utf8_general_ci';
A partir d’aquí les variables de text ja no donaran conflicte amb la base de dades ut8_general_ci puix que hem indicat que es treballi amb aquest format.
Per exemple:
SET @s_email='email@codic.cat'; SELECT * FROM correus WHERE correu_usuari=@s_email;
Ja no donaria un error com:
#1267 – Illegal mix of collations (latin1_swedish_ci,IMPLICIT)
and (utf8_general_ci,COERCIBLE) for operation ‘=’
Més informació: http://dev.mysql.com/doc/refman/4.1/en/charset-collation-charset.html
El proppassat 8 d’Octubre fou alliberada la versió 1.2.1.1579 d’aquest debugger de procediments emmagatzemats (stored procedures) i funcions de MySql.
El podeu descarregar i provar durant 30 dies de manera gratuïta al seu web: http://mydebugger.com/
Els procediments emmagatzemats (stored procedures) poden tenir paràmetres d’entrada IN i paràmetres de sortida OUT.
Per a definir aquest procediment empraríem un codi SQL com ara aquest:
CREATE PROCEDURE `codic_envia_mail`(IN `S_PLANTILLA` VARCHAR(50), IN `I_USUARI` INT, IN `S_TIPUS` VARCHAR(5), IN `I_CODI` INT, IN `S_PARAM1` VARCHAR(50), IN `S_PARAM2` VARCHAR(50), IN `S_PARAM3` VARCHAR(50), OUT `I_MAILPK` INT) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN
Els paràmetres d’entrada són les dades que li passem al procediment, i els paràmetres de sortida són els que ens permeten recuperar amb una altra comanda SELECT les dades que ha preparat el procediment.
En la imatge superior es passen 7 paràmetres d’entrada i un de sortida @I_MAILPK.
A nivell de codi PHP i ZendDb cridaríem el procediment i recuperaríem la variable de sortida amb un codi similar a aquest:
$s_variable_de_sortida = '@I_MAILPK';
try {
$o_sel=dbHandler::getAdapter()
->query("CALL codic_envia_plantilla('{$s_plantilla}', {$i_usuari}, '{$s_tipus}', {$i_codi}, '{$s_parametre1}', '{$s_parametre2}', '{$s_parametre3}', {$s_variable_de_sortida})");
// Recuperar la variable de sortida. Pe: @I_MAILPK
$o_sel2=dbHandler::getAdapter()
->query("SELECT {$s_variable_de_sortida}");
// Nota: Encara millor si feu servir la substitució amb ? ja que llavors és ZendDb qui filtra possibles caracters problemàtics
$o_sql = "CALL codic_envia_plantilla(?, ?, ?, ?, ?, ?, ?, {$s_variable_de_sortida})";
$o_sel=dbHandler::getAdapter()
-->query($s_sql, array($s_plantilla, $i_usuari, $s_tipus, $i_codi, $s_parametre1, $s_parametre2, $s_parametre3));
// Recuperar la variable de sortida. Pe: @I_MAILPK
$o_sel2=dbHandler::getAdapter()
->query("SELECT {$s_variable_de_sortida}");
if ($o_sel2->rowCount() > 0){
$st_dades = $o_sel2->fetch();
$i_resultat = $st_dades[$s_variable_de_sortida];
return true; // S'ha executat bé, sortim de la funció retornant true
}
else
{
// El procediment no ha retornat cap valor dins la variable
// així que no ha anat bé
return false;
}
} catch (Exception $e) {
// Hi ha hagut una excepció (Exception)
throw new Exception('Excepció enviant el correu: '.$e->getMessage());
}
Els prefixes $s_ $i_ ens indiquen quin tipus de variable és:
$s_ string, cadena de caracters
$i_ integer, número sencer
$b_ boolean, valor booleà true/false >0 o 0/null/blanc
$st_ structure, estructura, com ara un array
$o_ object, objecte per exemple de base de dades
La variable de sortida a MySql porta l’ensaïmada o arrova davant.
Podem utilitzar altres notacions com $r_ per als arrays, etc.. però és important de cara a la llegibilitat del nostre codi sempre emprar la mateixa notació.
Emprar aquests prefixes ens estalviarà errors de programació, per exemple sumar cadenes amb números.
Un exemple de programació sense ZendDb i dos paràmetres de sortida:
mysql_query = "call sp_GetUsers('ProjectName',@ErrorNumber, @ErrorMessage)";
$result = mysql_query('select @ErrorNumber, @ErrorMessage');
$row = mysql_fetch_assoc($result);
print_r($row);
Com veieu sense indicar els prefixes resulta força menys intuitiu.
Per a més exemple de crides IN/OUT sense ZendDb podeu veure:
http://www.herongyang.com/jdbc/MySQL-CallableStatement-Procedure-Parameters.html
L’error 1064 quan creem un procediment emmagatzemat és bastant molest i difícil de descobrir-ne el perquè puix que apunta la primera línia de codi, i aquesta no té cap error.
/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 8 */
Aquest error és degut simplement a que MySql considera que on hi ha el punt i coma ; acaba la sentència.
Per tant es fa un embolic creient que acaba el procediment emmagatzemat (stored procedure).
La solució és tan simple com emprar DELIMITER.
Emprant davant de tot:
DELIMITER //
i al final:
END//
DELIMITER ;
(pareu atenció a que no hi hagi un espai entre END i //)
S’acaba el problema.