Ressources MySQL

Mes liens MySQL http://www.akademia.ch/links/search.php?hp=1&disc=mysql attention, ces liens ne sont plus à jour depuis 2008! préferer mon blog ou mon twitter

Ma page php

Restaurer une base corrompue

vous avez une terrible erreur du genre

ERROR 1016 (HY000): Can't open file: 'mempo_users_sessions.MYI' (errno: 145)

et vous n'arrivez même pas à accéder à la table, p.ex.

REPAIR TABLE Syntax

REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE
    tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]

REPAIR TABLE repairs a possibly corrupted table. 
By default, it has the same effect as myisamchk --recover tbl_name.

8-o ATTENTION: à manier avec précaution, lire avant http://dev.mysql.com/doc/refman/5.0/en/repair-table.html

Ajouter une clé d'index auto-incrémentale

Il est toujours possible de faire cette délicate opération après-coup de la manière suivante:

ALTER TABLE `tableName` ADD `id` INT( 12 ) NOT NULL ;
ALTER TABLE `tableName` ADD PRIMARY KEY ( `id` ) ;
ALTER TABLE `tableName` CHANGE `id` `id` INT( 12 ) NOT NULL AUTO_INCREMENT ;

Ajouter 10 champs "remarques"

ALTER TABLE `batiments` 
ADD `rem01` TEXT NOT NULL ,
ADD `rem02` TEXT NOT NULL ,
ADD `rem03` TEXT NOT NULL ,
ADD `rem04` TEXT NOT NULL ,
ADD `rem05` TEXT NOT NULL ,
ADD `rem06` TEXT NOT NULL ,
ADD `rem07` TEXT NOT NULL ,
ADD `rem08` TEXT NOT NULL ,
ADD `rem09` TEXT NOT NULL ,
ADD `rem10` TEXT NOT NULL ;

Trouver les sockets

netstat -n | grep mys netstat -n | grep 3306

access2MySQL

access2MySQL.sh convert Microsoft access db (maybe also other formats) to standard MySQL

concaténation plusieurs bases

concaténation plusieurs bases MySQL: précautions à prendre et solutions, ou pourquoi mysql est parfois benêt!

Droits / Privileges / Users

http://dev.mysql.com/doc/refman/5.0/fr/adding-users.html Ajouter de nouveaux utilisateurs à MySQL

créer un nouvel utilisateur et lui donner tous les droits sur la base db:

GRANT ALL PRIVILEGES ON db.* TO 'monty'@'localhost' WITH GRANT OPTION;

SET PASSWORD FOR monty@host = password( 'new_password' ); 

Exemples

shell> mysql --user=root mysql

Vous pouvez ajouter de nouveaux utilisateurs en utilisant des commandes GRANT :

mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     IDENTIFIED BY 'un_mot_de_passe' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     IDENTIFIED BY 'un_mot_de_passe' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';

Changer son mot de passe MySQL

Ligne de commande

en deux coups de cuillère à pot, créer une base et un user:

mysql
create database lenom
GRANT ALL PRIVILEGES ON lenom.* TO 'monty'@'localhost' WITH GRANT OPTION;
SET PASSWORD FOR monty@host = password( 'new_password' );

Changer le charset

lister les champs dans rem puis

cat rem | while read i
do
echo "ALTER TABLE  '$i'  DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;"
done

ALTER DATABASE

connect.inc.php global file to connect to MySQL with php

Pour générer automatiquement des fichiers php pour afficher et administrer une base de données MySQL

http://www.akademia.ch/info/mysql/mysql-php-robot.zip

pour avoir un id numérique auto-incrémental

ALTER TABLE latable ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY 

suite à un INSERT, on veut récupérer le nouvel id pour continuer p.ex. ds un formulaire:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Impossible de se connecter : ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Le dernier ID inséré dans est le id %d\n", mysql_insert_id());
?>

exemples du bouquin O'Reilly base de données film http://www.akademia.ch/info/mysql/film/

http://www.totallyphp.co.uk/scripts/optimize-all-tables-in-a-mysql-database.htm

<?php

dbConnect()

$alltables = mysql_query("SHOW TABLES");

while ($table = mysql_fetch_assoc($alltables))
{

   foreach ($table as $db => $tablename)
   {
       mysql_query("OPTIMIZE TABLE '".$tablename."'")
           or die(mysql_error());
   }
   
}

?>

pratique pour ouvrir mysql sans login+password,

mettre dans son $HOME un fichier .my.cnf contenant:

[client]
user = userName
password = userPassword
[mysql]
database = userDB

puis chmod 700 .my.cnf

ensuite quand on fait mysql c'est comme

mysql -u userName -puserPassword userDB  

(attention à bien coller le mot de passe au -p)

change password for user lambda

mysql -u root -p
use mysql;
update user set password=PASSWORD("NEWPASSWORD") where User='lambda';

change root password not having it

vous avez perdu le password root et vous ne voulez pas réinstaller mysql en faisant un backup des tables? rien de plus simple

source: http://www.cyberciti.biz/tips/recover-mysql-root-password.html

Step # 1 : Stop mysql service

# /etc/init.d/mysql stop
Output:

Stopping MySQL database server: mysqld.

Step # 2: Start to MySQL server w/o password:

# mysqld_safe --skip-grant-tables &
Output:

[1] 5988
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[6025]: started

Step # 3: Connect to mysql server using mysql client:

# mysql -u root
Output:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Step # 4: Setup new MySQL root user password

mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
SELECT * FROM cours WHERE id_cours NOT IN (SELECT id_cours FROM cours_dates)
  • prend les dates d'aujourd'hui - 30 jours
SELECT *
FROM testit
WHERE TO_DAYS( NOW( ) ) - TO_DAYS( timestamp ) <=30
LIMIT 0 , 100;
  • ajouter à une date (ici 611 jours)
UPDATE `DJTDemiJour` SET DJTDate =ADDDATE(DJTDate, INTERVAL 611 DAY)

 UPDATE `jos_reservations` SET date = ADDDATE( date, INTERVAL 70 DAY )  

et soustraire:

mysql> SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);

update sr_data set email='@bcu.unil.ch' where email='FR'
# update signets set category='Geneve_et le_monde' where category='Genève_et le_monde' ou syntaxe replace: 

$replace = mysql_query("replace into recet (id, prov, titre, temps, ingr, pers, typ, prep, date) VALUES ('$id', '$prov', '$titre', '$temps', '$ingr', '$pers', '$typ', '$prep', '$date')");
UPDATE xoops_bb_posts_textSET post_text=(REPLACE (post_text,'morphix.sourceforge.net','www.morphix.org')); marche pas (infra) 

UPDATE recet SET ingr = REPLACE ( ingr, 'calmar', 'calamar' ) WHERE ingr LIKE '%calmar%' 

CA CA MARCHE: update `tableName` set `Field`=replace('string','old','new')

Example 1

SELECT name FROM cia WHERE population > (SELECT population FROM cia WHERE name='United States')

Example 2

SELECT name FROM cia WHERE region = (SELECT region FROM cia WHERE name = 'Brazil')

“SELECT t1.cod_uni, t1.TEL_IMP_UNI, t1.comm, t1.dateu FROM testunite t1 WHERE t1.cod_uni NOT IN (SELECT t2.cod_uni FROM testunite2 t2) ORDER BY t1cod_uni”;

[+/-]

13.1.7.1. Syntaxe de JOIN 13.1.7.2. Syntaxe de UNION

SELECT [STRAIGHT_JOIN]

     [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
     [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]
     [DISTINCT | DISTINCTROW | ALL]
  select_expression,...
  [INTO {OUTFILE | DUMPFILE} 'nom_fichier' export_options]
  [FROM table_references
    [WHERE where_definition]
    [GROUP BY {unsigned_integer | nom_de_colonne | formula} [ASC | DESC], ...
    [HAVING where_definition]
    [ORDER BY {unsigned_integer | nom_de_colonne | formula} [ASC | DESC] ,...]
    [LIMIT [offset,] lignes]
    [PROCEDURE procedure_name(argument_list)]
    [FOR UPDATE | LOCK IN SHARE MODE]]

JOIN LEFT etc.

$sql5b="SELECT * FROM voc WHERE libelle REGEXP '^$ereg$q5b$ereg$' ORDER BY libelle";
load data local infile '/home/radeff/public_html/emails/emails.txt' into table fred_email; 
load data local infile '/home/radeff/public_html/secret/dereda/file.txt' into table frdereda fields terminated by ";";   
# load data local infile '/export/data/htdocs/radeff/signets.txt' into table signets fields terminated by ";";   

http://video.google.com/videoplay?docid=2742157386318372444 Tutoriel vidéo pour faire un backup avec phpMyAdmin

Export MySQL / mysqldump

mysqldump

Récupérer une base parmi toutes les bases dans un backup

Récupérer une base parmi toutes les bases dans un backup

pour extraire les log binaires d'une base:

mysqlbinlog –database=nameOfYourDB mysql_bin.* | grep -v '^# at' > result

mysql2xml script php pour convertir en xml une base mysql kw: mysqltoxml mysql xml php mysql php xml mysql

mysqldump2xml utiliser mysqldump pour générer du xml à partir d'une base MySQL; défaut: c'est pas du xml standard

phpCgiMysql2xml utiliser un cgi php appellé depuis php+apache, marche nickel

ubuntu / linux mysql

whereis mysql mysql: /usr/bin/mysql /etc/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

Where are the Mysql data files located? They're all in /var/lib/mysql

The log files: /var/log/mysql