Sacré boulot cette migration dites-donc ! Je pense avoir réussi le plus gros mais il reste un petit détail à résoudre et là, je n'ai pas les compétences pour ça. Avant de commencer et sans vouloir faire des flatteries gratuites, je remercie otomatic pour ses tutoriels qui sont clairs, nets et précis. Pour préciser les choses, j'ai bien tout ça : ¤ L'icône de Wampserver est verte (mais j'ai du "bidouiller un peu" pour qu'elle prenne cette couleur ¤ J'ai mis en place les virtuals hosts (c'est la partie que je ne connaissais pas du tout). ¤ J'ai testé mon fichier httpd-vhosts.conf (j'ai bien un "syntax ok" qui s'affiche).
Mes projets fonctionnant avec Myisam fonctionnent bien (moyennant quelques adaptation de liens internes suite à la disparition du domaine "localhost" dans les adresses). En revanche, ceux fonctionnant avec innoDB non. J'ai bien décommenté les lignes qu'il fallait dans my.ini comme indiqué dans le tuto. Je disais avant que je n'avais pas l'icône verte et cela venait de mysql. Voici le message d'erreur que j'avais trouvé dans le log : =========== 2015-04-02 17:33:23 48952 [ERROR] wampmysqld: unknown variable 'innodb_log_arch_dir=G:/wamp/bin/mysql/mysql5.6.17/data/' 2015-04-02 17:33:23 48952 [ERROR] Aborting ===========
Je me suisdit qu'en recommentant cette ligne-là, l'erreur disparaitrait (je vous avais bien dit que je n'y connaissais rien, n'est-ce pas ?). Et effectivement, l'erreur a disparu et l'icône Wampserver est passée au vert. Cependant, lorsque je tente d'utiliser un de mes sites tournant avec innodb il y a des problèmes de connexion à la base de données, voici le message d'erreur d'un site tournant sous WordPress : =========== Impossible de choisir la base de données
Nous sommes en mesure de nous connecter au serveur de la base de données (ce qui signifie que les identifiants et mot de passe sont bons), mais il est impossible de sélectionner la base de données patatijournal.
Êtes-vous sûr qu'elle existe ? L’utilisateur jojaba a-t-il la permission d’utiliser la base de données patatijournal ? Sur certains systèmes, le nom de votre base de données est préfixée par votre nom d’utilisateur, donc est-ce comme username_patatijournal. Est-ce le problème ? =========== Je sais que ce n'est pas bien, mais je ne créé pas d'utilisateurs mysql, je laisse la configuration par défaut (root et pas de mot de passe).
Je m'arrête-là, je pense avoir donné suffisamment de données pour l'instant. Je suis prêt à en donner davantage s'il le faut. Je vous donne encore mon my.ini au cas où : =========== # Example MySQL config file for medium systems. # # This is for a system with little memory (32M - 64M) where MySQL plays # an important part, or systems up to 128M where MySQL is used together with # other programs (such as a web server) # # You can copy this file to # /etc/my.cnf to set global options, # mysql-data-dir/my.cnf to set server-specific options (in this # installation this directory is C:\mysql\data) or # ~/.my.cnf to set user-specific options. # # In this file, you can use all long options that a program supports. # If you want to know which options a program supports, run the program # with the "--help" option.
# The following options will be passed to all MySQL clients [client] #password = your_password port = 3306 socket = /tmp/mysql.sock
# Here follows entries for some specific programs
# The MySQL server [wampmysqld] port = 3306 socket = /tmp/mysql.sock key_buffer_size = 16M max_allowed_packet = 1M sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M basedir=G:/wamp/bin/mysql/mysql5.6.17 log-error=G:/wamp/logs/mysql.log datadir=G:/wamp/bin/mysql/mysql5.6.17/data
# Don't listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! # #skip-networking
# Disable Federated by default skip-federated
# Replication Master Server (default) # binary logging is required for replication #log-bin=mysql-bin
# binary logging format - mixed recommended #binlog_format=mixed
# required unique id between 1 and 2^32 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted server-id = 1
# Replication Slave (comment out master section to use this)
# New for MySQL 5.6 if no slave skip-slave-start
# # To configure this host as a replication slave, you can choose between # two methods : # # 1) Use the CHANGE MASTER TO command (fully described in our manual) - # the syntax is: # # CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>, # MASTER_USER=<user>, MASTER_PASSWORD=<password> ; # # where you replace <host>, <user>, <password> by quoted strings and # <port> by the master's port number (3306 by default). # # Example: # # CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, # MASTER_USER='joe', MASTER_PASSWORD='secret'; # # OR # # 2) Set the variables below. However, in case you choose this method, then # start replication for the first time (even unsuccessfully, for example # if you mistyped the password in master-password and the slave fails to # connect), the slave will create a master.info file, and any later # change in this file to the variables' values below will be ignored and # overridden by the content of the master.info file, unless you shutdown # the slave server, delete master.info and restart the slaver server. # For that reason, you may want to leave the lines below untouched # (commented) and instead use CHANGE MASTER TO (see above) # # required unique id between 2 and 2^32 - 1 # (and different from the master) # defaults to 2 if master-host is set # but will not function as a slave if omitted #server-id = 2 # # The replication master for this slave - required #master-host = <hostname> # # The username the slave will use for authentication when connecting # to the master - required #master-user = <username> # # The password the slave will authenticate with when connecting to # the master - required #master-password = <password> # # The port the master is listening on. # optional - defaults to 3306 #master-port = <port> # # binary logging - not required for slaves, but recommended #log-bin=mysql-bin
# Point the following paths to different dedicated disks #tmpdir = /tmp/ #log-update = /path-to-dedicated-directory/hostname
# Uncomment the following if you are using InnoDB tables innodb_data_home_dir = G:/wamp/bin/mysql/mysql5.6.17/data/ innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = G:/wamp/bin/mysql/mysql5.6.17/data/ # innodb_log_arch_dir = G:/wamp/bin/mysql/mysql5.6.17/data/ # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high innodb_buffer_pool_size = 16M innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size innodb_log_file_size = 5M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50
[mysqldump] quick max_allowed_packet = 16M
[mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates
InnoDB, je n'utilise pas et ne connais que très peu. Néanmoins, tu peux essayer d'effectuer mysql_upgrade et aussi Vérifier, Réparer les tables sous PhpMyAdmin.
J'utilise les bases de données avec "engine=innodb".
J'espère que dans ta migration, tu as fait un "export" de ta base de données de l'ancienne version mysql pour ensuite faire un "import" vers la nouvelle version mysql.
Le cœur de l'usage des tables avec innodb, est le fichier ibdata1 qui se trouve dans le répertoire "/data". Si ta table est bien visible sous phpmyadmin et que tu n'arrives pas à faire, par exemple, un "select * from nom_de_ta_table", en mettant bien sur, use nom_de_ta_base_de_données, c'est soit un manque de déclarative au niveau de my.ini, soit le fichier ibdata1 est corrompu.
Je te conseille de regarder mon site, concernant d'une part la corruption du fichier ibdata1, et d'autre part, le paramétrage du fichier my.ini pour mysql.
@+
---------------------------------------------------------------------------------------------------------------------------------------------------------------- Mon site : [www.jcz.fr]
J'ai bien fait un export/import de mes bdd comme le préconise otomatic dans son tutoriel (c'est à dire en utilisant la fonction d'exportation/importation de phpMyAdmin). J'ai pu lire sur le Web que innodb_log_arch_dir n'était plus nécessaire, le fait de commenter cette ligne est donc justifié. @otomatic J'ai vérifié les tables (dans l'onglet opérations) l'une après l'autre (il n'est apparamment pas possible de vérifier une base de donnée de cette manière), à chaque fois j'obtiens un OK. J'ai tenté une optimisation, mais il me dit que "Table does not support optimize, doing recreate + ..." Dois-je effectuer un upgrade en suivant ta procédure ? J'ai migré come tu le rpécise dans ton tutoriel, or tu ne parles pas de cette mise à niveau... @Artemus24 J'ai fait un SELECT `post_title` FROM `wp_posts` dans phpMyAdmin, ça a fonctionné. J'ai regardé tes My.ini ici : [www.jcz.fr] A un moment tu parles de la configuration spécifique innoDB et j'ai vu que la ligne suivante : =============== f:/Wamp/bin/mysql/mysql5.6.23/data/ibdata/ =============== J'ai vérifié sur mon installation, je n'ai pas de dossier ibdata, mais j'ai un fichier ibdata1. Dois ajouter des choses dans le my.ini (voir dans mon premier message).
Merci.
PS : je viens de faire un mysql upgrade comme tu l'indiques otomatic tout était ok (hormis les messages dont tu parles dans ton message sur une autre discussion). Mais cela ne résoud pas mon problème... Ça doit effectivement être un problème de My.ini non ?
Modifie 2 fois. Derniere modification le 04/04/2015 à 10:01 par jojaba.
Je pense à un paramètre incorrect ou manquant de my.ini. Une fois celui-ci trouvé, il faudrait tenter un nouvel import. Ne peux-tu pas comparer avec le my.ini de la version 2.2, même si ce ne sont pas les mêmes versions de MySQL.
Je voulais en avoir le coeur net (je n'étais pas sûr que cela vienne d'un problème de prise en charge de base innoD. Dans un de mes sites tournant sous WordPress, j'ai passé toutes les tables en MyISAM. Mais cela n'a pas résolut le problème. Ce n'est donc finalement pas un problème relatif au moteur. Il faut que j'explore d'autres pistes. Ceci dit, je vais faire la comparaison que tu proposes otomatic...
Modifie 1 fois. Derniere modification le 05/04/2015 à 09:09 par jojaba.
Bonne nouvelle, j'ai trouvé d'où le blocage venait. Je ne sais pas pourquoi, j'avais défini un utilisateur mysql pour la base qui ne fonctionnait pas et qui était définie en innoDB. Désolé de vous avoir embêté pour presque rien. J'ai tout de même comparé l'actuel my.ini avec mon ancine my.ini (j'ai gardé tout l'ancien dossier wamp comme préconisé dans le tutoriel). J'ia pu constater que toutes les lignes concernant innoDB étaient commentées sauf la dernière : ================ innodb_lock_wait_timeout = 300 ================ Comment innoDB a-t-il pu fonctionner sans ces lignes ????
J'en ai profité pour modifier l'encodage par défaut en ajoutant la section [mysql] la ligne suivante : ================ default-character-set = utf8 ================
et dans la section [mysqld] les lignes suivantes : ================ collation-server = utf8_general_ci init-connect ='SET NAMES utf8' character-set-server = utf8 ================
Je veux également modifier le moteur par défaut (qui apparemment est innoD et j'ai ajouté ça juste après les lignes concernant innoDB : ================ # Ajouts pour définir moteur par défaut default-storage-engine = MyISAM default-tmp-storage-engine = MyISAM ================
> Comment innoDB a-t-il pu fonctionner sans ces lignes ???? Beaucoup de paramètres ont une valeur par défaut si rien n'est précisé.
> J'en ai profité pour modifier l'encodage par défaut en ajoutant la section [mysql] la ligne suivante : > default-character-set = utf8 Je ne mets aucun character-set ou autres collation. Je laisse MySQL se débrouiller, et il le fait très bien tout seul. C'est au niveau des définitions des tables et colonnes que l'on précisera le jeu à utiliser. Quant au "init-connect ='SET NAMES utf8' ", c'est, là aussi, à l'application de le préciser éventuellement. Voir : MySQL - Jeux de caractères et collations
> # Ajouts pour définir moteur par défaut > default-storage-engine = MyISAM > default-tmp-storage-engine = MyISAM Ça oui !
Un mauvais diagnostique aura pour conséquence un mauvais remède.
La directive "innodb_log_arch_dir" est devenue obsolète. Vous pouvez la supprimer.
Connaissez-vous la différence entre le moteur MyIsam et le moteur InnoDB ? MyIsam n'a pas une structure SGBDR mais plutôt de type séquentielle indexée. Question performance, ce n'est pas ce qu'il y a de mieux. Si vous avez une base de quelques milliers de lignes, vous pouvez vous en contenter. Je préfère InnoDB car on peut mieux gérer les performances et les reprises. Mais n'empêche que ni l'un ni l'autre n'ont la qualité et la performance du DB2 gros système que je connais.
> A un moment tu parles de la configuration spécifique innoDB et j'ai vu que la ligne suivante : > =============== > f:/Wamp/bin/mysql/mysql5.6.23/data/ibdata/ > =============== > J'ai vérifié sur mon installation, je n'ai pas de dossier ibdata, mais j'ai un fichier ibdata1. > Dois ajouter des choses dans le my.ini (voir dans mon premier message).
Le didacticiel que je propose sur ibdata1 est une méthode pour récréer, sans problème, ce fichier lorsque celui-ci a été soit corrompu, soit détruit. Chez moi, j'ai isolé dans un répertoire "/data/ibdata" tout ce qui concerne le paramétrage d'InnoDB.
> Bonne nouvelle, j'ai trouvé d'où le blocage venait. Je ne sais pas pourquoi, j'avais défini un utilisateur > mysql pour la base qui ne fonctionnait pas et qui était définie en innoDB. Pas très clair vos explications. En quoi un nouvel utilisateur défini dans l'onglet "utilisateurs" de mysql a un quelconque rapport avec InnoDB ? En définissant un utilisateur, vous lui attribuer des privilèges comme par exemple celui d'exécuter des requêtes (select) ou faire des insertions (insert) ... De même, vous l'autorisez à accéder à certaines bases de données mais pas toutes.
> et dans la section [mysqld] les lignes suivantes : > ================ > collation-server = utf8_general_ci > init-connect ='SET NAMES utf8' > character-set-server = utf8 > ================
Ce n'est pas une erreur mais vous vous limitez à ce jeu de caractères. Sachez que ce jeu de caractères utilise une représentation pouvant aller jusqu'à quatre octets d'occupations mémoire. Si comme moi, vous utilisez que l'anglais et le français, il vaut mieux définir le jeu de caractères "LATIN1".
@+
---------------------------------------------------------------------------------------------------------------------------------------------------------------- Mon site : [www.jcz.fr]