Forum Programmation.SQL La SQL se moque de moi ><

Posté par  .
Étiquettes : aucune
0
7
déc.
2005
Salut à tous,

Pour mon problème de compilation, j'ai réussi. Pour les curieux, sachez que ça venait du fait que le makefiles du programme ne trouvait pas les library sql, et donc en modifiant, l'emplacement où les chercher, le problème a été résolu ^_^"

Mais, maintenant, je me trouve fâce à un second problème. Lorsque je suis en shell sur le Linux, et que je tape "mysql", j'accède sans souci aux databases. Par contre, que ça soit l'application en local, ou moi à distance, nous ne pouvons pas, on a une erreur du type:
Can't connect to MySQL server on ....

Je pense que ni l'application ni moi, ne nous connectons sur le bon port pour accèder à la sql ou qu'une application Mysql n'est pas lancé (d'ailleurs, il n'est impossible de lancer mysqld, en telnet, le port 3306 n'est pas joignable). Mais, je ne sais ni vérifier (en shell) sur quel port, le Mysql est ouvert, ni comment le corriger si nécessaire.

Toutes propositions est bon à prendre ^_^" Merci de votre aide
  • # re

    Posté par  . Évalué à 3.

    Si tu n'as pas toucher à la conf de mysql, le serveur doit tourner sur le bon port. Par contre tu devrais vérifier que le serveur est bien lancé :

    ps aux | grep mysqld | grep -v grep

    Si ya une réponse c'est bon sinon non :)
    • [^] # Re: re

      Posté par  . Évalué à 1.

      Merci de ton aide, et voici ce que j'obtiens:


      [root@localhost ~]# ps aux | grep mysqld | grep -v grep
      root 4742 0.0 0.1 2192 1144 ? S Dec06 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-networking --pid-file=/var/run/mysqld/mysqld.pid
      mysql 4778 0.0 2.7 108496 17836 ? Sl Dec06 0:17 /usr/sbin/mysqld --defaults-file=/etc/my.cnf --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --socket=/var/lib/mysql/mysql.sock --skip-networking

      En faisant des tests, j'ai constaté que mysqld refusé de se lancer, et me donne l'erreur suivante:
      [root@localhost ~]# mysqld
      051208 0:03:30 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!

      051208 0:03:30 [ERROR] Aborting

      051208 0:03:30 [Note] mysqld: Shutdown complete

      Je pense que c'est lié au problème, mais je ne sais pas comment le résoudre.

      Merci pour tous.
      • [^] # Re: re

        Posté par  . Évalué à 2.

        Relele Chris,

        Je viens de trouver quelque chose: (quelqu'un qui avait le meme probleme que toi au depart a qui on a dit)


        As-tu créé la base de données système ?

        Cettte base de données s'appelle mysql, elle contient différentes tables permettant de définir les privilèges d'accès aux données...

        Tu peux toujours vérifier en allant jeter un coup d'oeil dans le répertoire datadir de ton fichier de configuration my.cnf. Tu dois y trouver un sous répertoire mysql contenant différents fichiers de données et d'index.

        Si cela n'est pas le cas alors tu dois exécuter le script mysql_install_db qui va te créer ces différents fichiers.


        La personne a alors repondu ca


        J'ai réalisé ce que tu m'as proposé.

        #mysql_install_db
        Installing all prepared tables
        030719 8:10:01 /usr/sbin/mysqld: Shutdown Complete


        To start mysqld at boot time you have to copy support-files/mysql.server
        to the right place for your system

        PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
        This is done with:
        /usr/bin/mysqladmin -u root password 'new-password'
        /usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'
        See the manual for more instructions.

        NOTE: If you are upgrading from a MySQL <= 3.22.10 you should run
        the /usr/bin/mysql_fix_privilege_tables. Otherwise you will not be
        able to use the new GRANT command!

        You can start the MySQL daemon with:
        cd / ; /usr/bin/mysqld_safe &

        You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
        cd sql-bench ; perl run-all-tests

        Please report any problems with the /usr/bin/mysqlbug script!

        The latest information about MySQL is available on the web at
        http://www.mysql.com
        Support MySQL by buying support/licenses at https://order.mysql.com

        ************************************

        #service mysql start
        Starting MySQL Server [ OK ]


        ********************************************
        # mysql
        ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

        Même problème, mysqld contrairement à ce que indique mysql start [OK], ne fonctionne pas !



        Un autre lui a donc repondu


        Je viens d'avoir le même souci
        Apparemment, le problème provenait d'une ancienne installation : une ancienne database mysql existait déjà mais les droits n'étaient pas corrects.
        Du coup, la table des privilèges ne pouvait pas être lue et le daemon s'arrêtait aussitôt.
        ("Can't open privilege tables: Can't find file: './mysql/host.frm' ")

        AMHA, on devrait pouvoir s'en sortir en positionnant les permissions correctement.
        Mais perso, j'ai utilisé une solution plus radicale pour repartir sur des bases saines :

        En fait, c'est la solution proposée par PinPin, avec un petite astuce
        - supprimer les tables de la db mysql (astuce -> nécessaire, sinon l'étape suivante n'a aucun effet !)
        Sur gentoo, elles se trouvent dans /var/lib/mysql/mysql/
        Sur les autres distribs, se reporter à la variable datadir dans le fichier de config my.cnf

        - régénérer les tables système avec l'utilitaire mysql_install_db



        Et ca a marche ....


        Cela fonctionne maintenant !

        J'ai désinstallé mysql 4.0.11 , supprimé /var/lib/mysql

        Installé la version 4.0.13. (ensuite, plus de problème !)



        J espere qu avec ca , tout marchera =)
        • [^] # Re: re

          Posté par  . Évalué à 1.

          Re Selasse,

          Merci pour tes propositions, mais je ne me sens pas concerné, car mes databases sont OK, et ma table des droits aussi.

          mysql> show databases;
          +-----------+
          | Database |
          +-----------+
          | mysql |
          | newsgeden |
          | test |
          | tmp |
          +-----------+
          4 rows in set (0.01 sec)

          mysql> select Host, User from user;
          +---------------+-----------+
          | Host | User |
          +---------------+-----------+
          | MonIP | ChrisEDEN |
          | localhost | |
          | localhost | ChrisEDEN |
          | localhost | root |
          +---------------+-----------+
          4 rows in set (0.00 sec)

          Par contre, je serai bien tenté de désinstallé Mysql, pour le résinstaller ou réinstaller une version plus récente, mais je ne sais pas comment faire :-s
          • [^] # Re: re

            Posté par  . Évalué à 1.

            Bon alors deja si tu veux supprimer tes packages, tu utilises la cmd rpm avec l option -e:

            rpm -e toto-version

            Et voila comment reinstaller, j'espere que tu as bien urpmi car il est cense tout installer tout seul.
            Essaie pour voir.


            Depuis un certain nombre de versions de Mandrake, il est possible de tout faire fonctionner sans retoucher le moindre fichier de configuration, simplement en installant les rpm !

            L'installation de mysql est elle très simple. Les packages suivants sont nécessaires (ils devraient avoir été installés par défaut, en cas de besoin les installer par la suite):

            * mysql-common
            * mysql-client
            * mysql

            MySQL-client n'est pas indispensable. Il s'agit en fait de la partie client de l'ensemble client-serveur. Ce client permet toutefois (attention, en mode texte c'est plutôt spartiate !) de faire quelques requêtes au serveur.

            '# urpmi mysql
            Un des paquetages suivants est nécessaire :
            1- MySQL-4.0.18-1.1.100mdk.i586
            2- MySQL-Max-4.0.18-1.1.100mdk.i586
            Que choisissez-vous ? (1-2)1
            Pour satisfaire les dépendances, les paquetages suivants vont être installés (18 Mo):
            MySQL-4.0.18-1.1.100mdk.i586
            MySQL-client-4.0.18-1.1.100mdk.i586
            MySQL-common-4.0.18-1.1.100mdk.i586
            libmysql12-4.0.18-1.1.100mdk.i586
            perl-Mysql-1.22_19-9mdk.i586
            Est-ce correct ? (O/n)
            Préparation... ##################################################
            1:libmysql12 ##################################################
            2:MySQL-client ##################################################
            3:perl-Mysql ##################################################
            4:MySQL-common ##################################################
            5:MySQL ##################################################
            040512 12:40:46 /usr/sbin/mysqld: Shutdown Complete
            # service mysql start
            Lancement du serveur MySQL [ OK ]

            En principe après l'installation de mysql vous devriez disposer d'un serveur MySQL opérationnel (et en marche).
            Pour le vérifier tapez ps -ax | grep mysql. Vous devriez voir s'afficher quelques lignes relatives à autant de serveurs en attente de requêtes. Si tel n'est pas le cas tapez (comme root) "safe_mysql &" dans une fenètre texte. Cette commande devrait démarrer le serveur MySQL.

            Attention : l'installation par défaut utilise root comme super administrateur du serveur et le mot de passe root. Faites donc un essai de fonctionnement du serveur MySQL en utilisant simplement le client MySQL en mode texte.

            # mysql -p
            Enter password:
            Welcome to the MySQL monitor. Commands end with ; or \g.
            Your MySQL connection id is 4 to server version: 4.0.18-log

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

            mysql>

            Tapez alors quit à l'invite mysql et vous voilà sorti.
            • [^] # Re: re

              Posté par  . Évalué à 1.

              Si tu veux juste update avec la cmd rpm:

              rpm -Uvh toto.rpm
              • [^] # Re: re

                Posté par  . Évalué à 1.

                L'installation a été faite en suivant les instructions de ce lien:
                http://www.france-fps.com/article.php3?id_article=593

                Et tout s'est passé comme indiqué, sauf qu'il y a 2 histoires de duplicate key juste avant la fin de l'installation.

                Et pour tes instructions, je ne sais pas comment trouver la rpm à mettre à jour, ou pour désinstaller.
      • [^] # Re: re

        Posté par  . Évalué à 1.

        --socket=/var/lib/mysql/mysql.sock --skip-networking

        => est ce que mysqld ecoute bien sur le 3306?

        il me semble par defaut mysql sur poste local utilise le socket unix ( le mysql.sock) plutot que le tcp.ip....
        • [^] # Re: re

          Posté par  . Évalué à 1.

          Non, justement, j'ai l'impression qu'il n'y a rien de lancer sur le port 3306, car le telnet me dit qu'aucune connexion n'est possible.
      • [^] # Re: re

        Posté par  . Évalué à 1.


        safe_mysqld est la méthode recommandée pour démarrer un démon mysqld sous Unix.
        Le script safe_mysqld a été écrit pour qu'il soit capable de démarrer le serveur qui a été installé à partir des sources ou de la version binaire, même si l'installation de MySQL est légèrement exotique.


        Bon alors je sais plus si ton mysql est dans usr/local ou nan, donc modifie la commande en fonction et verifie si cest mysqld_safe ou safe_mysqld, ca a l air d etre different en fonction du systeme.
        Essaie ca:

        /usr/local/bin/mysqld_safe --user=root

        Bien sur a deconseiller. Vaut mieux creer un user mysql et faire:

        /usr/local/bin/safe_mysqld --user=mysql
        • [^] # Re: re

          Posté par  . Évalué à 1.

          Bien qu'il y est un dossier mysql dans /usr/local/

          Le dossier /usr/local/bin/ est un dossier complètement vide.

          Du coup, je ne trouve rien au sujet d'un éventuel safe_mysqld ou mysqld_safe.

          Encore merci pour votre aide (crois les doigts pour arriver à une solution)
          • [^] # Re: re

            Posté par  . Évalué à 1.

            Regarde dans ton usr/bin si tu le trouves, c est le meme principe que pour l'install.

            Mais pour faire simple, fais un:

            $ find -name *mysqld*

            et regarde s'il trouve le safe_mysqld.
            T'es oblige de l'avoir >.<
            • [^] # Re: re

              Posté par  . Évalué à 1.

              Oui, il est bel et bien dans usr/bin, et voilà, ce qui se passe:

              [root@localhost bin]# mysqld_safe
              A mysqld process already exists

              Une idée? Moi, aucune :-s
              • [^] # Re: re

                Posté par  . Évalué à 1.

                La cmd c est:

                $usr/local/bin/mysqld_safe --user=root

                N'oublie pas le --user c est important.
                Sinon s il met ca c est que c est deja lance.
                Alors soit tu t y connais un peu, tu tapes ps et tu kill le pid du mysqld lancé, soit plus simple tu reboot la machine.

                Tiens moi au courant !
                • [^] # Re: re

                  Posté par  . Évalué à 1.

                  Essaies ca avant de reboot si t arrives pas a kill le pid.

                  $mysqladmin shutdown
                  • [^] # Re: re

                    Posté par  . Évalué à 1.

                    J'ai tout killé et excécuté la commande indiqué et pour l'instant tout semble bien vouloir marcher, mille merci Selasse, je ne te remercierai jamais assez de ton aide :x

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.