鉴于最近想做一个工具,方便自己查询数据的数据库,并基于数据库实现页面,做的一个小项目试手:
对于本次试手的小项目,我采用的是ubuntu + Mysql + Apache2 + HTML ,仿照LMAP架构
LMAP = Linux + MySQL + Apache2 + Python
主要组成:
Aapche2简介:
设备:ubuntu16.04
apache2.4.18
注意:1. ubuntu或linux下找不到apache服务器配置文件httpd.conf
2. 配置系统的说明在/usr/share/doc/apache2/README.Debian.gz中
安装:
sudo apt-get install apache2
浏览器输入localhost验证,可以的话即可
sudo /etc/init.d/apache2 stop 关 start 开
systemctl status apache2查看apache的状态
可以参考:https://jingyan.baidu.com/article/6d704a130c8a0d28da51ca5f.html
说明:
当访问本机的时候,默认进入的页面是/var/www/html/index.html
默认目录的更改。默认的目录其实是记录在:/etc/apache2/sites-available/000-default.conf 文件中"DocumentRoot ”键对应的值就是默认的目录了,可以任由我们修改。
顺手把/var/www的权限设置为777方便修改网页
配置系统的说明在/usr/share/doc/apache2/README.Debian.gz中
参考文章:
https://www.cnblogs.com/enjoyphp/p/linux002.html
https://www.cnblogs.com/lovemo1314/p/5623762.html
CGI简介:
cgi官方文档:https://boutell.com/cgic/#whatis
本次项目使用的cgi是207版本
注意:
cgic 一套封装好的c函数 用于编写cgi,配套cgic.h文件,一起和C语言一起用。
写的.c文件编译生成.cgi 文件放在cgi-bin目录下
使用cgic时 #include "cgic.h"
在使用cgic时,不需要自己封装主函数 而是使用一个叫 cgiMain
编译时 需要 gcc +源码.c + cgic.c -o ??.cgi
测试的时候 本机地址/cgi-bin/??.cgi (端口号不是80 需要在地址后面:端口号来指定)
有很多接口函数,例如如下
cgiFormResultType cgiFormString( char *name, char *result, int max)
name 比对的类型
result 结果存放的数组
max 存储的大小
Mysql简介:
mysql的官方文档 :
https://dev.mysql.com/doc/refman/5.7/en/
先看Mysql的版本,然后看官方文档,然后学习
我用的是5.7.24
安装
Ubuntu 16.04下安装MySQL
https://www.linuxidc.com/Linux/2017-06/144805.htm
安装MySQL及问题解决,删除
https://www.linuxidc.com/Linux/2017-05/143861.htm
配置文件位置
sudo vim /etc/mysql/my.cnf
mysql.h在/usr/include/mysql/目录下
gcc -o a.out test.c -L/usr/lib/mysql -lmysqlclient //ubuntu C语言连接编译
MySQL命令:
登录 MySQL
当 MySQL 服务已经运行时, 我们可以通过 MySQL 自带的客户端工具登录到 MySQL 数据库中, 首先打开命令提示符, 输入以下格式的命名:
mysql -h 主机名 -u 用户名 -p
参数说明:
-h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0。1)该参数可以省略;
-u : 登录的用户名;
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
如果我们要登录本机的 MySQL 数据库,只需要输入以下命令即可:
mysql -u root -p
启动MySQL
service mysql restart 重启mysql
service mysql start
service mysql stop
systemctl status mysql.service 验证mysql工作状态
sudo netstat -tap | grep mysql 确认是否启动成功:
基本操作:
select version(); 查看mysql的版本号
show global variables like 'port'; 查看mysql的端口号
show databases; 查看当前的数据库
use mysql; 我们选择 mysql数据库,以后的操作都是mysql
show tables; 显示当前数据库的表单
SHOW COLUMNS FROM 数据表: 显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。
create database spdb1; 建立数据库
show database; 查看数据库
create table users(userId varchar(8),userNamevarchar(8)); 建立users表
show tables; 查看表
insert into users values('0001','alex'); 将数据写入users表中
SELECT * from runoob_tbl WHERE runoob_author="菜鸟教程"; 查看users表中数据
desc users; 查看数据库users表结构
select database(); 当前选择的数据库
use 数据库后,使用show databases就能查询所有数据库,如果想跳到其他数据库,用use 其他数据库名字
show grants; 查看当前用户权限
show grants for 'jack'@'%'; 查看某个用户的权限
MySQL C API
mysql_query()执行一条 MySQL 查询。
mysql_store_result //https://blog.csdn.net/linux_ever/article/details/50654436
mysql_use_result
mysql_set_character_set():为当前连接设置默认字符集
这里主要看官方文档
C语言链接mysql示例:
https://www.cnblogs.com/uolo/p/6115448.html
https://www.2cto.com/database/201711/698769.html
http://www.jizhuomi.com/software/279.html
https://www.cnblogs.com/zhuyp1015/p/3562346.html
参考文档:
https://jingyan.baidu.com/article/90808022077516fd90c80f76.html
项目中遇到的问题
数据库的乱码问题:
数据库编码分成 数据库字符集,表字符集,字段字符集 需区分
乱码问题配置:
1.安装的时候配置mysql的配置文件,把 character_set 变量都配置成utf8.
2.建表之前记得给字段设置字符集 DEFAULT CHARSET=utf8;
3.编码插入代码之前执行mysql_set_character_set设置成utf8
mysql乱码:
https://blog.csdn.net/ACMAIN_CHM/article/details/4174186
权限管理
比如只允许你执行select操作,那么你就不能执行update操作。
只允许你从某台机器上连接mysql,那么你就不能从除那台机器以外的其他机器连接mysql。
mysql的两阶段验证 :
第一阶段:服务器首先会检查你是否允许连接。因为创建用户的时候会加上主机限制,可以限制成本地、某个IP、某个IP段、以及任何地方等,只允许你从配置的指定地方登陆。
第二阶段:如果你能连接,Mysql会检查你发出的每个请求,看你是否有足够的权限实施它。比如你要更新某个表、或者查询某个表,Mysql会查看你对哪个表或者某个列是否有权限。再比如,你要运行某个存储过程,Mysql会检查你对存储过程是否有执行权限等。