使用c 连接mysql5.7_linux C API连接并查询mysql5.7.9

开发环境:

ubuntu16.04

mysql5.7.9

原生C API

VIM

配置远程连接

配置mysql允许远程连接的方法默认情况下,mysql只允许本地登录,如果要开启远程连接,则需要修改/etc/mysql/my.conf文件。

一、修改/etc/mysql/my.conf

找到bind-address = 127.0.0.1这一行

改为bind-address = 0.0.0.0即可

二、为需要远程登录的用户赋予权限

1、新建用户远程连接mysql数据库

grant all on *.* to [email protected]%‘ identified by ‘123456‘ with grant option;? flush privileges;

允许任何ip地址(%表示允许任何ip地址)的电脑用admin帐户和密码(123456)来访问这个mysql server。注意admin账户不一定要存在。

2、支持root用户允许远程连接mysql数据库

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

flush privileges;

修改完后重启mysql服务

sudo systemctl restart mysqld

演示连接demo

编译运行

查找依赖的头文件

mysql_config --include

建立.so库的软连接,供可执行文件调用

sudo ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib/

编译

gcc -o test_connect test_connect.c -I/usr/local/mysql/include -L/usr/local/mysql/lib/ -lmysqlclient

结果

[email protected]:~/study/mysql$ ./test_mysql

共9个记录,每个记录3字段

id name phone

1 aaa 7774090

2 abc 7774099

3 acb 7794099

4 bcb 8794099

5 bcc 8894099

6 qwe 8494099

7 azq 6544099

8 njhu 8544099

9 ert 1544099

出现的问题:

fatal error: mysql/plugin_auth_common.h

查找是有这个问题,但是编译失败,证明是编译时指定的mysql/include路径错误了

[email protected]:~/study/mysql$ sudo find / -name plugin_auth_common.h

/usr/local/mysql-5.7.9-linux-glibc2.5-x86_64/include/mysql/plugin_auth_common.h

/usr/local/mysql-5.6.27-linux-glibc2.5-x86_64/include/mysql/plugin_auth_common.h

/usr/include/mysql/mysql/plugin_auth_common.h

一开始我用的是第三个路径,这个路径是错的,后来用了第一个路径就ok了。

出现一大叠错误,看起来就是连接mysqlclient库失败了。

失败的原因肯定是指定的路径有问题,

[email protected]:~/study/mysql$ sudo find / -name libmysqlclient.so

/usr/local/mysql-5.7.9-linux-glibc2.5-x86_64/lib/libmysqlclient.so

/usr/local/mysql-5.6.27-linux-glibc2.5-x86_64/lib/libmysqlclient.so

/usr/lib64/mysql/libmysqlclient.so

最初我用的路径是/usr/lib64/mysql/,后来选用/usr/local/mysql-5.7.9-linux-glibc2.5-x86_64/lib/就编译ok了。

执行可执行文件失败。

[email protected]:~/study/mysql$ ./test_connect

./test_connect: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory

编译时可以找到动态库,而执行时木有,是因为我的mysql的lib是单独安装,没有加进去环境变量中。两种解决办法:

把/usr/local/mysql-5.7.9-linux-glibc2.5-x86_64/lib/加入环境变量中

把/usr/local/mysql-5.7.9-linux-glibc2.5-x86_64/lib/libmysqlclient.so.20拷贝到/usr/lib中。因为这个路径是可执行文件去自动查找动态库的路径。

原文:https://www.cnblogs.com/liangjf/p/10664881.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值