Embedded MySQL server



  • Hey guy, does somebody have experience in setting up an embedded MySQL server with Qt and can show some code how its done?



  • As far as I understood you just link to the libmysqld and start it by calling mysql_library_init() (end it before application exit with mysql_library_end()). For every thread that likes to access any mysql-function (so any QSql* function) call the corresponding thread init mysql_thread_init() (and mysql_thread_end()).

    The rest should behave as it has been with a default mysql server.



  • I tried this code from the MySQL reference but it crashes when it comes to the point mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client");. Does somebody has a working exmaple for a embedded server?

    #include <mysql.h>
    
    static char *server_options[] = {"mysql_test", "--defaults-file=my.ini", NULL};
    int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;
    static char *server_groups[] = {"libmysqld_server", "libmysqld_client", NULL};
    
    int main(int argc, char *argv[])
    {
        QSqlDatabase mydb;
        MYSQL *mysql;
    
        mysql_library_init(num_elements, server_options, server_groups);
        mysql = mysql_init(NULL);
        mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client");
        mysql_options(mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL);
    
        mysql_real_connect(mysql, NULL, NULL, NULL, "database1", 0, NULL, 0);
    
        mydb = QSqlDatabase::addDatabase("QMYSQL", "con1");
    
        mydb.setDatabaseName("database1");
    
        if(!mydb.open())
        {
            qDebug() << mydb.lastError();
        }
    
        mysql_library_end();
        return 0;
    }
    


  • Is really nobody out there who got this working?


  • Qt Champions 2016

    Hi

    Seems that not that many try the MYSQL embedded.
    Even on
    http://stackoverflow.com/questions/16990142/qt-c-embedded-mysql
    No ones answers.

    And you did link with the libmysqld ?



  • Hi,

    Yes I did. As I figured out using the embedded server doesn't make sense anyway in my application as it is multithreaded and the embedded server supports only one connection at a time. I don't mark it as solved since I am never the less interested how this works out.


  • Qt Champions 2016

    @SebastianS
    Ok.
    Strange it would just crash then.
    mysql_init did return "im happy" etc?

    Well multi threaded could still work using a semaphore to control write access but
    if you need concurrent access its of no use.

    Sadly I think the question will just slowly drift to other pages and no one will ever see it again.


  • Lifetime Qt Champion

    Hi,

    AFAIK, you don't have to fiddle with raw MySQL c++ calls. You should be able to use Qt the exact same way as you would with a classic client server setup



  • Note on https://dev.mysql.com/doc/refman/5.7/en/libmysqld.html says: “The libmysqld embedded server library is deprecated as of MySQL 5.7.17 and will be removed in MySQL 8.0.“


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.