博主最近在学习用C/C++实现Linux(CentOS6.5)下游戏服务器的搭建,然后不可避免的需要用到数据库(%>_<%,一开始是用文件来存储信息的,但是那效率实在是太低了,而且如今几乎应该没有什么游戏公司还用文件来存储玩家数据了),故今天自己鼓捣了一下Mysql数据库的安装以及C/C++连接使用Mysql。
一、首先是mysql的安装
第一步,我们可以先看一下,我们的操作系统上是否已经安装了Mysql数据库,这个还是容易的(当然,肯定要先打开最重要的Terminal,即命令行窗口,然后输入下述命令即可)
[root@localhost ~]# rpm -qa | grep mysql // 这个命令就可以查看自己的操作系统上是否已经安装了mysql数据库
像博主自己,一开始只能够查看到一个lib文件,当然它只是一个库文件,并不是我们要的Mysql数据库,可选择删除,也可保留,反正不管删不删除,安装之后还是会给你装一个的。如果想要删除的话,可以用以下命令
[root@localhost ~]# rpm -e mysql // 普通删除模式然后才是进入安装,安装之前,你可以稍微看一下yum服务器上mysql数据库的可下载版本信息:
[root@localhost ~]# rpm -e --nodeps mysql // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则可用该命令对其进行强力删除
当然,看不看其实都不影响,因为我们会采取默认版本安装,命令如下
[root@localhost ~]# yum install -y mysql-server mysql mysql-deve接下来就是等待环节了,不需要你做太多的操作,yum会帮我们选择好安装Mysql数据库所需要的软件以及其它附属的一些软件,直到出现"Complete!"意味着安装完毕。
二、其次是Mysql的配置
我们先通过输入 service mysqld start 命令启动我们的mysql服务
注意:如果我们是第一次启动mysql服务,mysql服务器首先会进行初始化的配置,如:
[root@localhost ~]# service mysqld start
初始化 MySQL 数据库: WARNING: The host 'xiaoluo' could not be looked up with resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables...
OK
Filling help tables...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h xiaoluo password 'new-password'
Alternatively you can run:
/usr/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/bin/mysqlbug script!
[确定]
正在启动 mysqld: [确定]
这时我们会看到第一次启动mysql服务器以后会提示非常多的信息,目的就是对mysql数据库进行初始化操作,当我们再次重新启动mysql服务时,就不会提示这么多信息了,如:
[root@localhost ~]# service mysqld restart
停止 mysqld: [确定]
正在启动 mysqld: [确定]
我们在使用mysql数据库时,都得首先启动mysqld服务,我们可以通过 chkconfig --list | grep mysqld 命令来查看mysql服务是不是开机自动启动,如:
[root@localhost ~]# chkconfig --list | grep mysqld
mysqld 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
我们发现mysqld服务并没有开机自动启动,我们可以通过 chkconfig mysqld on 命令来将其设置成开机自启动,这样就不用每次都去手动启动了
[root@localhost ~]# chkconfig mysqld on
[root@localhost ~]# chkconfig --list | grep mysql
mysqld 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
Mysql数据库安装完以后只会有一个root管理员账号,但是此时的root账号还没有为其设置密码,我们可以为其设置密码(注意:这个root账号是Mysql的root账号,而不是Linux的root账号)
[root@localhost ~]# mysqladmin -u root password 'root' // 通过该命令给root账号设置密码为 root,前一个root为管理员账号,后一个root(即单引号里的root为密码)
接着,我们可以通过 mysql -u root -p 命令来登录我们的Mysql数据库
在Enter password:后面输入之前设置的密码,按回车键登录即可,mysql>后面是登录后我们可以输入的数据库操作命令。
比如我们要创建一个自己的数据库,将其命名为"flappybird",那么我们可以作如下操作
这样就创建成功了,如何证明创建成功了呢,我们可以用命令 show databases来查看
除了flappybird数据库是博主新建的,其他都是原有的,那我们怎么看某个数据库里有哪些表呢?
①先选定数据库:use flappybird;
②查看该数据库内的表:show tables;
显然,flappybird还是一个空的数据库,我们可以创建一个表,例如login表
以上为创建代码,接着我们可以看一下效果,用 describe login 命令看一下login表格式
但是login表里还没有数据,所以我们可以添加一条信息(username:admin,password:admin,id:自动递增)
然后我们来看一下添加的信息
可见,我们添加成功了,好了,不再墨迹,我们进入最后一个环节——C/C++连接使用Mysql
三、C/C++连接使用Mysql
显然,C/C++要和Mysql联系起来,两者之间必须有个桥梁,而这个桥梁,就是头文件#include<mysql/mysql.h>,博主先给出一个简单的C/C++操作Mysql程序
#include <stdio.h>
#include <mysql/mysql.h>
int main()
{
MYSQL mysql;
mysql_init(&mysql);//初始化MYSQL对象
if(!mysql_real_connect(&mysql,"localhost","root","root","flappybird",0,NULL,0))//连接数据库,第一个参数是MYSQL指针,localhost表示连接本地计算机
fprintf(stderr,"connection error! %s\n", mysql_error(&mysql));
else
printf("connection succeed!\n");
mysql_close(&mysql);//关闭数据库连接
return 0;
}
上述程序的功能就是实现连接数据库,我们编译一下会发现
找不到头文件?博主后来去网上查了一下,有人说用命令 apt-get install libmysqlclient-dev 就可以了,然而博主尝试了一下,系统直接说找不到apt-get命令
反正试了好多种,最后有一种解决了问题:
即yum install mysql-devel,原因是c++程序访问mysql报错。虽然已经装了mysql-libs,但还要安装mysql开发包。安装之后再编译
还是有问题,系统说找不到一些数据库操作函数,然后网上又是各种各样的解答,看到最多的但是博主这边不可行的一种做法是g++ Server.c -o Server.out -lmysqlclient
但是行不通,最后有一种方法成功地解决了这个问题:gcc -o Server.out $(mysql_config --cflags) Server.c $(mysql_config --libs)
原因是MySQL中有一个特殊的脚本,叫做mysql_config. 它会为你编译MySQL客户端,并连接到MySQL服务器提供有用的信息.你需要使用下面两个选项.
1. --libs 选项 - 连接MySQL客户端函数库所需要的库和选项.
$ mysql_config --libs
输出:
-L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib64 -lssl -lcrypto
2. --cflags 选项 - 使用必要的include文件的选项等等.
$ mysql_config --cflags
输出:
-I/usr/include/mysql -g -pipe -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing
你需要将上面两个选项加入到对源文件的编译命令中.
至此, 事情圆满解决!