> 技术文档 > MySQL数据库安装部署_mysql5.7.44安装教程

MySQL数据库安装部署_mysql5.7.44安装教程

记录一下在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目录,执行初始化安装命令:

--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用户,拷贝该文件到系统环境下,也可以建立软链接:

ln -s /home/mysql/mysql_install/mysql-5.7.44/support-files/mysql.server /etc/init.d/mysql

 

显示软链接建立成功。

 再添加bin目录的软链接:

ln -s /home/mysql/mysql_install/mysql-5.7.44/bin/mysql /usr/local/bin/mysql

8. 启动mysql服务。直接按照默认配置启动数据库:

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为任意主机,即%, 否则数据库服务器会拒绝连接:

update user set host=\'%\' where user=\'username\';

一个简单的测试用例如下所示:

#include#include#include#includeconst char host[] = \"10.12.1.30\";const int port = 55889;const char dbname[] = \"test\";const char user[] = \"system\";const char password[] = \"123456\";MYSQL *conn = NULL;int main(){    int ret = 0;    conn = mysql_init(NULL);    if(NULL == conn)    {        printf(\"cannot allocate memory for MYSQL.\\n\");        goto end;    }    printf(\"conn: %p\\n\", conn);    ret = mysql_options(conn, MYSQL_SET_CHARSET_NAME, \"utf8\");    if(ret)    {        printf(\"set options error: %s\\n\", mysql_error(conn));        goto end;    }    if(NULL == mysql_real_connect(conn, host, user, password, dbname, port, NULL, 0))    {        printf(\"connect to mysql failed: %s\\n\", mysql_error(conn));        goto end;    }    printf(\"connect to mysql success!\\n\");    ret = mysql_query(conn, \"insert into test_conn values(4, \'10.12.1.30\');\");    if(ret)    {        printf(\"mysql_query error: %s\\n\", mysql_error(conn));        goto end;    }    ret = mysql_real_query(conn, \"delete from test_conn where id=2;\", strlen(\"delete from test_conn where id=2;\"));    if(ret)    {        printf(\"mysql_real_query error: %s\\n\", mysql_error(conn));        goto end;    }    //执行查询语句    mysql_query(conn, \"select * from test_conn;\");    //获取查询结果集    MYSQL_RES *query_res = mysql_store_result(conn);    //获取结果集规模    int rows = mysql_num_rows(query_res);    int columns = mysql_num_fields(query_res);    printf(\"data size: %d columns, %d rows.\\n\", columns, rows);    for(int i = 0; i < rows; i++)    {        MYSQL_ROW rowset = mysql_fetch_row(query_res);        for(int j = 0; j < columns; j++)        {            printf(\"%s\\t\", rowset[j]);        }        printf(\"\\n\");    }    mysql_free_result(query_res);    //返回多个结果集的处理    //创建存储过程,返回多个结果集    char *sql = \"create procedure if not exists GetMultiResultSet() begin select * from test_conn; select * from test_conn where id=3; end;\";    ret = mysql_query(conn, sql);    if(ret)    {        printf(\"create procedure errno: %d\\n\", mysql_errno(conn));        printf(\"create procedure error: %s\\n\", mysql_error(conn));    }    MYSQL_RES *multi_res = NULL;    mysql_query(conn, \"call GetMultiResultSet();\");    do{        if((multi_res = mysql_store_result(conn)))        {            int rows = mysql_num_rows(multi_res);            int columns = mysql_num_fields(multi_res);            printf(\"data size: %d columns, %d rows.\\n\", columns, rows);            for(int i = 0; i < rows; i++)            {                MYSQL_ROW rowset = mysql_fetch_row(multi_res);                for(int j = 0; j < columns; j++)                {                    printf(\"%s\\t\", rowset[j]);                }                printf(\"\\n\");            }        }    }while(!mysql_next_result(conn));    mysql_free_result(multi_res);end:    mysql_close(conn);    return 0;}

运行结果如下: