【配置环境】Linux下安装MySQL

目录

一,环境

二,安装步骤

1.使用包管理器安装MySQL

2.配置MySQL的安全选项

3.设置root用户使用密码进行身份验证(可选)

三,拓展知识

1.如何修改MySQL的密码策略?

2.实现连接MySQL数据库的测试代码


一,环境

  • VMware® Workstation 16 Pro (版本:16.1.2 build-17966106)
  • ubuntu-22.04.2-desktop-amd64

二,安装步骤

1.使用包管理器安装MySQL

  • 对于Ubuntu/Debian系统,使用apt-get命令安装:
    • sudo apt-get update
    • sudo apt-get install mysql-server
  • 对于CentOS/RHEL系统,使用yum命令安装:
    • sudo yum update
    • sudo yum install mysql-server
  • 安装完成后,MySQL服务会自动启动。使用以下命令检查MySQL服务的状态:
    • sudo systemctl status mysql
  • 如果MySQL服务没有自动启动,可以手动启动MySQL服务:
    • 对于Ubuntu/Debian系统,使用以下命令:
      • sudo service mysql start
    • 对于CentOS/RHEL系统,使用以下命令:
      • sudo systemctl start mysql
  • 可以通过以下命令来检查MySQL服务是否在运行:
    • sudo systemctl is-active mysql
  • 停止MySQL服务命令如下:
    • sudo systemctl stop mysql

2.配置MySQL的安全选项

  • 对于MySQL 5.7版本及以上,运行以下命令进行初始配置:(这个命令会要求你设置MySQL的root用户密码和其他安全选项)
    • sudo mysql_secure_installation
  • 然后提示是否对密码验证组件进行配置,输入y
  • 接下来会显示选择设置密码的强度,输入0
  • 询问是否要移除匿名用户,输入y(上一步选择密码强度后会有一个输入要设置的密码过程,但是直接跳过了,原因看下一节)
  • 询问是否禁用root用户进行远程登录,输入y
  • 询问是否删除测试数据库并访问它,输入y
  • 询问是否重新加载权限表,就是让到目前为止作出的设置将立即生效。输入y
  • 最后出现 All done,说明设置完成!
  • 安装完成后,可以通过以下命令登录MySQL服务器(此时是通过auth_socket插件进行身份验证的)
    • sudo mysql

3.设置root用户使用密码进行身份验证(可选)

  • 在配置MySQL的安全选项时,选择设置密码的强度后直接跳过了输入密码的一步,并显示如下红框中的内容
  • 这是因为在MySQL中,默认情况下,root用户使用的是auth_socket插件进行身份验证,而不是使用密码。auth_socket插件通过Unix套接字文件来验证用户的凭据。因此,如果使用auth_socket插件进行身份验证,就没有必要为root用户设置密码。

如果希望为root用户使用密码进行身份验证,可以按照以下步骤操作:

  • 以root用户身份登录MySQL(此时是通过auth_socket插件进行身份验证):
    • sudo mysql
  • 登录后,切换到MySQL系统数据库:
    • USE mysql;
  • 将root用户的身份验证方法更新为使用mysql_native_password插件:(将your_password替换为root用户的密码,密码长度至少为8个字符)
    • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
  • 刷新权限表使更改生效:
    • FLUSH PRIVILEGES;
  • 完成这些步骤后,root用户将可以通过密码进行身份验证,而不是通过auth_socket插件。
  • 最后通过以下命令并输入前面设置的MySQL的root用户密码,即可登录MySQL服务器:
    • mysql -u root -p

三,拓展知识

1.如何修改MySQL的密码策略?

  • 在设置MySQL的登录密码时,会遇到如下错误提示
  • 出现这个错误是因为MySQL默认启用了密码策略来确保密码的安全性。根据密码策略,密码必须满足一定的要求才能被接受,要求如下红框中内容。
  • 但在MySQL中,可以通过修改密码策略变量来调整密码策略的要求。具体来说,可以修改以下两个相关的变量:
    • validate_password.policy: 该变量定义了密码策略的要求。其取值可以是一个或多个如下策略的组合。
      • **LOW:**密码只要求长度满足即可。
      • **MEDIUM:**密码至少要求包含数字、字母和特殊字符。
      • **STRONG:**密码至少要求包含数字、字母、特殊字符和其它字符。
    • **validate_password.length:**该变量定义了密码的最小长度要求,默认为8,可以根据需要进行调整。

可以按照以下步骤在MySQL中调整密码策略:

  • 以root身份登录MySQL:
    • sudo mysql
  • 执行以下命令修改密码策略:(将密码策略设置为LOW,密码最小长度设置为4)
    • SET GLOBAL validate_password.policy='LOW';
    • SET GLOBAL validate_password.length=4;
  • 刷新权限表使更改生效:
    • FLUSH PRIVILEGES;
  • 退出MySQL的命令行界面:
    • QUIT;

2.实现连接MySQL数据库的测试代码

cpp 复制代码
#include <mysql/mysql.h>
#include <stdio.h>

int main() {
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    char *server = "localhost";
    char *user = "username";
    char *password = "password";
    char *database = "database_name";

    conn = mysql_init(NULL);

    // 连接数据库
    if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        mysql_close(conn);
        return 1;
    }

    // 执行SQL查询
    if (mysql_query(conn, "SELECT * FROM table_name")) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        return 1;
    }

    res = mysql_use_result(conn);

    // 处理查询结果
    while ((row = mysql_fetch_row(res)) != NULL) {
        for(int i = 0; i < mysql_num_fields(res); i++) {
            printf("%s ", row[i] ? row[i] : "NULL");
        }
        printf("\n");
    }

    // 释放结果集和关闭连接
    mysql_free_result(res);
    mysql_close(conn);

    return 0;
}
  • 确保已经安装了 libmysqlclient-dev 库。如果尚未安装,可以使用以下命令安装:
    • sudo apt-get install libmysqlclient-dev
  • 在编译命令中,需要链接MySQL C API库。可以使用以下命令进行编译:
    • gcc -o my_program main.c -lmysqlclient
  • 如果仍然遇到问题,请确保编译器能够正确找到MySQL库文件的路径。如果MySQL库文件不在默认路径中,可能需要使用 -L 标志来指定库文件的路径。
相关推荐
小宋102116 分钟前
玩转RabbitMQ声明队列交换机、消息转换器
服务器·分布式·rabbitmq
m0_6090004219 分钟前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
小安运维日记1 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
kejijianwen2 小时前
JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
服务器·数据库·oracle
CoolTiger、4 小时前
【Vmware16安装教程】
linux·虚拟机·vmware16
学习3人组5 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos
厨 神6 小时前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu
这孩子叫逆6 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql
Karoku0666 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
geek_Chen016 小时前
虚拟机共享文件夹开启后mnt/hgfs/下无sharefiles? --已解决
linux·运维·服务器