[toc]

一 、配置服务端

1. 安装kali

2. 在kali中开启MySql

  1. 打开MySql服务

    1
    2
    systemctl start mysql
    #service mysql restart
  2. 查看MySql状态

    1
    2
    systemctl status mysql
    #service mysql status
  3. MySQL初始化

    1
    mysql_secure_installation
  4. 初始化之后再重启服务

    1
    systemctl restart mysql
  5. 运行MySQL测试一下,exit退出

    1
    mysql

3. 开启服务器中MySql的访问权限,使其他主机可以连接服务器的MySql数据库

  1. 在服务器中启动MySql

    1
    mysql
  2. 列出所有MySql用户

    1
    SELECT user FROM mysql.user;
  3. 选择数据库mysql

    1
    use mysql
  4. 显示数据库mysql,里面保存了所有用户

    1
    SELECT user,host FROM user;
  5. 创建新用户命名为new

    1
    CREATE USER 'new'@'%' IDENTIFIED BY 'Password';
  6. 设置网段内所有主机都可连接用户new

    1
    GRANT ALL PRIVILEGES ON *.* TO 'new'@'%' WITH GRANT OPTION;
  7. 刷新mysql设置

    1
    flush privileges;
  8. 退出mysql程序

    1
    exit

4. 在服务器中使用MySql新建数据库与表格

  1. 创建数据库
  2. 选择数据库
  3. 创建表
  4. 给表中插入数据
  5. 退出

二、编写C语言程序并运行

1.编写C语言程序

  1. 将本地MySql中的include与lib库包含在项目中

  2. 编写C语言代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <stdio.h>
    #include <mysql.h>
    #pragma comment(lib,"libmysql.lib")
    int main()
    {
    MYSQL mysql; //数据库句柄
    MYSQL_RES* res; //查询结果集
    MYSQL_ROW row; //记录结构体
    //初始化数据库
    mysql_init(&mysql);
    //设置字符编码
    mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");
    //连接数据库
    if (mysql_real_connect(&mysql, "10.0.2.110", "new", "Password", "test",
    3306, NULL, 0) == NULL) {
    printf("error: %s\n", mysql_error(&mysql));
    printf("连接失败!\n");
    exit(-1);
    }
    //查询数据
    int ret = mysql_query(&mysql, "select * from book;");
    printf("ret: %d\n", ret);

    //获取结果集
    res = mysql_store_result(&mysql);

    //给ROW赋值,判断ROW是否为空,不为空就打印数据。
    while (row = mysql_fetch_row(res))
    {
    printf("%s ", row[0]); //打印ID
    printf("%s ", row[1]); //打印书名
    printf("%s ", row[2]); //打印作者名
    printf("%s ", row[3]); //打印书号
    printf("%s ", row[4]); //打印时间
    printf("\n");
    }
    //释放结果集
    mysql_free_result(res);

    //关闭数据库
    mysql_close(&mysql);

    system("pause");
    }
  3. 编译

  4. 新建一个文件夹,将应用程序与相关Dll文件添加到文件夹中

  5. 运行文件夹里的应用程序

2.解决程序连接服务器失败的问题

  1. 在本地使用ping命令测试服务器是否连通,不连通的话自行排查网络问题,连通后进行下一步。

  2. 在服务器里使用命令查看端口连通状态

    1
    netstat -ntpl |grep 3306
    • 结果显示地址为0.0.0.0:3306说明可被其他地址连接,如果为127.0.0.1:3306则说明MySql设置了只允许本机地址连接.
    • 解决办法为修改相关文件允许所有ip连接
  3. 修改文件

    1
    vim /etc/mysql/mariadb.conf.d/50-server.cnf
    • 将文件里的bind-address127.0.0.1修改为0.0.0.0
  4. 重启MySql服务

    1
    sudo systemctl restart mysql