CentOS7 安装配置 MariaDB

来源:互联网 发布:信捷plc 编程软件3.5 编辑:程序博客网 时间:2024/04/30 05:56


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
4.关闭2步中的终端

方法一完美的解决了问题,然后登陆服务器
[root@localhost ~]# mysql -uroot -p  
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' )

其中*10是因为int型中的每一位占char数组的一个位置,按char位取出之后只是int数据个十百千位的数字。
其中-'0'是因为每一个int个十百千位的数据是按照ascii码中字符的'0'对应的值进行存储的。



0 0
原创粉丝点击