Step 1 安装:
安装:yum -y install mariadb*
启动:systemctl start mariadb.service
可用:systemctl enable mariadb.service
进入:mysql
退出:exit
Step 2 密码:
由于首次安装没有设置密码,再次进入数据库的时候会报以下错误,
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Enter current password for root (enter for none):
查资料有人推荐使用
mysqladmin -u root password 'root'
1.关闭maria
# service mysqld stop
2.屏蔽权限
# mysqld_safe --skip-grant-table
屏幕出现: Starting demo from .....
3.新开终端输入
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> \q
4.关闭2步中的终端
方法二:
1.关闭maria
# service mysqld stop
2.屏蔽权限
# mysqld_safe --skip-grant-table
屏幕出现: Starting demo from .....
3.新开起一个终端输入
# mysql -u root mysql
mysql> delete from user where USER='';
mysql> FLUSH PRIVILEGES;
mysql> \q
Enter password:
Step 3 C++连接数据库:
由于安装数据库是为了游戏服务器服务,我们的服务器是用C++搭建的,这时候就需要C++连接数据库进行数据读取。
包含数据库头文件:#include "mysql.h"
创建数据库底层接口封装类:class CDBBase {};
运行代码......
报错:头文件mysql.h不存在!
原因:如果想包含数据库头文件不加路径需要把默认头文件移到CentOS默认路径下
解决:
方法一:直接包含mysql头文件位置:#include "/usr/include/mysql/mysql.h"
方法二:把mysql头文件移动到默认文件夹 // TODO:
运行代码......
报错:undefined reference to 'mysql_init'
原因:编译器找不到mysql_init等数据库函数的具体实现,虽然我们正确的包含了头文件,但是函数实现所在的库文件还无法连接。
解决:在makefile文件末尾加上:-L/usr/lib64/mysql -lmysqlclient
Step 4 C++读取数据:
MariaDB(Mysql)数据提供的C接口默认将数据存到了一个char*型的二维数组里面。
所以我们在程序中定义了下面的结构体用以接收数据:
#define RESULT_ROW_MAX10// 查询结果行数最大值
#define RESULT_COLUME_MAX 10// 查询结果列数最大值
struct STQueryResult // 存储通用的返回结果
{
STQueryResult()
{
iRow = 0;
iColume = 0;
memset(sResult, 0, RESULT_ROW_MAX*RESULT_COLUME_MAX);
}
int iRow;
int iColume;
char *sResult[RESULT_ROW_MAX][RESULT_COLUME_MAX];
};
二维数组的目的是为了存储多条数据结果。
如果数据某个结果为int,需要按一下方式转码读取:
char* pcID = stResult.sResult[0][0];
for ( int i = 0; i < strlen(pcID); i++ )
_stLogin.iID = _stLogin.iID*10 + ( pcID[i]-'0' )