这里引用一个老哥的博客,亲自试过,流程清晰,我就不做过多赘述了。
https://www.cnblogs.com/jj123/p/15740668.html
2.使用外网连接mysql这里奉献一下我的navicat安装包,大家可以去下载一下
链接:https://pan.baidu.com/s/1G8x4pwgzGf1zI2xorRR9Rw
提取码:s5pj
如果无法连接,可以打开3306端口
//打开防火墙
systemctl start firewalld
//开放指定端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
//重新加载
firewall-cmd --reload
如果还是没有办法连接,可能服务器有两道防火墙,可以查看服务器的控制台,手动开放端口
4.连接成功后,用navicat连接数据库创建test库
创建user_data表
5.全都搞定之后写一个c++例子验证一下
c++代码:这部分代码是接着之前protobuf的代码写的,如果编译不过,可以看一下上一篇文章
#include
#include "/usr/local/mysql/include/mysql.h"
#include "../proto/src/User.pb.h"
MYSQL g_mysql;
int main(int argc, char** argv)
{
User user1;
user1.set_id(100);
user1.set_nickname("窑下村吴彦祖");
std::string str = "";
user1.SerializeToString(&str);
User user2;
user2.ParseFromString(str);
std::cout << user2.id() << " " << user2.nickname() << std::endl;
std::string host = "127.0.0.1";
std::string user = "root";
std::string pwd = "123456";
std::string db = "test";
if (!mysql_init(&g_mysql)) {
std::cout << "mysql_init err" << std::endl;
return 0;
}
if (!mysql_real_connect(&g_mysql, host.c_str(), user.c_str(), pwd.c_str(), db.c_str(), 0, NULL, CLIENT_MULTI_STATEMENTS)) {
std::cout << "mysql_real_connect err" << std::endl;
return 0;
}
//设置超时时间
int value = 2;
mysql_options(&g_mysql, MYSQL_OPT_READ_TIMEOUT, &value);
mysql_options(&g_mysql, MYSQL_SET_CHARSET_NAME, "utf8");
//insert
char sql[128];
snprintf(sql, sizeof(sql), "insert into user_data(user_id, user_data) value (%d, \'%s\');", user2.id(), str.c_str());
if (mysql_real_query(&g_mysql,sql,strlen(sql)) != 0) {
std::cout << "sql err! sql=" << sql << std::endl;
// return false;
}
//select
char sql2[] = "select * from user_data;";
if (mysql_real_query(&g_mysql,sql2,strlen(sql2)) != 0) {
std::cout << "sql err! sql=" << sql2 << std::endl;
return false;
}
User user3;
auto res = mysql_store_result(&g_mysql);
auto num = mysql_num_rows(res);
for (int i = 0; i < num; i++) {
auto row = mysql_fetch_row(res);
std::cout << "user_id = " << row[0] << " user_data = " << row[1] << std::endl;
user3.ParseFromString(row[1]);
}
std::cout << "user3.id() = " << user3.id() <<"user3.nick_name() = " << user3.nickname() << std::endl;
return 0;
}
Makefile部分:
cc=g++
cc_flags=-std=c++11 \
-I/usr/local/mysql/include \
ln_flags=-L/usr/local/lib -lprotobuf \
-L/usr/local/mysql/lib -lmysqlclient \
-lpthread \
-lm \
-ldl \
obj=main.o \
../proto/src/User.pb.o \
target=process
$(target) : $(obj)
$(cc) $(ln_flags) $(obj) -o $(target)
%.o : %.cpp
$(cc) $(cc_flags) -c $< -o $@
%.o: %.cc
$(cc) $(cc_flags) -c $< -o $@
clean:
rm -f $(obj) $(target)
run.sh部分
ulimit -c 100000
export LD_LIBRARY_PATH=/usr/local/lib/:/usr/local/mysql/lib:
./process
执行make命令
用sh run.sh运行一下吧
6.小结
数据库对于一个后端开发来说非常重要,可以多花一些心思研究一下数据库。
我最早安装部署的时候,走了不少弯路,浪费了一些时间,其实这些工作主要都是运维工程师去做的,并不需要程序员过度关心,所以想写一篇文章减少初学者走的弯路。
代码上还有很多不足之处,并没有花太多心思去修改,主要是想把linux下用c++ *** 作mysql数据库的关键流程描述清楚,希望能给同学们带来一点帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)