linux C API鏈接並查詢mysql5.7.9

開發環境:mysql

  • ubuntu16.04
  • mysql5.7.9
  • 原生C API
  • VIM

配置遠程鏈接

配置mysql容許遠程鏈接的方法默認狀況下,mysql只容許本地登陸,若是要開啓遠程鏈接,則須要修改/etc/mysql/my.conf文件。linux

1、修改/etc/mysql/my.conf
找到bind-address = 127.0.0.1這一行
改成bind-address = 0.0.0.0便可git

2、爲須要遠程登陸的用戶賦予權限
一、新建用戶遠程鏈接mysql數據庫
grant all on *.* to admin@'%' identified by '123456' with grant option;  flush privileges;
容許任何ip地址(%表示容許任何ip地址)的電腦用admin賬戶和密碼(123456)來訪問這個mysql server。注意admin帳戶不必定要存在。github

二、支持root用戶容許遠程鏈接mysql數據庫sql

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

修改完後重啓mysql服務

sudo systemctl restart mysqld數據庫

演示鏈接demo

github源碼地址ubuntu

編譯運行

  • 查找依賴的頭文件
    mysql_config --includeide

  • 創建.so庫的軟鏈接,供可執行文件調用
    sudo ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib/rest

  • 編譯
    gcc -o test_mysql test_mysql.c -I/usr/local/mysql/include -L/usr/local/mysql/lib/ -lmysqlclientcode

  • 結果
liangjf@ubuntu:~/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路徑錯誤了

liangjf@ubuntu:~/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庫失敗了。
失敗的緣由確定是指定的路徑有問題,

liangjf@ubuntu:~/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了。

執行可執行文件失敗。

liangjf@ubuntu:~/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中。由於這個路徑是可執行文件去自動查找動態庫的路徑。
相關文章
相關標籤/搜索