ubuntu18.04中使用mysql_real_connect与MySQL数据库引擎建立连接

数显声明一点,我是在本地与MySQL数据库引擎建立连接,而非远程。

从昨天晚上到今天早上,一直在和这个函数mysql_real_connect较劲,因为在程序中使用这个函数总是出错,返回值一直是NULL。找了好多教程,大多数都是对这个函数的介绍和简单的使用,很少有这个函数出错的解决。在尝试了许多操作之后,终于也能够成功使用这个函数了。由于所做的操作较多(其实也不多),我也不知道哪个是必须,哪个不是必须,但是既然成功了,就把这些操作都写出来。

首先对这个函数的介绍,可以参考这个链接:mysql_real_connect()_MySQL C API函数

很多博主对这个函数的讲解几乎都和这个一样,这个网址里面也有对其他mysql API的讲解,是一个很好的学习网站。

先给出一个测试代码,起名为mymysql.cpp。这个代码也是从网上拷贝的,具体从哪也忘了,反正就是mysql_real_connect函数的简单使用,目的就是测试能不能通过该函数与MySQL数据库引擎建立连接。

#include <iostream>
#include <mysql/mysql.h>
#include <string>

#include <assert.h>

int main()
{
    MYSQL *ms_conn = mysql_init(NULL);
    if (ms_conn == NULL)
    {
        std::cout << "Error: mysql_init failed." << std::endl;
        return 0;
    }
    std::cout << "Info: mysql_init successful." << std::endl;

    MYSQL *ms_res = NULL;
    ms_res = mysql_real_connect(ms_conn, "localhost", "root", "111111",
            "dsf", 3306, NULL, CLIENT_FOUND_ROWS);
    if (ms_res == NULL)
    {
        std::cout << "Error: connect mysql failed: " << mysql_error(ms_conn) << std::endl;
        mysql_close(ms_conn), ms_conn = NULL;
        return 0;
    }
    std::cout << "Info: mysql connect successful." << std::endl;
	
    // ... // 其他操作

    // 使用完释放系统资源
    mysql_close(ms_conn), ms_conn = NULL;
    return 0;
}

编译:

g++ -o mymysql mymysql.cpp -I /usr/include/mysql/ -lmysqlclient

如果执行./mymysql后发现能够与MySQL数据库引擎建立连接,那下面的操作就不用做了。

如果出现

Error: connect mysql failed: Access denied for user 'root'@'localhost'

这个错误,说明需要执行一些操作。

1.打开mysql的配置文件

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

(1)里面的  bind-address            = 127.0.0.1 这一行是不能注释的(默认就是不注释),注释了代表要远程登录,不注释就是本地访问。

(2)在末尾添加

skip-grant-tables

此行代码的作用是登录mysql不用输入root密码,这一步可能就是mysql_real_connect成功执行的关键。

2.使用命令进入mysql中,给权限

GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY "111111";

其中root@localhoslocalhost就是本地访问;第二个'123456'为你给新增权限用户设置的密码。

如果第一步执行后,能够成功使用mysql_real_connect函数,第二步就不用做了。

3.重启mysql

service mysql restart

最后结果:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值