⚠️ Forum Maintenance: Feb 6th, 8am - 14pm (UTC+2)

Selecting data from mysql using qt?

  • lyuts: yes it should be easier...

    doforumda: i misstyped the command, try this:
    sudo gedit /opt/lampp/etc/my.cnf

  • lyut: your command sudo find /opt/lampp -name my.cnf -type f | xargs grep -n socket actually displays this. above one was wrong because i use the wrong command

    root@zafar-laptop:/# sudo find /opt/lampp -name my.cnf -type f | xargs grep -n socket
    21:socket = /opt/lampp/var/mysql/mysql.sock
    28:socket = /opt/lampp/var/mysql/mysql.sock
    44:# All interaction with mysqld must be made via Unix sockets or named pipes.

  • lyut: sudo gedit /opt/lampp/etc/my.cnf this command does open my.cnf and it also have

    socket = /opt/lampp/var/mysql/mysql.sock

    in two lines means there are two entries for socket in my.cnf

  • I think this is rather rough solution, but worth trying:

    @sudo mkdir -p /var/run/mysqld
    sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock@

  • so what next i think here the path for socket is correct because i have one mysql.sock file in that exactly same directory

  • you mean i should create a dir at opt/lampp/var/run/mysqld ????

  • millions of thanks to both of you TYUT and Dii. it works. one more question can please tell me what does this command do
    sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock

    and also if i want to install everything from scratch then once i have to use this command to make it work?

  • doforumda: the problem was ~small... the Qt mysql driver looks for the socket file (the connection to mysql) in the default location (var/run/mysqld/mysqld.sock), though you had it somewhere else, because your lampp package changed the path.

    The "ln -s" made a symbolic link to that, so the /var/run/mysqld/mysqld.sock point to the /opt/lampp/var/mysql/mysql.sock. This way Qt can find it. If you do a new installation, with lampp, you should do it again, if you use the regular mysql package, probably, you won't face this problem.

    lyuts: great work, we deserve these points :)

  • I think our solution is rough enough, but at least it works. I think the best solution is to set the socket parameter in my.cnf to /var/run/mysqld/mysqld.sock. But it is up to you doforumda.

    bq. millions of thanks to both of you TYUT and Dii.

    Hey, I'm lyuts, not TYUT :)

    doforumda and ¤ Dii ¤, my congratulations, we did it.

  • lyuts: I think that's the best solution, if he is changing the socket parameter of mysql probably he will screw up some other components in his LAMPP configuration. I don't recommend that.

  • I don't know what's going on within LAMPP and you might be right. It's just creating this symlink looks more like a workaround.

  • [quote author="lyuts" date="1286886793"]I think our solution is rough enough, but at least it works. I think the best solution is to set the socket parameter in my.cnf to /var/run/mysqld/mysqld.sock. But it is up to you doforumda.

    bq. millions of thanks to both of you TYUT and Dii.

    Hey, I'm lyuts, not TYUT :)

    doforumda and ¤ Dii ¤, my congratulations, we did it.[/quote]

    sorry I wrote your name wrong

  • with 131 replies, I think this must be the longest threaded discussion in devnet forum so far !!!
    congrats to you guys for sticking till the end and solving it :)

  • hi
    i have got the same problem again after restarting my system.
    when i execute code it again fails to connect. it returns this problem.
    Starting /home/zafar/c++/insertquery-build-desktop/insertquery...
    DB could be opened QSqlError(2002, "QMYSQL: Unable to connect", "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
    /home/zafar/c++/insertquery-build-desktop/insertquery exited with code 0

    i ran this command
    sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock
    but this displays this error
    ln: creating symbolic link `/var/run/mysqld/mysqld.sock': No such file or directory
    i have already created this directory while lyut and Dii were solving this problem. at that time when i ran this command it worked really perfect but now it is not working.
    Please help

  • Welcome back :)

    Let's check to existence of those sock files...

    sudo ls -l /opt/lampp/var/mysql/mysql.sock

    sudo ls -l /var/run/mysqld/mysqld.sock

  • well mysql.sock is there
    but there is no such thing in mysqld. i mean there is no mysqld.sock file in mysqld folder

  • thank god your are here

  • i am waiting for help Dii

  • hmmm pretty strange, does /var/run/mysqld exits? if you try

    sudo mkdir /var/run/mysqld

    and then the

    sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock

    Though restart should not delete the directory, but I can't imagine anything else at the moment.

  • it works now thanks again. any clue what happened to this file after restarting.

  • Hmmm... /var/run will be clear on each start, so you have to do a directory and the symlink again. You can do it with a script.

    Or get rid of the whole LAMPP setup and use the regular mysql package. Maybe it's possible to run two mysql parallel, but I don't recommend that, too confusing.

  • If the problems after restart persists, then I think it will be time to change socket parameter in my.cnf. configs are created for changing settings and I don't think it will harm any component in lampp, because if it would then 1) a special note must have been written somewhere and 2) it makes no sense to allow user to change this setting if it breaks lampp.

  • I don't know LAMPP, but I have seen similar packages, where the packager wanted to keep everything in /opt and for that reason all settings and installation directories were changed. It might be, that the apache or php is configured, to look for the socket in the /opt/lampp.

    However, I looked around in the documentation, and I found setConnectOptions(..) which could be a good workaround. I think it should work like this:


    The only problem is, if you move the program to a different system, it won't work again, so you should make some lookups in the code, if the above is correct or not in the actual system (usually it won't be).

    If this problem heads up more often (the distribution packagers change the socket location for fun), maybe it's good to implement a socket search function somewhere in QSqlDatabase::open().

  • thanks for that exaplanation

  • I was reading last posts and wondered, what if doforumda changes the way of connecting to mysql server. I just noticed that you can connect via tcp or socket, and here socket, as I understand is unix domain socket. Connecting via tcp might eliminate the need for looking sock files.

    UPD: just a little bit more words. Unix domain sockets limit communicating process to be within the same OS, which is not true in general. At least I think the original application is not for local usage only.

  • Yes, it must be possible to connect to, though it will not work, as all mysql default configuration comes with "--skip-networking" option, for good reason. You don't want your sql server to be reachable directly from the outside. Ofcourse you can turn this off, but probably that's not the way.

    I still find the above with the connect options better, like this:

    if (!db.open()) {
    db.setConnectOptions(); // clears the connect option string
    if (!db.open()) ... some error handling@

  • Isn't this limiting an application to have mysql server on the same machine? Moving an application will make doforumda put mysql server on that machine too.

  • Yes, that's true. I don't know doforumda's goal with this project, without any hurt, he need probably some more practice before he goes any further ;)

  • Yep, I will probably agree with you here. I hope this doesn't look like we are offending doforumda, because we don't.

  • This post is deleted!

Log in to reply