Création d'une base de données

mysql -p -e "CREATE DATABASE database CHARACTER SET utf8 COLLATE utf8_general_ci" # note je n'ai pas trouvé comment créé une base de données en UTF-8 à partir de mysqladmin # --default-character-set=utf8 ne fonctionne pas mysqladmin create databasename

Changer le mot de passe root

2006-08-01 10:15

# version avec le mot de passe root

$ mysql --user=root -p mysql
mysql> update user set Password=PASSWORD('new-password-here') WHERE User='root';
mysql> flush privileges;
mysql> exit;

# version sans le mot de passe root
/etc/init.d/mysql stop
/usr/bin/mysqld_safe --skip-grant-tables &
$ mysql --user=root
mysql> update user set Password=PASSWORD('new-password-here') WHERE User='root';
mysql> flush privileges;
mysql> exit;
killall mysqld_safe ( ou encore, fg et ctrl+c)
/etc/init.d/mysql start

Note: Sur debian, on peut utiliser le compte administrateur de debian (/etc/mysql/debian.cnf) pour changer le mot de passe root. Le mot de passe de ce compte est dans le fichier texte.

Source: Debian Administration :: Resetting a forgotten MySQL root password, by Steve Kemp

Changer les mots de passe

2006-06-22 14:48

mysql_install_db --user=mysql
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h plomb password 'new-password'


mysql> GRANT select,insert,update,delete,create,drop,index,LOCK TABLES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; 
mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';
mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('some_pass'),
    ->     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'),
    ->     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user SET Host='localhost',User='admin', Reload_priv='Y', Process_priv='Y';
mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;

Les fichiers de configurations

2004/04/16 16:26

  • /etc/my.cnf : permet de configurer des variables.
    Pour voir les variables:
    Avec le shell mysql: SHOW VARIABLES;
    En ligne de commande: /usr/libexec/mysqld --verbose --help
  • c:windowsmy.ini ou c:winntmy.ini, le même fichier que my.cnf sur windows
  • /etc/php.d/mysql.ini : inclut le module mysql pour php
  • /etc/httpd/conf.d/auth_mysql.conf : inclut l'authentification apache avec mysql

Trop de connexions mysql sur php?

2004/04/16 16:37

J'ai ce message si j'ai trop de traffic. Ce n'est pas max_user_connections puisqu'elle est à 0 (illimité)

Je crois qu'il s'agit du paramêtre max_connections puisqu'il est à 100 présentement. Voici comment la monter à 200 dans le fichier /etc/my.cnf ( section [mysqld] )

set-variable=max_connections=200

Réplication

Instruction

  1. Sur le serveur Maître, créer un usager de réplication:
    # mysql -u root
    mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY '<password>';
  2. Arrêter les transactions sur le maître et flusher les verrouillages:
    mysql> FLUSH TABLES WITH READ LOCK;
    exit
  3. Créer une copie de MYSQL:
    # tar -C /var/lib --exclude mysql/mysql --exclude mysql/*.info -czf /tmp/mysql-snapshot.tar.gz mysql
  4. Copier le fichier sur le serveur esclave (slave):
    # scp /tmp/mysql-snapshot.tar.gz slave:/tmp/
  5. Sur le serveur Maître, réactiver le serveur avec:
    # mysql> UNLOCK TABLES;
    exit
  6. Dans le fichier /etc/mysql/my.cnf, section [mysqld], ajouter les lignes log-bin et server-id=1, ou encore:
    # sed -i "/^\[mysqld\\]$/a\\log-bin\nserver-id=1" /etc/mysql/my.cnf
    . Il faut aussi modifier le bind-address du serveur mysqld pour écouter sur l'adresse externe du serveur. Par exemple: 0.0.0.0 pour écouter sur toutes les interfaces réseaux, 192.168.0.100 pour écouter sur une interface.
  7. Redémarrer le serveur mysql maître:
    # /etc/init.d/mysql restart
  8. Noter le fichier et la position du log binaire avec la commande
    mysql> SHOW MASTER STATUS;
    exit
  9. Sur le serveur Esclave, arrêter le serveur mysql:
    # /etc/init.d/mysql stop
  10. Dans le fichier /etc/mysql/my.cnf, section [mysqld], ajouter les lignes server-id=2, ou encore:
    # sed -i "/^\[mysqld\\]$/a\\server-id=2" /etc/mysql/my.cnf
  11. Copier les fichiers de la base de données du maître dans les fichiers du serveur mysql
    # tar -C /var/lib -xvf /tmp/mysql-snapshot.tar.gz mysql/*/
  12. Démarrer le serveur mysql esclave:
    # /etc/init.d/mysql start
  13. Spécifier le serveur maître avec la commande:
    mysql> CHANGE MASTER TO MASTER_HOST='<host>', MASTER_USER='<replication username>', MASTER_PASSWORD='<replication password>', MASTER_LOG_FILE='<recorded logfilname>', MASTER_LOG_POS=<recorded log offset>;
    Dans mon cas, il s'agit de CHANGE MASTER TO MASTER_HOST='ymorin-france', MASTER_USER='repl', MASTER_PASSWORD='repl_password', MASTER_LOG_FILE='mysqld-bin.000001', MASTER_LOG_POS=98;
  14. Démarrer le fil de processus (thread) de l'esclave:
    mysql> START SLAVE;
    exit
  15. Puisque la base de données "mysql" n'a pas été modifiée, il faut recréer les utilisateurs:
    master> GRANT select,insert,update,delete,create,drop,index,lock tables ON maBD.* TO 'monUsager'@'localhost' IDENTIFIED BY 'monMotdepasse';

Commande

LOAD TABLE FROM MASTER  [ droit SUPER, RELOAD et SELECT sur l'usager "repl" du serveur maître ]
LOAD DATA FROM MASTER   [ droit SUPER, RELOAD et SELECT sur l'usager "repl" du serveur maître ] 
START SLAVE
SHOW SLAVE STATUS

Voir Replication Howto.

ASP

Connexion avec ASP: Dim ConnectionString As String = "Data Source=localhost;Database=DBNAME;User ID=USERNAME;Password=PASSWORD" ou pour ODBC "Driver={MySQL ODBC 3.51 Driver};Server=mysql.mydns.com:3306;Database=myDB;uid=myID;pwd=myPassword;option=3" (source http://forums.asp.net/t/36920.aspx)

  cn_cap = Server.CreateObject("ADODB.connection");
  var connectionString = ""; 
  connectionString += "Provider=SQLOLEDB; Data Source=" + dbserver;
  connectionString += "; Initial Catalog=" + dbname;
  connectionString += "; User ID="+ dbuser;
  connectionString += "; Password=" + dbpassword;
  cn_cap.Open(connectionString);

  cn_cap.close();
  delete cn_cap;