Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Zend: regler le timeout des connexions MySQL avec pdo_mysql

11Il peut parfois être utile d’augmenter ou de baisser la durée de timeout des connexions MySQL. Par exemple, il peut être intéressant de l’augmenter si certaines de vos requêtes MySQL n’aboutissent pas et si vous obtenez l’erreur « MySQL server went away ».

Ce réglage se fait en passant l’option PDO::ATTR_TIMEOUT (constante de la classe PDO qui vaut 2) au driver pdo_mysql. Cette option marchera aussi pour certains autres pilotes mais sa signification peut différer (avec sqlite par exemple).

Avec Zend, il faut définir cette option lors de la création de l’adapter soit en utilisant Zend_Db::factory soit en créant une nouvelle instance de Zend_Db_Adapter_Pdo_Mysql.

Exemple avec un timeout de 10 secondes en utilisant Zend_Db::factory:

      $driverOptions = array(
          PDO::ATTR_TIMEOUT => 10
      );

      $params = array(
        'host' => '127.0.0.1',
        'port' => '3306',
        'username' => 'user',
        'password' => 'password',
        'dbname' => 'my_db',
        'driver_options' => $driverOptions
      );
      $adapter = Zend_Db::factory('pdo_mysql', $params);

sources/docs:
PDO::setAttribute
documentation Zend_Db_Adapter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Mysql: astuces pour importer/exporter une base de données volumineuse

Astuce 1 – Augmenter la taille maximale d’upload des fichiers

Si lors de l’import la taille maximale d’upload des fichiers est trop basse, ouvrez le fichier /etc/php5/apache2/php.ini et modifiez les deux lignes suivantes:

; Maximum size of POST data that PHP will accept.
; http://php.net/post-max-size
post_max_size = 16M
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 16M

Astuce 2 – Faire un import/export en ligne de commande:

Export

#Export de la table nom_de_la_base dans le fichier /chemin/vers/le/fichier.sql
mysqldump -h localhost -u utilisateur -p"mot_de_passe" --lock-tables=false -r /chemin/vers/le/fichier.sql nom_de_la_base

Le paramètre optionnel –lock-tables=false permet d’enlever le verrouillage des tables le temps de l’export.

Pour exporter et compresser en même temps:

mysqldump -h localhost -u utilisateur -p"mot_de_passe" --lock-tables=false nom_de_la_base | gzip -v > nom_de_la_base.sql.gz


Pour ignorer des tables:

–ignore-table=nom_de_la_base.table_a_ignorer_1 –ignore-table=nom_de_la_base.table_a_ignorer_2

#exemple:
mysqldump -h localhost -u utilisateur -p"mot_de_passe" --lock-tables=false --ignore-table=nom_de_la_base.table_a_ignorer_1 --ignore-table=nom_de_la_base.table_a_ignorer_2 -r /chemin/vers/le/fichier.sql nom_de_la_base

Import

#Import du fichier /chemin/vers/le/fichier.sql dans la base nom_de_la_base
mysql -h localhost -u utilisateur -p"mot_de_passe" nom_de_la_base < /chemin/vers/le/fichier.sql

Pour décompresser et importer en même temps:

zcat nom_de_la_base.sql.gz | mysql -h localhost -u utilisateur -p"mot_de_passe" nom_de_la_base

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Comment utiliser MySql dans un programme C

Pour utiliser une base de données MySql dans un programme écrit en C il faut utiliser le header « mysql.h ».

A priori ce n’est pas bien difficile, il y a juste à rajouter la ligne #include <mysql.h> au début de votre programme. Cela devient un peu plus difficile par contre quand votre compilateur vous dit que la librairie mysql.h n’est pas présente dans votre système…

Pour résoudre ce problème, il faut installer le paquet libmysqlclientXX-dev:

sudo apt-get install libmysqlclient16-dev

Une fois ce paquet installé (et que mysql.h est bien appelé dans votre programme) il suffit de compiler avec la commande suivante:

gcc programme.c `mysql_config --cflags --libs`

Voici maintenant comment exécuter des requêtes dans votre programme:

//premièrement, on initialise la connexion
char *server = "localhost";
char *user = "dbuser";
char *password = "dbpsw";
char *database = "dbname";
MYSQL *conn;

conn = mysql_init(NULL);
mysql_real_connect(conn, server,user, password, database, 0, NULL, 0);

//exemple de SELECT
MYSQL_RES *res;
MYSQL_ROW row;
mysql_query(conn, "SELECT * FROM example_table");
res = mysql_use_result(conn);
while ((row = mysql_fetch_row(res)) != NULL){
//on accède aux valeurs avec row[0], row[1] ...
}

//exemple avec INSERT
char* column1 = "test";
char* column2 = 123;
char temp[512];
sprintf(temp, "INSERT INTO example_table (column1,column2) VALUES ('%s','%i');",column1,column2);
mysql_query(conn, temp);

//On oubli pas de fermer la connexion:
mysql_close(conn); 

Bonne chance!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *