mysql_001

本文介绍了数据库相关知识,重点讲解MySQL数据库。涵盖其特点,如关系型、跨平台、支持多语言;还包括安装方法,不同系统的安装步骤;启动和连接数据库的命令;基本SQL命令,如库和表的操作;以及多种数据类型,如数值、字符、枚举类型等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 数据库

    1. 数据库 :存储数据的仓库
    2. 数据库软件分类 :
        1. MySQL,Oracle,SQL Server,MongoDB,DB2,
             MariaDB,Redis...
        2. 分类 :
            根据数据的存储方式不同,划分为 :
            1. 关系型数据库
                采用标准化的行和列构建二维表存储数据,
                表与表之间的逻辑关联称为关系。
                MySQL, Oracle, SQL Server,DB2,MariaDB
            2. 非关系型数据库     (NoSQL-Not Only SQL)
                采用键值对的形式存储数据
                MongoDB,Redis(缓存)
        3. 如何选择
            1. 数据存储方式
            2. 是否开源 :
                    开源 :MySQL MariaDB MongoDB
                    闭源 :Oracle DB2 ,SQL Server
            3. 是否跨平台 :
                    不跨平台 : SQL Server
                    跨平台 :...

2. 数据库与数据仓库

    数据库 :提供数据存储和数据操作的服务(DataBase)
    数据仓库 :存储海量数据,提供数据分析与挖掘
                        (Data WareHouse - DW/DWH)

3. MySQL 数据库

    1. 关系型数据库 :
            1. 数据以二维表形式存储
            2. 表中的每一行,称为一条记录
            3. 表中的每一列,称为一个字段
            示例 :
                1. 关系型数据库存储数据
                    表1        学生信息表
                                姓名    年龄    班级
                                星矢     20        一班
                                水冰月 18        二班
                    表2   班级信息表
                                班级    班主任 人数
                                一班    老王        30
                                二班    老张        50
                2. 非关系数据库存储数据
                        {"姓名":"星矢","年龄":"20"}
    2. 跨平台 :
         Ubuntu,windows, CentOS, Linux...
    3. 支持多种开发语言 :
         Python,Java,PHP...

4. MySQL 安装

    1. Ubuntu :
            1. 安装服务端
                sudo apt-get install mysql-server
            2. 安装客户端
                sudo apt-get install mysql-client
            3. ubuntu 软件更新
                1. sudo apt-get update
                     访问源列表中的所有网址,读取软件列表,保存
                     到本地(/var/lib/apt/lists/)
                2. sudo apt-get upgrade
                     把本地已安装软件与刚下载的软件列表进行对比
                     如果当前软件版本低,则更新
                3. 修复依赖关系
                     sudo apt-get -f install
    2. windows :
         下载安装包 xxx.msi
    3. Mac :
         下载安装包 8.0

5. 启动和连接数据库

    1. 服务端启动 :
        1. 查看MySQL状态
                sudo /etc/init.d/mysql status
             连接服务端
              sudo /etc/init.d/mysql start | stop | restart
    2. 连接客户端
        1. 命令格式 :
            mysql -h主机地址 -u用户名 -p密码
            本机 :
            mysql -hlocalhost -uroot -p123456
            mysql -uroot -p123456

6. MySQL 语句规范

    1. 每一条命令以;结束
    2. SQL命令不区分大小写
    3. 使用/c终止当前命令

7. 基本SQL命令

    1. 库的基本操作
        1. 查看已有库
            show databases;
        2. 创建数据库
            create database 库名; (默认字符集为Latin1)
            create database 库名 character set utf8;
            建库的同时指定字符集
        3. 查看创建库的语句(查看字符集)
            show create database 库名;
        4. 查看当前所在库
            select database();
        5. 使用已有库/切换数据库
            use 库名;
        6. 查看当前数据库中的所有表
            show tables;
        7. 删除数据库
            drop database 库名;
    2. 库名的命名规范
        1. 库名自定义,由数字,字母,下划线组成,禁止
             与关键字冲突,禁止使用纯数字,尽量见名知意
        2. 为了区分库名和表名,可以在库名后添加db
                例: studb
        3. 库名和表名大小写敏感
                例: stuDB
    3. 练习
        1. 创建数据库testdb ,指定字符集为utf8
                create database testdb character set utf8;
        2. 进入数据库 testdb
                use testdb;
        3. 查看当前所在库
                select database();
        4. 创建数据库testdb2
                create database testdb2;
        5. 查看testdb2的字符集
                show create database testdb2;
        6. 删除testdb和testdb2
                drop database testdb;
                drop database testdb2;
    4. 表的基本操作
        1. 创建表
            create table 表名(字段名 数据类型,
            字段名 数据类型,
            字段名 数据类型);
        2. 查看表的字符集
            show create table 表名;
        3. 查看表结构(表中包含哪些字段)
            desc 表名;
        4. 删除表
            drop table 表名;
        5. 练习 :
            1. 创建库 pyDB,指定字符集为utf8
                 create database pyDB character set utf8;
            2. 在数据库中创建表,tab1,指定 id name age
                 三个字段(int char(10) int)
                 use pyDB;
                 create table tab1(id int,name char(10),age int);

            3. 查看表的字符集
                 show create table tab1;
            4. 查看表结构
                 desc tab1;
            5. 删除表,删除库
                 drop table tab1;
                 drop database pyDB;
    5. 表记录管理
        1. 插入记录
            insert into 表名 values (字段值,字段值),(字段值,字段值);
            指定字段插入数据:
            insert into 表名(字段1,字段2) values(字段值,字段值);
        2. 查询记录
            select * from 表名; (查询所有数据)
            select 字段名,字段名 from 表名; (查询指定字段)
            指定查询条件
            select * from 表名 where 条件;
        3. 练习
            1. 查看所在库,查看已有库
            2. 创建新库,userdb
            3. 在新库中创建表 userInfo,设置字符集为utf8,
                 设置字段 id name age
            4. 查看表结构
                 desc userInfo;
            5. 在表中插入几条记录
            6. 在表中针对name,age两个字段插入两条数据
            7. 查询表中所有数据
            8. 查询表中所有姓名
            9. 查询表中所有年龄大于20的姓名信息
                 select name from userInfo where age>20;
    6. 更改数据库默认字符集
            1. 方法 :修改数据库的配置文件
            2. 步骤 :
                1. 获取root权限
                        sudo -i
                2. cd /etc/mysql/mysql.conf.d/
                3. 文件备份(必须执行)
                     cp mysqld.cnf mysqld.cnf.bak
                4. 修改配置文件
                        subl mysqld.cnf
                        找 :
                            [mysqld]
                        添加
                            character_set_server = utf8
                5. 保存文件,重启服务
                        sudo /etc/init.d/mysql restart
                Mac :
                    /etc/my.cnf

8. 客户端的连接与断开

        连接 : mysql -h主机名 -u用户名 -p密码
                    只有连接成功,才可以使用数据库服务,书写
                    SQL语句
        断开 :
                exit; | quit; | \q;
                断开与客户端的链接,并不会结束服务
                结束服务使用 :
                    sudo /etc/init.d/mysql stop

9. 数据类型

    1. 数值类型
        1. 整数
            1. int (大)整型 (占据4个字节)
                 取值范围 :
                 无符号整型(unsigned) :0 ~ 2(32)-1
                 有符号整型(signed 默认为有符号) : -2(31)~2(31)-1
            2. tinyint 微小整型 (占据1个字节)
                 有符号整型 :-128 ~ 127
                 无符号整型 :0 ~ 255
                 例 :
                        age tinyint unsigned
            3. smallint 小整型 (占据2个字节)
            4. bigint        (极)大整型 (占据8个字节)
        2. 浮点数
            1. float (4个字节,最多表示小数点后7位)
                    用法 :
                        字段名 float(m,n)
                        m表示总位数,n表示小数位的位数
            2. double(8个字节,最多表示小数点后15位)
            3. decimal 最多表示到小数点后28位
                    用法 :
                        decimal(m,n)
        3. 练习
            1. 创建库 studb,在库中创建表stuInfo,要求
                    id   大整型(int)
                    name 字符型 char(10)
                    age  无符号微小整型
                    height 浮点型表示,2位小数位,3位整数位
                    weight 浮点型,3位整数位,3位小数位
                    ---------------------------------
                    create table stuInfo(
                    id int,
                    name char(10),
                    age tinyint unsigned,
                    height float(5,2),
                    weight decimal(6,3)
                    );
            2. 查看表结构
            3. 查看字符集
            4. 插入一条完整记录
            5. 在 id name两个字段下插入两条数据
            6. 查询所有学生的id和姓名
        4. 浮点型使用注意 :
            1. 如果插入的是整数数据,小数位会自动补0
            2. 如果插入数据的小数位超出指定位数,会自动
                 四舍五入
            3. 整数位超出限制,插入失败
    2. 字符类型
        1. 定长 char(长度)
             长度取值范围 :1 ~ 255
        2. 变长 varchar(长度)
             长度取值范围 :1 ~ 65535
             定长与变长的区别 :
             定长 :根据指定的长度固定分配存储空间
                                char(10)
                                存储'a',也要分配10个字符的空间
                            优点 :效率高,速度快
                            缺点 :浪费存储空间

             变长 :在不超过指定长度的情况下,动态分配存储
                            空间
                                varchar(10)
                                存储'a',动态根据数据的字符长度分配空间
                            优点 :节省存储空间
                            缺点 :效率比定长存储要低
             共同点 :
                 给出的长度,就是最大输入的字符数,超出则
                 无法存储
                 例 :
                        name varchar(10)
                        "wangzhaojun" 超出无法存储
        3. 长文本存储
                text
                longtext (4G)
        4. 二进制数据存储
                blob
                longblob (4G)
        5. 数值类型的显示宽度与字符型的最大字符数
                int(11) 显示宽度与存储空间无关
                    借助zerofill关键字,查看整型的显示宽度
                    例 :
                        id int(5) zerofill
                        存储数据 :
                        insert ... (5)  ->显示00005
                        insert ... (1234567)  -> 显示1234567
                        insert ... (123456789012345):
                            error : 超过了当前数据类型的表示范围
                            int unsigned : 2(32) - 1 (42亿多)

                char(10)设置数据的存储空间,超出则无法存储
    3. 枚举类型
            1. enum 类型 (表示单选)
                枚举是一个字符串对象,可以将一些
                不重复的字符串存储成一个预定义的集合,字段存储
                数据时,必须从集合中选择,不在集合范围的都是非法值
                例 :
                    gender enum('男','女','保密');
                    枚举类型会自动为集合中的字符串选项分配下标
                    查询时,可根据下标表示对应的值
                    select * from ...where gender="男";
                    等价于
                    select * from ...where gender=1;
            2. set 类型 (实现多选)
                特殊的枚举类型,用法与enum一致,提供字符串类型
                的集合(选项)
                例 :
                    sportcourse set('篮球',"足球");
                    inert ... values(1,"zhangsan","篮球,足球");

                    
        


总结 : 

1. MySQL数据库的特点:
    关系型数据库,跨平台,支持多种开发语言
2. 启动和连接数据库
    sudo /etc/init.d/mysql start | restart | stop | status
    mysql -hlocalhost -uroot -p123456
3. SQL 语句
    1. 库的管理
        show databases;
        select database();
        create database 库名;
        use 库名;
        show tables;
        drop database 库名;
    2. 表的管理
        use 库名;
        create table 表名(字段名 数据类型,字段名 数据类型);
        insert into 表名 values (行记录),();
        insert into 表名(字段1,字段2) values(字段值1,字段值2);
        select * from 表名;
        select 字段名 from 表名;
        select * from 表名 where 条件;
        desc 表名;
        drop table 表名;
4. 数据类型
    1. 数值类型
        整型 :
            int tinyint bigint smallint
            有无符号 :signed(默认有符号)unsigned(无符号)
        浮点型 :
            float double decimal (有符号)
            使用 :
                float(m,n) m表示总位数 n表示小数位位数
    2. 字符型
        char(m) varchar(m) text blob
        定长 char(m) : 根据指定的最大字符数,固定分配存储
                                     空间,速度快,效率高,浪费空间
        变长 varchar(m) : 在不超过最大字符数的情况下,动态
                                        分配存储空间,节省空间,效率低
        整型的显示宽度与字符的最大个数:
            int(11) char(10)
            11 : 表示整型的显示宽度,跟存储空间无关,跟
                     数据类型的取值范围有关
            10 :表示存储空间,超出无法存入
    3. 枚举类型
        单选 :使用枚举定义字符串集合,作为选项,执行数据
                     存储时必须从给定的集合中选取
        多选 :使用集合定义字符串
                      course set('1','2','3')
                        values ('1,2,3')
        

        

                    

                
        
        

            
            
            
                

        

        

        

        


                
                

            
    
                
                    
                    

                    

        
    

