尚未崩坏 发表于 4 天前

MySQL数据库安装摆设


记录一下在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.解压安装包:
https://i-blog.csdnimg.cn/direct/c474f86439c34ac9bbc763e0b1669031.png
2.等待解压完成之后,修改文件夹名称为mysql-5.7.44:
https://i-blog.csdnimg.cn/direct/449088d1bd524ac2b5c6ed2a3e3dd043.png
3.创建一个属组,添加MySQL用户,修改属组及属组用户和文件夹权限:
https://i-blog.csdnimg.cn/direct/b51c094a7bd24c788219385710f0770f.png
检察其具体信息:
https://i-blog.csdnimg.cn/direct/3c74e34f2c3a42c783c29c9b384d3022.png
进入mysql-5.7.44目次,修改权限为:
https://i-blog.csdnimg.cn/direct/016aaa4816604415b6fe5591ab2b2c35.png

4. 在mysql-5.7.44目次下新建data文件夹,用于保存数据文件:
https://i-blog.csdnimg.cn/direct/cfb8454946df492da9c95989f2966a8b.png
5. 进入bin目次,实验初始化安装命令:
--initialize --user=mysql --datadir=/home/mysql/mysql_install/mysql-5.7.44/data --basedir=/home/mysql/mysql_install/mysql-5.7.44  https://i-blog.csdnimg.cn/direct/7a16f9d476c2472c9df00960dedbc41a.png其中,datadir是设置MySQL数据库的数据文件存放目次,basedir是设置MySQL的安装目次。安装完成之后,最下方的为临时密码,后续需要用来登录数据库。
6. 安装完成之后,进入support-file目次下,修改服务器设置文件:
https://i-blog.csdnimg.cn/direct/f38b4eb9762f449dbdf12aa424ca223c.png
需要修改指定的环境变量的路径:
https://i-blog.csdnimg.cn/direct/f237d6c2d79e474e8c3fd44d7680ec9a.png
其中还别的包含锁文件的路径。默认路径为系统目次,只有root用户才有权限操作,若是不加以修改,会出现如下错误:
https://i-blog.csdnimg.cn/direct/df55ffabf5a84158ae0a93aaacaf5cd5.png
缘故原由在于mysql用户没有删除系统目次的权限,因此选择在安装目次下创建存放lockdir文件的路径,并进行设置。
7. 修改完设置文件之后保存退出。切换到root用户,拷贝该文件到系统环境下,也可以建立软链接:
ln -s /home/mysql/mysql_install/mysql-5.7.44/support-files/mysql.server /etc/init.d/mysql  https://i-blog.csdnimg.cn/direct/2f3fc539229549818aca4394a988b750.png
显示软链接建立成功。
 再添加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端口已经被占用。
https://i-blog.csdnimg.cn/direct/07e40570f6a6492190f2320030e2b0bf.png
https://i-blog.csdnimg.cn/direct/0f28b090155e4ad0946e7a17728e0a88.png
 在MySQL的安装目次basedir中创建设置文件,文件名为my.cnf,设置mysql数据库的启动设置文件,设置项如下:
https://i-blog.csdnimg.cn/direct/3df643fc04384cdb941bc988cf1bcadf.png
 保存,使其生效:
https://i-blog.csdnimg.cn/direct/e22d0c5030f442afb11b001e2fd868d6.png
重新启动数据库,显示mysql数据库启动成功。
https://i-blog.csdnimg.cn/direct/3bd62ea0960441f48455393cef27a044.png
关闭MySQL服务:
https://i-blog.csdnimg.cn/direct/e6f0d02132734482b57b6c85af125c57.png
重启MySQL服务:
https://i-blog.csdnimg.cn/direct/b52969a623534f08815dc2a3213cc27a.png
登录数据库

1. 登录数据库
https://i-blog.csdnimg.cn/direct/a5f68a1925d146b3b832c6de0fdc9457.png
 提示无法找到libncurses.so.5库文件,为解决该问题,创建一个存放动态库文件的目次,将libncurses.so.5文件拷贝到该目次下:
https://i-blog.csdnimg.cn/direct/abbb9fe018f74b228ebc65e24aa90ea6.png
 修改环境变量.bashrc,添加库文件的路径:
https://i-blog.csdnimg.cn/direct/c211a740bc70489bb060430cc2fc058d.png
 保存,使其生效。再次启动数据库:
https://i-blog.csdnimg.cn/direct/f4d82caf07854af996f77856e7ac9439.png
密码即为初始化后显示的临时密码。
2. 修改root用户的密码:
https://i-blog.csdnimg.cn/direct/678e32f0abc34acbb26e594167054c24.png
至此,MySQL数据库安装完成。
3. MySQL数据库使用:
检察数据库:
https://i-blog.csdnimg.cn/direct/48968540114c48f299efaa938bd57fd6.png
C语言长途毗连数据库

数据库安装完成之后,通过libmysqlclient.so提供的C接口来操作数据库。值得注意的是,需要将mysql-5.7.44目次下的libmysqlclient.so.20存放到可以访问的位置,并在编译链接过程中指定库文件地点路径。再者,需要在数据库端指定命据库用户的ip为任意主机,即%, 否则数据库服务器会拒绝毗连:
update user set host='%' where user='username'; 一个简单的测试用例如下所示:
#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<mysql.h>



const 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);

        }

        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);

                }

                printf("\n");

            }

        }



    }while(!mysql_next_result(conn));

    mysql_free_result(multi_res);



end:

    mysql_close(conn);

    return 0;

} 运行结果如下:
https://i-blog.csdnimg.cn/direct/662d27db4887413db20b9a4f5d9837ab.png


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MySQL数据库安装摆设