Mysql

De Marmits Wiki

mysqldump

export

mysqldump --host=localhost --user=utilisateur --password=motdepass -C -Q -e --default-character-set=latin1  basededonnee | gzip -c > fichiersql.gz 

export all database

mysqldump --host=localhost --user=root --password=motdepasse -C -Q -e --default-character-set=latin1 --all-databases  | tar -zcvf > all_databases.gz 

import

gzip -d < fichiersql.gz  | mysql --host=localhost  --user= utilisateur --password= motdepass basededonnee

Pour importer une seule base à partir d'un dump complet, il faut entrer la commande suivante :

mysql -u root -p --one-database BASE_A_RESTAURER < dumpcomplet.sql

extraire sous forme de fichier SQL, la base qui vous intéresse ?

sed -n '/^-- Current Database: `BASE_A_EXTRAIRE`/,/^-- Current Database: `/p' dumpcomplet.sql > mabase.sql

mac os X

  • générer la config
/usr/local/mysql/bin/mysql_config_editor set --login-path=local --host=localhost --user=root --password

  • voir la config
/usr/local/mysql/bin/mysql_config_editor print --all

  • se connecter:
/usr/local/mysql/bin/mysql --login-path=local

  • dump:
/usr/local/mysql/bin/mysqldump  --login-path=local --host=localhost --user=root -C -Q -e --default-character-set=latin1  base | gzip -c > /users/.../base.gz

  • avec homebrew et zsh
dans le fichier .zshrc (equivalent -->.bash_profile)
export PATH=${PATH}:/usr/local/mysql/bin

  • import mac os X
gzip -d < unebase.gz  | /usr/local/mysql/bin/mysql --host=localhost  --user=unuser --password=unpassword unebase

export serveur dédié

mysqldump --host=localhost --user=unuser --password=unpassword -C -Q -e --default-character-set=latin1 unebase | gzip -c > unebase.gz


Remplacer des caractères ou une chaine

UPDATE table SET le_champs = replace(le_champs, 'é', 'é') WHERE id > 0;


Procédures et fonctions sous MySQL: les bases:

  • repérer les doublons:
SELECT champsadoublons, count(*)
FROM table
GROUP BY champsadoublons
HAVING count(*) > 1
  • Créer un index FULLTEXT:
CREATE FULLTEXT INDEX fti_matable ON matable(
titre,
contenu
)
  • Requête de recherche avec INDEX FULL TEXT:

par pertinence :

SELECT *, MATCH (titre,contenu) AGAINST
('mots clefs') AS score
FROM table WHERE MATCH (titre,contenu) AGAINST
('mots clefs');
  • par boolean :
SELECT * FROM table WHERE MATCH (titre,contenu)
AGAINST ('+ mots clefs' IN BOOLEAN MODE) order by date desc;
SELECT * FROM table WHERE MATCH (titre,contenu)
AGAINST ("mots clefs" IN BOOLEAN MODE) order by date desc;
  • expression
SELECT * FROM table WHERE MATCH (titre,contenu)
AGAINST ('"Grande première"*' IN BOOLEAN MODE) order by date desc;

* commençant par ....

  • Reconstruire l'index:
REPAIR TABLE table

source:http://www.siteduzero.com/tutoriel-3-482339-index.html#ss_part_4

Étendre la recherche aux mots de 3 lettres

Par défaut MySQL FULLTEXT indexe les mots de quatre lettres ou plus. Pour étendre la recherche aux mots de 3 lettres ou plus, il faut modifier la config du serveur (/etc/mysql/my.cnf sous Debian), et ajouter les deux éléments suivants :

[mysqld]
ft_min_word_len=3
[myisamchk]
ft_min_word_len=3
  • creer un utilisteur full
mysql -p
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' IDENTIFIED BY 'pass' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'pass' WITH GRANT OPTION;
flush privileges;
  • divers
mysql -p
GRANT ALL PRIVILEGES ON db.* TO user @'%' IDENTIFIED BY 'pass';
flush privileges;


DELETE FROM mysql.db WHERE user='user' and host='%';
  • archiver une base
sudo /usr/bin/mysqldump --default-character-set=latin1 --host=localhost --user=compte --password=pass  base  > /rep/base.sql
  • archiver toutes les bases
sudo /usr/bin/mysqldump --default-character-set=latin1 --host=localhost --user=root --password=pass -A > /rep/fichier_dump.SQL
  • acces à distance
GRANT ALL ON user.* TO base@'ipduposte' IDENTIFIED BY 'password' WITH GRANT OPTION;
/usr/local/mysql/bin/mysql -h ipdistante -u user -p --port=3306
dans  /etc/mysql/my.cnf
désactivé
#bind-address           = 127.0.0.1
ouvrir le port 3306 dans le firewall