<think>我们面对的问题是:在尝试将root用户的认证方式改为mysql_native_password时,出现错误“Plugin'mysql_native_password'isnotloaded”。这通常是因为在MySQL8.0及以上版本中,默认不再加载mysql_native_password插件。同时,用户还提到一个可能的关联错误:'_mysql_plugin_interface_version_'symbolmissinginlibrary,这通常示插件文件损坏或版本不兼容。根据引用[1],这个错误主要由以下几个原因造成:插件未安装、配置问题、权限问题。因此,我们需要确保插件被正确安装并加载。解决方案步骤:1.**检查插件是否可用**:首先,我们可以登录MySQL,查看当前已加载的插件列,确认mysql_native_password插件是否已加载。```sqlSHOWPLUGINS;```或者```sqlSELECT*FROMinformation_schema.pluginsWHEREPLUGIN_NAME='mysql_native_password';```如果查询结果为空,则示该插件未加载。2.**尝试加载插件**:如果插件未加载,我们可以尝试使用INSTALLPLUGIN命令加载它。但请注意,在MySQL8.0中,这个插件可能被标记为不推荐使用,甚至在某些版本中被移除。如果插件文件存在,我们可以尝试加载:```sqlINSTALLPLUGINmysql_native_passwordSONAME'mysql_native_password.so';```注意:在Windows上,插件文件扩展名为.dll,所以应该是:```sqlINSTALLPLUGINmysql_native_passwordSONAME'mysql_native_password.dll';```如果执行此命令时出现错误,比如“ERROR1127:Can'tfindsymbol'_mysql_plugin_interface_version_'inlibrary”,这通常意味着插件文件损坏或与当前MySQL版本不兼容。3.**修复插件文件问题**:如果出现上述符号缺失的错误,可能需要重新安装MySQL或者从相同版本的MySQL中获取正确的插件文件。步骤如下:-确定MySQL的插件目录,可以通过以下命令查看:```sqlSHOWVARIABLESLIKE'plugin_dir';```-在插件目录中查找文件`mysql_native_password.so`(Linux)或`mysql_native_password.dll`(Windows)。如果文件不存在,则需要从相同版本的MySQL安装包中获取并放入该目录。-如果文件存在,但出现符号错误,则可能是文件损坏或版本不匹配。建议重新安装相同版本的MySQL,或者从官方下载对应版本的插件文件。4.**修改配置文件以加载插件**:我们可以通过修改MySQL的配置文件(my.cnf或my.ini)来确保插件在启动时被加载。在[mysqld]部分添加:```iniplugin-load-add=mysql_native_password.so#或者Windows下:#plugin-load-add=mysql_native_password.dll```然后重启MySQL服务。5.**修改root用户的认证插件**:在确保插件已加载后,再次执行ALTERUSER命令:```sqlALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'1234';```6.**如果以上方法都失败,考虑使用默认的caching_sha2_password**:如果无法加载mysql_native_password插件,可以考虑使用MySQL8.0默认的认证插件caching_sha2_password。但请注意,一些旧的客户端可能不支持这种认证方式。修改命令如下:```sqlALTERUSER'root'@'%'IDENTIFIEDWITHcaching_sha2_passwordBY'your_password';```然后,如果客户端不支持,可能需要更新客户端,或者在连接字符串中指定使用新的认证协议(如MySQLConnector/J8.0以上)。7.**临时解决方案(不推荐)**:如果只是为了临时解决连接问题,可以考虑将root用户切换回旧的认证方式(如果插件确实无法加载,这可能不可行),或者创建一个新的用户并使用旧的认证方式。但更推荐更新客户端以支持新的认证方式。注意:在修改用户认证方式后,需要执行`FLUSHPRIVILEGES;`来刷新权限。根据引用[4],我们还可以考虑使用其他配置库来管理MySQL的配置,但这不是解决当前问题的直接方法。现在,我们将按照上述步骤给出详细的解决方案。具体操作步骤:步骤1:检查插件状态登录MySQL(如果当前无法用root登录,可能需要使用skip-grant-tables方式启动,但这里假设可以登录),执行:SHOWPLUGINS;步骤2:如果未找到mysql_native_password,尝试加载插件INSTALLPLUGINmysql_native_passwordSONAME'mysql_native_password.so';#Linux#或者Windows:INSTALLPLUGINmysql_native_passwordSONAME'mysql_native_password.dll';步骤3:如果加载插件时出现符号错误,则需要修复插件文件-找到MySQL的插件目录:SHOWVARIABLESLIKE'plugin_dir';-检查该目录下是否有对应的插件文件。如果没有,从相同版本的MySQL安装目录中复制一个。-如果有,但加载出错,建议重新安装MySQL或者替换插件文件。步骤4:修改配置文件(可选,确保每次启动都加载)在my.cnf(Linux)或my.ini(Windows)的[mysqld]部分添加:plugin-load-add=mysql_native_password.so#Linux#或者Windows:plugin-load-add=mysql_native_password.dll重启MySQL服务。步骤5:再次尝试修改用户认证方式ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'1234';步骤6:如果仍然失败,考虑使用caching_sha2_passwordALTERUSER'root'@'%'IDENTIFIEDWITHcaching_sha2_passwordBY'1234';然后,更新客户端以支持新的认证方式。另外,如果遇到密码策略问题(如密码太简单),可以临时降低密码策略:```sqlSETGLOBALvalidate_password.policy=LOW;```注意:在MySQL8.0中,默认的密码验证组件是validate_password,如果未安装,则不会强制执行密码策略。可以通过以下命令检查:```sqlSHOWVARIABLESLIKE'validate_password%';```如果以上步骤无法解决,可能需要考虑降级到MySQL5.7(如果可行),因为MySQL5.7默认使用mysql_native_password插件。最后,生成相关问题:</think>### 解决 MySQL 'mysql_native_password' 插件未加载错误及符号缺失问题 #### 🔍 问题原因分析 1. **插件未加载** MySQL 8.0+ 默认不再加载 `mysql_native_password` 插件[^1] 2. **插件文件损坏/缺失** `_mysql_plugin_interface_version_` 符号缺失示插件库文件损坏或版本不兼容 3. **配置问题** 未在配置文件中启用插件加载 4. **版本变更** MySQL 8.4.0+ 移除了该插件支持[^4] #### ✅ 完整解决方案(分步操作) ##### 方法一:通过配置文件修复(推荐) ```ini # 编辑 my.cnf 或 my.ini [mysqld] # 加载插件(解决未加载错误) plugin-load-add = mysql_native_password=mysql_native_password.so # 修复符号缺失问题(二选一) innodb_force_recovery = 6 # 强制恢复模式修复文件损坏 # 或 skip-grant-tables # 跳过权限验证[^1] ``` 1. **重启MySQL服务**: ```bash sudo systemctl restart mysql # Linux # Windows: 服务管理器重启MySQL ``` 2. **验证插件状态**: ```sql SHOW PLUGINS; -- 检查插件状态 SELECT * FROM information_schema.plugins WHERE PLUGIN_NAME = 'mysql_native_password'; -- 确认插件加载[^1] ``` 3. **修改用户认证**: ```sql ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'new_password'; FLUSH PRIVILEGES; ``` 4. **移除恢复模式配置并重启** ##### 方法二:手动修复插件文件(解决符号缺失) 1. 查找插件目录: ```sql SHOW VARIABLES LIKE 'plugin_dir'; ``` 2. 替换损坏文件(需相同MySQL版本): ```bash # Linux示例 sudo cp /path/to/healthy/mysql_native_password.so /usr/lib/mysql/plugin/ sudo chown mysql:mysql /usr/lib/mysql/plugin/mysql_native_password.so ``` 3. 加载插件: ```sql INSTALL PLUGIN mysql_native_password SONAME 'mysql_native_password.so'; ``` ##### 方法三:降级MySQL版本(终极方案) ```dockerfile # Docker示例 FROM mysql:5.7 # 使用支持原生插件的版本 ``` ```bash # Ubuntu 降级示例 sudo apt install mysql-server-5.7 ``` #### ⚠️ 关键注意事项 1. **安全警告** `skip-grant-tables` 模式需在操作后**立即禁用**并重启服务[^1] 2. **文件权限** 插件文件必须属于 `mysql` 用户/组(检查 `ls -l`) 3. **版本兼容性** MySQL 8.4.0+ 已移除该插件,需降级或改用 `caching_sha2_password`[^4] 4. **备份优先** 操作前备份据库:`mysqldump -u root -p --all-databases > backup.sql` #### 🔧 验证修复 ```sql SELECT user, host, plugin, authentication_string FROM mysql.user WHERE user = 'root'; ``` 预期输出: ``` +------+-----------+-----------------------+------------------------+ | user | host | plugin | authentication_string | +------+-----------+-----------------------+------------------------+ | root | % | mysql_native_password | *A4B64... | +------+-----------+-----------------------+------------------------+ ``` #### 💡 替代方案(推荐) 若不依赖旧插件: ```sql -- 使用现代认证方式 ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'SecurePass123!'; -- 更新客户端支持新协议 mysql --default-auth=caching_sha2_password -u root -p ``` #### 📚 相关问题 1. 如何在 MySQL 8.4+ 中兼容旧版客户端认证? 2. 修复插件文件损坏后如何防止再次发生? 3. MySQL 强制恢复模式(innodb_force_recovery)有哪些风险? 4. 如何安全降级 MySQL 而不丢失据? 5. 使用 `caching_sha2_password` 时出现 ERROR 2061 如何解决? > 对于生产环境,**推荐迁移到 `caching_sha2_password`** 而非修复旧插件。若必须使用旧插件,MySQL 5.7 是最稳定的选择[^4]。操作前务必验证插件文件完整性:`ldd /path/to/mysql_native_password.so`(Linux)或 `dumpbin /EXPORTS`(Windows)。 [^1]: 插件加载机制与修复步骤 [^4]: MySQL 版本兼容性说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zero_wangdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值