MySQL数据库安装摆设

打印 上一主题 下一主题

主题 1865|帖子 1865|积分 5595


记录一下在Linux环境上的安装摆设MySQL数据库的过程。
安装包下载 

本次安装的数据库版本为5.7.44,安装环境为Linux (GNU libc 2.28)。
安装包下载路径:https://dev.mysql.com/downloads/mysql/:
选择版本:5.7.44/Linux-Generic/Linux-Generic(glibc 2.12) (x86, 64-bit)
安装过程

1.解压安装包:

2.等待解压完成之后,修改文件夹名称为mysql-5.7.44:

3.创建一个属组,添加MySQL用户,修改属组及属组用户和文件夹权限:

检察其具体信息:

进入mysql-5.7.44目次,修改权限为:


4. 在mysql-5.7.44目次下新建data文件夹,用于保存数据文件:

5. 进入bin目次,实验初始化安装命令:
  1. --initialize --user=mysql --datadir=/home/mysql/mysql_install/mysql-5.7.44/data --basedir=/home/mysql/mysql_install/mysql-5.7.44
复制代码
 
其中,datadir是设置MySQL数据库的数据文件存放目次,basedir是设置MySQL的安装目次。安装完成之后,最下方的为临时密码,后续需要用来登录数据库。
6. 安装完成之后,进入support-file目次下,修改服务器设置文件:

需要修改指定的环境变量的路径:

其中还别的包含锁文件的路径。默认路径为系统目次,只有root用户才有权限操作,若是不加以修改,会出现如下错误:

缘故原由在于mysql用户没有删除系统目次的权限,因此选择在安装目次下创建存放lockdir文件的路径,并进行设置。
7. 修改完设置文件之后保存退出。切换到root用户,拷贝该文件到系统环境下,也可以建立软链接:
  1. ln -s /home/mysql/mysql_install/mysql-5.7.44/support-files/mysql.server /etc/init.d/mysql
复制代码
 

显示软链接建立成功。
 再添加bin目次的软链接:
  1. ln -s /home/mysql/mysql_install/mysql-5.7.44/bin/mysql /usr/local/bin/mysql
复制代码

8. 启动mysql服务。直接按照默认设置启动数据库:
  1. service mysql start
复制代码
提示错误信息:ERROR! The server quit without updating PID file (/home/mysql/mysql_install/mysql-5.7.44/data/localhost.localdomain.pid). 按照提示路径打开data目次,固然data目次下没有localhost.localdomain.pid,但是存在localhost.localdomain.err,记录了错误信息。信息显示默认的3306端口已经被占用。


 在MySQL的安装目次basedir中创建设置文件,文件名为my.cnf,设置mysql数据库的启动设置文件,设置项如下:

 保存,使其生效:

重新启动数据库,显示mysql数据库启动成功。

关闭MySQL服务:

重启MySQL服务:

登录数据库

1. 登录数据库

 提示无法找到libncurses.so.5库文件,为解决该问题,创建一个存放动态库文件的目次,将libncurses.so.5文件拷贝到该目次下:

 修改环境变量.bashrc,添加库文件的路径:

 保存,使其生效。再次启动数据库:

密码即为初始化后显示的临时密码。
2. 修改root用户的密码:

至此,MySQL数据库安装完成。
3. MySQL数据库使用:
检察数据库:

C语言长途毗连数据库

数据库安装完成之后,通过libmysqlclient.so提供的C接口来操作数据库。值得注意的是,需要将mysql-5.7.44目次下的libmysqlclient.so.20存放到可以访问的位置,并在编译链接过程中指定库文件地点路径。再者,需要在数据库端指定命据库用户的ip为任意主机,即%, 否则数据库服务器会拒绝毗连:
  1. update user set host='%' where user='username';
复制代码
一个简单的测试用例如下所示:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<mysql.h>
  5. const char host[] = "10.12.1.30";
  6. const int port = 55889;
  7. const char dbname[] = "test";
  8. const char user[] = "system";
  9. const char password[] = "123456";
  10. MYSQL *conn = NULL;
  11. int main()
  12. {
  13.     int ret = 0;
  14.     conn = mysql_init(NULL);
  15.     if(NULL == conn)
  16.     {
  17.         printf("cannot allocate memory for MYSQL.\n");
  18.         goto end;
  19.     }
  20.     printf("conn: %p\n", conn);
  21.     ret = mysql_options(conn, MYSQL_SET_CHARSET_NAME, "utf8");
  22.     if(ret)
  23.     {
  24.         printf("set options error: %s\n", mysql_error(conn));
  25.         goto end;
  26.     }
  27.     if(NULL == mysql_real_connect(conn, host, user, password, dbname, port, NULL, 0))
  28.     {
  29.         printf("connect to mysql failed: %s\n", mysql_error(conn));
  30.         goto end;
  31.     }
  32.     printf("connect to mysql success!\n");
  33.     ret = mysql_query(conn, "insert into test_conn values(4, '10.12.1.30');");
  34.     if(ret)
  35.     {
  36.         printf("mysql_query error: %s\n", mysql_error(conn));
  37.         goto end;
  38.     }
  39.     ret = mysql_real_query(conn, "delete from test_conn where id=2;", strlen("delete from test_conn where id=2;"));
  40.     if(ret)
  41.     {
  42.         printf("mysql_real_query error: %s\n", mysql_error(conn));
  43.         goto end;
  44.     }
  45.     //执行查询语句
  46.     mysql_query(conn, "select * from test_conn;");
  47.     //获取查询结果集
  48.     MYSQL_RES *query_res = mysql_store_result(conn);
  49.     //获取结果集规模
  50.     int rows = mysql_num_rows(query_res);
  51.     int columns = mysql_num_fields(query_res);
  52.     printf("data size: %d columns, %d rows.\n", columns, rows);
  53.     for(int i = 0; i < rows; i++)
  54.     {
  55.         MYSQL_ROW rowset = mysql_fetch_row(query_res);
  56.         for(int j = 0; j < columns; j++)
  57.         {
  58.             printf("%s\t", rowset[j]);
  59.         }
  60.         printf("\n");
  61.     }
  62.     mysql_free_result(query_res);
  63.     //返回多个结果集的处理
  64.     //创建存储过程,返回多个结果集
  65.     char *sql = "create procedure if not exists GetMultiResultSet() begin select * from test_conn; select * from test_conn where id=3; end;";
  66.     ret = mysql_query(conn, sql);
  67.     if(ret)
  68.     {
  69.         printf("create procedure errno: %d\n", mysql_errno(conn));
  70.         printf("create procedure error: %s\n", mysql_error(conn));
  71.     }
  72.     MYSQL_RES *multi_res = NULL;
  73.     mysql_query(conn, "call GetMultiResultSet();");
  74.     do{
  75.         if((multi_res = mysql_store_result(conn)))
  76.         {
  77.             int rows = mysql_num_rows(multi_res);
  78.             int columns = mysql_num_fields(multi_res);
  79.             printf("data size: %d columns, %d rows.\n", columns, rows);
  80.             for(int i = 0; i < rows; i++)
  81.             {
  82.                 MYSQL_ROW rowset = mysql_fetch_row(multi_res);
  83.                 for(int j = 0; j < columns; j++)
  84.                 {
  85.                     printf("%s\t", rowset[j]);
  86.                 }
  87.                 printf("\n");
  88.             }
  89.         }
  90.     }while(!mysql_next_result(conn));
  91.     mysql_free_result(multi_res);
  92. end:
  93.     mysql_close(conn);
  94.     return 0;
  95. }
复制代码
运行结果如下:



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表