目录
一、什么是 MariaDB
MariaDB 是一个基于 MySQL 的开源关系型数据库管理系统,由 MySQL 的创始人 Michael Widenius 主导开发 。2009 年,Sun 公司收购 MySQL 后又被 Oracle 收购,这引发开源社区对 MySQL 未来发展的担忧,担心其开源性质改变,于是 MariaDB 应运而生,旨在确保开源数据库的独立性和持续发展。它采用 GPL 授权许可,从诞生之初就致力于保持与 MySQL 的高度兼容性,包括 API 和命令行等方面,这使得它能轻松成为 MySQL 的替代品。在存储引擎方面,MariaDB 使用 XtraDB 来代替 MySQL 的 InnoDB,在性能和功能上有进一步的优化和提升。
相较于 MySQL,MariaDB 具有诸多优势。在兼容性上,绝大多数为 MySQL 编写的应用程序无需大量修改即可直接在 MariaDB 上运行,用户可以轻松实现两者之间的迁移或切换。在性能表现上,MariaDB 进行了大量优化,例如采用更高效的存储引擎,使得查询处理速度更快。同时,它还新增了十多个存储引擎 ,针对不同应用场景提供更适配的选择,像 Aria 适用于快速读写场景,TokuDB 适合大数据量写入场景,Spider 支持水平分片场景等。此外,MariaDB 在功能上也更加丰富,增加了如 WITH 子句、KILL 命令等新特性,为开发者提供了更多便利。
二、MariaDB 与 MySQL 的爱恨情仇
MariaDB 和 MySQL 有着千丝万缕的联系,又在发展过程中走向了不同方向 。从版本对应关系来看,MySQL 5.5 大致对应 MariaDB 5.5,MySQL 5.6 对应 MariaDB 10.0,MySQL 5.7 对应 MariaDB 10.2 ,MySQL 8.0 对应 MariaDB 10.3 及以上版本,但这种对应并非绝对,不同版本在功能特性上有各自的演变。
在功能差异方面,两者各有特点。在存储引擎上,MySQL 默认使用 InnoDB 存储引擎;MariaDB 的默认存储引擎是 Aria,同时集成优化后的 XtraDB,在事务处理、并发控制等方面表现出色,还新增了多种特色存储引擎,像 ColumnStore 适用于大数据分析场景,Spider 可实现跨数据库查询。在数据类型上,MySQL 从 5.7 版本引入原生 JSON 数据类型,支持丰富的 JSON 函数;MariaDB 将 JSON 视为 LONGTEXT 别名,靠 CHECK 约束保证数据有效性,灵活性高但效率稍逊。MariaDB 还创新提供了 INET_ATON、INET6_ATON 和 UUID 等专用数据类型存储 IP 地址和 UUID,MySQL 则多用 VARCHAR 或 CHAR 类型存储,依赖函数处理。从安全和管理功能来看,MySQL 8.0 更改默认身份认证插件为 caching_sha2_password ,提高安全性,还提供 sys 模式辅助数据库管理;MariaDB 支持二进制日志和临时表加密,拥有 AWS 密钥管理插件 ,在加密和云服务集成上有优势。
三、开启 MariaDB 之旅:安装与配置
(一)获取安装源
要开启 MariaDB 的学习和使用之旅,首先得获取安装源。你可以前往 MariaDB 官方下载地址:https://mariadb.org/download/ 。在这个页面,你需要根据自己的系统情况进行选择。比如,若你使用的是 Linux 系统,要明确系统版本,像 CentOS 7、Ubuntu 20.04 等 ,同时还要留意 CPU 架构,常见的有 x86_64 等。若你是 Windows 用户,直接选择对应的 Windows 版本即可。
为了加快下载速度,强烈建议在右侧镜像选项中选择中国的镜像源,像阿里云镜像(https://mirrors.aliyun.com/mariadb/ )、中国科技大学镜像(https://mirrors.ustc.edu.cn/mariadb/ )等都是不错的选择。这些国内镜像不仅下载速度快,而且稳定性高,能为你节省大量等待时间。
(二)安装方式大揭秘
- 在线安装
-
- 以 CentOS 系统为例,在线安装时首先要添加本地 Yum 源。打开终端,使用命令 vim /etc/yum.repos.d/mariadb.repo 来创建一个新的配置文件。接着,将以下内容粘贴进去:
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/[版本号]/centos[系统版本号]-amd64
gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
注意,这里的 [版本号] 和 [系统版本号] 要根据你实际要安装的 MariaDB 版本以及 CentOS 系统版本进行替换,比如你要安装 MariaDB 10.5,CentOS 7 系统,那么 baseurl 就应该是 mariadb-yum-10.5-centos7-amd64安装包下载_开源镜像站-阿里云 。
- 添加完源后,执行 yum -y makecache 命令来生成缓存,这样系统就能识别新添加的源了。
- 然后使用 yum -y remove mysql* 命令先移除系统中可能存在的 MySQL 相关文件(如果之前安装过 MySQL 的话),避免冲突。
- 接着执行 sudo yum install MariaDB-server MariaDB-client 命令开始安装 MariaDB 服务器和客户端。
- 安装完成后,使用 systemctl start mariadb 命令启动 MariaDB 服务;并通过 systemctl enable mariadb 命令设置开机自启,这样下次开机时 MariaDB 就能自动运行了。
- MariaDB 安装完成后,初始登录密码为空,为了安全起见,需要修改密码。执行 mysql_secure_installation 命令,根据提示依次设置 root 密码,是否删除匿名用户,是否禁止 root 远程登录,是否删除测试数据库等。比如设置 root 密码时,输入新密码并确认即可。
- 离线安装
-
- 同样以 CentOS 系统为例,首先要从阿里云镜像站点下载相关文件。在有网络的环境下,打开终端,执行以下下载命令(假设安装 MariaDB 10.5 版本):
yum -y install wget
wget https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/rpms/MariaDB-common-10.5.XX-1.el7.centos.x86_64.rpm
wget https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/rpms/MariaDB-server-10.5.XX-1.el7.centos.x86_64.rpm
wget https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/rpms/MariaDB-server-debuginfo-10.5.XX-1.el7.centos.x86_64.rpm
wget https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/rpms/MariaDB-client-10.5.XX-1.el7.centos.x86_64.rpm
wget https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/rpms/MariaDB-compat-10.5.XX-1.el7.centos.x86_64.rpm
其中 XX 是具体的版本修订号,可根据实际情况获取。
- 将下载好的文件拷贝到离线服务器上。在离线服务器上,使用 rpm -ivh 命令依次安装这些文件,安装顺序一般是先安装 MariaDB-common ,再安装 MariaDB-compat ,然后是 MariaDB-client 和 MariaDB-server ,最后安装 MariaDB-server-debuginfo (如果需要调试信息的话)。例如:rpm -ivh MariaDB-common-10.5.XX-1.el7.centos.x86_64.rpm 。
- 安装完成后,执行 systemctl start mariadb 启动 MariaDB 服务,并通过 systemctl enable mariadb 设置开机自启。之后同样可以使用 mysql -uroot -p 命令登录并修改密码,修改密码的方式和在线安装后的操作一致。
(三)配置你的专属 MariaDB
MariaDB 的配置文件在不同系统中的位置略有不同。在 Linux 系统中,常见的配置文件路径是 /etc/my.cnf 或者 /etc/mysql/my.cnf ,它包含了各种配置参数,用于控制 MariaDB 的运行行为,比如设置数据库存储路径、最大连接数、缓存大小等。在 Windows 系统中,配置文件一般位于 MariaDB 安装目录下,文件名也是 my.cnf 或者 my.ini 。
以修改配置文件实现表名大小写不敏感为例,在 Linux 系统下,打开配置文件,比如使用 vim /etc/my.cnf 命令。在 [mysqld] 部分添加或修改 lower_case_table_names=1 这一行配置。lower_case_table_names 这个参数用来控制表名的大小写敏感性,设置为 1 表示表名在存储和查询时都将转换为小写,从而实现大小写不敏感。同时,为了避免一些 SQL 模式带来的问题,可以设置 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 。修改完成后,保存文件并退出编辑器。最后执行 systemctl restart mariadb 命令重启 MariaDB 服务,使配置生效。这样,在后续的使用中,表名就不再区分大小写了。
四、MariaDB 基础操作:数据库与表的魔法
(一)数据库操作
- 登录数据库:在终端中输入命令 mysql -u root -p ,这里的 -u 表示指定用户名,root 是数据库的超级管理员用户,-p 表示需要输入密码。按下回车键后,系统会提示你输入密码,输入之前设置好的密码即可登录到 MariaDB 数据库。例如,若你在安装时设置的 root 密码为 123456 ,输入密码并回车,成功登录后会看到类似 MariaDB [(none)]> 的提示符,这就表示你已经进入了 MariaDB 数据库环境 。
- 查看所有数据库:登录成功后,在 MariaDB [(none)]> 提示符下输入 show databases; 命令,注意命令末尾的分号不能省略,它用于表示一条 SQL 语句的结束。执行该命令后,会列出当前服务器上所有的数据库,结果示例如下:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
其中,information_schema 存储了数据库的元数据信息,如数据库、表、列等的定义;mysql 数据库存放了用户权限、存储过程等系统相关的数据;performance_schema 主要用于性能监控;test 是一个测试数据库,默认安装时可能会存在 。
3. 创建数据库:创建数据库可以使用 CREATE DATABASE 语句,基本语法为 CREATE DATABASE [数据库名] [CHARACTER SET 字符集]; 。例如,要创建一个名为 school 的数据库,并指定字符集为 utf8mb4 ,可以执行以下命令:CREATE DATABASE school CHARACTER SET utf8mb4; 。这里指定 utf8mb4 字符集是因为它能支持更多的字符,包括一些特殊符号和表情符号等,在处理多语言或包含特殊字符的数据时非常有用。执行该命令后,如果没有报错,就表示数据库创建成功。
4. 使用数据库:当创建好数据库后,要对该数据库进行操作,就需要先使用它。使用数据库的命令是 USE [数据库名]; 。比如要使用刚才创建的 school 数据库,在 MariaDB [(none)]> 提示符下输入 USE school; ,执行后会看到提示 Database changed ,这就表示你已经切换到 school 数据库,后续执行的 SQL 语句都会在这个数据库中生效,此时提示符也会变为 MariaDB [school]> 。
(二)表操作
- 创建表:以在 school 数据库中创建学生表 students 为例,创建表的命令如下:
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
gender ENUM('男', '女'),
enrollment_date DATE
);
- id INT AUTO_INCREMENT PRIMARY KEY :定义了一个名为 id 的字段,数据类型为整数 INT 。AUTO_INCREMENT 表示该字段的值会自动递增,每插入一条新记录,id 的值就会自动加 1 。PRIMARY KEY 表示该字段是主键,主键具有唯一性和非空性,用于唯一标识表中的每一条记录,在查询、关联等操作中起到关键作用。
- name VARCHAR(50) NOT NULL :name 字段用于存储学生姓名,数据类型为可变长度字符串 VARCHAR ,最大长度为 50 个字符。NOT NULL 约束表示该字段不能为空,插入数据时必须提供学生姓名。
- age INT :age 字段用于存储学生年龄,数据类型为整数 INT ,可以为空,如果插入数据时不提供年龄值,该字段会被设置为 NULL 。
- gender ENUM('男', '女') :gender 字段用于存储学生性别,数据类型为枚举类型 ENUM ,它只能取指定列表中的值,这里只能是 男 或 女 ,这样可以保证数据的规范性,避免输入错误的性别值。
- enrollment_date DATE :enrollment_date 字段用于存储学生的入学日期,数据类型为日期类型 DATE ,只存储年、月、日信息,插入数据时要按照 YYYY - MM - DD 的格式,如 2023 - 09 - 01 。
- 查看表信息:
-
- 查看当前数据库所有表信息:在 MariaDB [school]> 提示符下输入 show tables; 命令,执行后会列出当前数据库 school 中的所有表,结果示例如下:
+------------------+
| Tables_in_school |
+------------------+
| students |
+------------------+
这里显示只有一个 students 表,如果创建了其他表,也会一并列出。
- 查看某表数据结构:要查看 students 表的数据结构,可以使用 desc students; 命令,执行结果如下:
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| age | int(11) | YES | | NULL | |
| gender | enum('男','女') | YES | | NULL | |
| enrollment_date| date | YES | | NULL | |
+----------------+--------------+------+-----+---------+----------------+
结果中每一列的含义分别是:Field 表示字段名;Type 表示字段的数据类型;Null 表示该字段是否可以为空,YES 表示可以为空,NO 表示不能为空;Key 表示该字段是否是键,PRI 表示主键;Default 表示该字段的默认值;Extra 表示额外信息,如 auto_increment 表示自动递增 。
3. 修改表:
- 修改字段数据类型:若要将 students 表中 age 字段的数据类型从 INT 修改为 SMALLINT (SMALLINT 也是整数类型,但占用空间比 INT 小),可以使用以下命令:ALTER TABLE students MODIFY age SMALLINT; 。执行该命令后,age 字段的数据类型就被修改为 SMALLINT 。
- 修改字段排列顺序:假设要将 students 表中的 gender 字段移动到 name 字段后面,可以使用以下命令:ALTER TABLE students MODIFY gender ENUM('男', '女') AFTER name; 。执行后,gender 字段就会排列在 name 字段之后。
- 修改字段名:若要将 students 表中的 enrollment_date 字段改名为 entry_date ,并同时修改数据类型为 DATETIME (DATETIME 类型可以存储日期和时间),可以使用以下命令:ALTER TABLE students CHANGE enrollment_date entry_date DATETIME; 。这里 CHANGE 关键字后面跟着旧字段名、新字段名以及新的数据类型。
- 删除外键:如果 students 表中有外键约束(假设外键名为 students_fk ),要删除该外键,可以使用以下命令:ALTER TABLE students DROP FOREIGN KEY students_fk; 。在执行删除外键操作前,最好先确认该外键是否还需要,因为删除外键可能会影响数据的完整性和一致性。
- 修改存储引擎:假设 students 表当前的存储引擎是 InnoDB ,要将其修改为 MyISAM ,可以使用以下命令:ALTER TABLE students ENGINE = MyISAM; 。InnoDB 和 MyISAM 是两种不同的存储引擎,InnoDB 支持事务、行级锁,适合处理大量并发事务的场景;MyISAM 不支持事务,表级锁,在读取大量数据时性能较好,选择哪种存储引擎要根据具体的业务需求来决定。
- 删除字段:若要删除 students 表中的 age 字段,可以使用以下命令:ALTER TABLE students DROP age; 。执行该命令后,age 字段及其数据将被从表中删除,所以在执行删除字段操作时要谨慎,确保该字段不再需要。
- 添加字段:若要在 students 表中添加一个名为 phone_number ,数据类型为 VARCHAR(20) 的字段,可以使用以下命令:ALTER TABLE students ADD phone_number VARCHAR(20); 。执行后,phone_number 字段就会被添加到 students 表中,默认会添加到表的最后一列。如果要指定添加到某字段之后,可以使用 AFTER 关键字,如 ALTER TABLE students ADD phone_number VARCHAR(20) AFTER name; ,这样 phone_number 字段就会添加到 name 字段之后。
- 重命名表:若要将 students 表重命名为 student_information ,可以使用以下命令:ALTER TABLE students RENAME TO student_information; 。执行后,表名就会被修改,对该表的后续操作都要使用新的表名。
五、数据操作:增删改查的艺术
(一)插入数据
在 MariaDB 中,插入数据使用INSERT INTO语句,其基本语法如下:
INSERT INTO 表名 [(字段1, 字段2, ...)] VALUES (值1, 值2, ...);
其中,表名是要插入数据的表的名称,(字段1, 字段2, ...)是可选的字段列表,如果省略字段列表,则需要按照表中字段的顺序依次插入所有字段的值;(值1, 值2, ...)是要插入的具体数据值,值的顺序要与字段列表的顺序一致。
例如,向之前创建的students表中插入一条学生记录:
INSERT INTO students (name, age, gender, enrollment_date) VALUES ('张三', 20, '男', '2023-09-01');
这条语句向students表中插入了一个名为 “张三”,年龄为 20 岁,性别为男,入学日期为2023 - 09 - 01的学生记录。因为id字段设置了AUTO_INCREMENT,所以插入时不需要为其指定值,它会自动生成。
也可以一次插入多条记录,语法如下:
INSERT INTO 表名 [(字段1, 字段2, ...)] VALUES (值1_1, 值1_2, ...), (值2_1, 值2_2, ...), ...;
例如,向students表中插入多条记录:
INSERT INTO students (name, age, gender, enrollment_date) VALUES
('李四', 21, '女', '2023-09-02'),
('王五', 22, '男', '2023-09-03');
这样就一次性向students表中插入了两条记录。
(二)查询数据
- 基本查询:查询表中所有数据使用SELECT语句,语法如下:
SELECT * FROM 表名;
例如,查询students表中的所有学生信息:
SELECT * FROM students;
执行该语句后,会返回students表中的所有字段和所有行的数据,展示出所有学生的详细信息。
2. 条件查询:通过WHERE子句可以实现条件查询,只返回满足特定条件的数据。语法如下:
SELECT 字段1, 字段2, ... FROM 表名 WHERE 条件;
例如,查询students表中年龄大于 20 岁的学生姓名和年龄:
SELECT name, age FROM students WHERE age > 20;
这里的WHERE age > 20就是条件,只有年龄大于 20 岁的学生记录才会被返回,并且只返回name和age这两个字段的数据。
3. 结果排序:使用ORDER BY子句可以对查询结果进行排序,默认是升序(ASC),也可以指定降序(DESC)。语法如下:
SELECT 字段1, 字段2, ... FROM 表名 ORDER BY 字段名 [ASC|DESC];
例如,按照年龄对students表中的学生进行升序排序,并返回所有字段:
SELECT * FROM students ORDER BY age ASC;
如果要按照年龄降序排序,可以将ASC改为DESC:
SELECT * FROM students ORDER BY age DESC;
- 限定结果集:使用LIMIT子句可以限定查询结果的数量和范围。语法如下:
SELECT 字段1, 字段2, ... FROM 表名 LIMIT [偏移量,] 数量;
其中,偏移量表示从第几行开始返回数据(偏移量从 0 开始),数量表示返回的行数。如果省略偏移量,则默认从第一行开始返回。
例如,返回students表中前 3 条学生记录:
SELECT * FROM students LIMIT 3;
如果要返回第 3 条到第 5 条学生记录(偏移量为 2,因为从 0 开始计数):
SELECT * FROM students LIMIT 2, 3;
这样就可以灵活地控制查询结果的数量和范围,在处理大量数据时非常有用。
(三)更新数据
更新数据使用UPDATE语句,基本语法如下:
UPDATE 表名 SET 字段1 = 值1, 字段2 = 值2, ... [WHERE 条件];
其中,表名是要更新数据的表的名称;SET后面跟着要更新的字段和对应的值;WHERE子句是可选的,用于指定更新的条件,如果省略WHERE子句,则会更新表中的所有行。
例如,将students表中id为 1 的学生的年龄更新为 23 岁:
UPDATE students SET age = 23 WHERE id = 1;
如果要同时更新多个字段,比如将id为 1 的学生的年龄更新为 23 岁,性别更新为 “女”:
UPDATE students SET age = 23, gender = '女' WHERE id = 1;
在使用UPDATE语句时,一定要谨慎使用没有WHERE条件的更新操作,以免误更新大量数据。
(四)删除数据
删除数据使用DELETE FROM语句,语法如下:
DELETE FROM 表名 [WHERE 条件];
其中,表名是要删除数据的表的名称;WHERE子句是可选的,用于指定删除的条件,如果省略WHERE子句,则会删除表中的所有行。
例如,删除students表中id为 2 的学生记录:
DELETE FROM students WHERE id = 2;
如果要删除students表中所有年龄大于 30 岁的学生记录:
DELETE FROM students WHERE age > 30;
同样,在执行删除操作时,尤其是没有WHERE条件的删除操作,要格外小心,避免误删重要数据。
六、权限管理:保障数据库安全
(一)用户管理
- 创建用户:在 MariaDB 中,使用CREATE USER语句来创建用户。假设我们要创建一个名为test_user的用户,允许其从本地主机localhost登录,并设置密码为123456,可以使用以下命令:
CREATE USER 'test_user'@'localhost' IDENTIFIED BY '123456';
这里,'test_user'是用户名,'localhost'表示该用户只能从本地主机登录,如果希望该用户可以从任意远程主机登录,可以将'localhost'替换为'%' 。IDENTIFIED BY '123456'用于指定用户的登录密码。创建用户成功后,虽然用户已经存在,但此时该用户还没有任何操作权限。
2. 删除用户:当某个用户不再需要时,可以使用DROP USER语句来删除用户。例如,要删除刚才创建的test_user用户,命令如下:
DROP USER 'test_user'@'localhost';
执行该命令后,test_user用户及其相关权限将被从数据库中删除。需要注意的是,在执行删除用户操作时要谨慎确认,因为删除操作是不可逆的,如果误删可能会影响到相关的业务系统。
(二)权限管理
- 授权:授权是指给用户赋予对数据库的操作权限,使用GRANT语句来实现。例如,要给test_user用户授予对school数据库中所有表的查询、插入和更新权限,可以使用以下命令:
GRANT SELECT, INSERT, UPDATE ON school.* TO 'test_user'@'localhost';
这里,SELECT, INSERT, UPDATE是具体的权限,school.*表示school数据库中的所有表,'test_user'@'localhost'指定了要授权的用户。如果要授予用户对所有数据库和表的所有权限,可以使用以下命令:
GRANT ALL ON *.* TO 'test_user'@'localhost';
执行授权命令后,还需要使用FLUSH PRIVILEGES命令来刷新权限表,使授权设置立即生效:
FLUSH PRIVILEGES;
- 查看权限:可以使用SHOW GRANTS语句来查看某个用户的权限。例如,查看test_user用户的权限,命令如下:
SHOW GRANTS FOR 'test_user'@'localhost';
执行结果会显示该用户被授予的所有权限,类似如下内容:
+-------------------------------------------------------------------+
| Grants for test_user@localhost |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test_user`@`localhost` |
| GRANT SELECT, INSERT, UPDATE ON `school`.* TO `test_user`@`localhost`|
+-------------------------------------------------------------------+
通过查看权限,可以清楚了解用户的权限范围,以便进行权限管理和安全审计 。如果发现用户权限设置不合理,可以使用REVOKE语句收回相应权限,语法与GRANT类似,只是将GRANT替换为REVOKE即可。例如,要收回test_user用户对school数据库的更新权限,可以执行:
REVOKE UPDATE ON school.* FROM 'test_user'@'localhost';
同样,收回权限后也需要执行FLUSH PRIVILEGES命令来刷新权限表,使收回操作生效。
七、常见问题与解决:排忧解难
在安装和使用 MariaDB 的过程中,难免会遇到各种问题,下面为大家整理一些常见问题及对应的解决方法。
(一)安装报错
- 软件包冲突:在安装 MariaDB 时,如果系统中已经安装了 MySQL 相关软件包,可能会出现软件包冲突的情况。例如,安装 MariaDB - common 软件包时,提示与 mysql - community - common 冲突。
-
- 原因:MariaDB 和 MySQL 有许多共同的二进制文件和配置文件,同时安装会导致冲突。
-
- 解决方法:先停止正在运行的 MySQL 服务,命令为sudo systemctl stop mysqld (如果是 CentOS 系统)。然后卸载当前的 MySQL - community - common 包,执行sudo yum remove mysql - community - common (CentOS 系统下使用 yum 命令)。接着卸载 MariaDB - common 包(因为去掉了 MySQL 的冲突源),命令为sudo yum remove MariaDB - common 。清理 yum 缓存sudoyumcleanall ,之后重新安装 MariaDB,创建 mariadb.repo 源文件,如使用阿里源,内容如下:
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/[版本号]/centos[系统版本号]-amd64
gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM - GPG - KEY - MariaDB
gpgcheck=1
将[版本号]和[系统版本号]替换为实际版本,然后执行yum install -y MariaDB - server MariaDB - client安装 MariaDB。
2. 依赖缺失:安装过程中提示依赖的某些库缺失,如libssl.so.10: cannot open shared object file 。
- 原因:系统缺少 MariaDB 运行所需的依赖库。
- 解决方法:使用包管理器安装缺失的依赖库。例如,在 CentOS 系统中,如果缺少 openssl 库,可以执行sudo yum install openssl ;在 Ubuntu 系统中,执行sudo apt - get install openssl 。
(二)登录失败
- 密码错误或忘记密码:输入正确密码仍提示Access denied for user ,或者忘记了 root 密码。
-
- 原因:密码设置错误、密码被修改忘记、权限问题等。
-
- 解决方法:以 CentOS 系统为例,首先停止数据库服务sudo systemctl stop mariadb 。然后使用mysqld_safe来启动 mysqld 服务器,命令为sudo mysqld_safe --user=mysql --skip - grant - tables --skip - networking & 。接着登录数据库mysql -u root mysql ,登录成功后修改 root 用户密码,执行UPDATE user SET PASSWORD=PASSWORD('newpassword') where USER='root'; ,将newpassword替换为新密码。修改完成后执行FLUSH PRIVILEGES; 刷新权限,最后退出数据库并使用新密码重新登录mysql -uroot -p ,输入新密码即可。
- 远程登录失败:无法从远程主机登录 MariaDB 数据库。
-
- 原因:可能是没有授权远程登录权限、my.cnf配置文件中绑定了本地地址、防火墙拦截等。
-
- 解决方法:首先检查my.cnf配置文件(一般路径为/etc/my.cnf或/etc/mysql/my.cnf ),查看是否有bind - address = 127.0.0.1这一行配置,如果有,将其注释掉或者修改为bind - address = 0.0.0.0 ,表示允许所有地址连接。然后授权远程登录权限,登录数据库后执行GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword'; ,将yourpassword替换为实际密码。最后刷新权限FLUSH PRIVILEGES; 。如果是防火墙拦截,需要开放 MariaDB 的端口(默认 3306),在 CentOS 系统中,执行sudo firewall - cmd --zone=public --add - port=3306/tcp --permanent ,然后sudo firewall - cmd --reload 使设置生效 。
(三)启动失败
- 配置文件错误:修改 MariaDB 配置文件后,启动服务时报错。
-
- 原因:配置文件语法错误、配置参数设置不合理等。
-
- 解决方法:首先检查配置文件语法,配置文件需要严格遵循 INI 格式,多余的空格或符号缺失都可能导致解析失败。可以使用命令mysqlcheck --config - file=/etc/my.cnf (假设配置文件路径为/etc/my.cnf )来测试配置文件是否有语法错误。如果是配置参数设置不合理,如内存参数设置过高超出系统可用内存,导致服务崩溃,可以根据物理内存的 70% 左右来调整相关参数,如innodb_buffer_pool_size等。
- 端口冲突:启动 MariaDB 时提示Port 3306 is already in use 。
-
- 原因:3306 端口被其他进程占用。
-
- 解决方法:找出占用该端口的程序并终止。在 Linux 系统中,可以使用netstat -tunlp | grep 3306命令查看占用 3306 端口的进程信息,然后使用kill -9 [进程ID]命令终止该进程([进程ID]替换为实际的进程 ID)。如果不想终止占用端口的进程,也可以在 MariaDB 的配置文件my.cnf中修改默认端口,在[mysqld]部分添加或修改port = [新端口号] ,将[新端口号]替换为未被占用的端口,修改后重启 MariaDB 服务使设置生效。
八、总结与展望:继续前行
在本次 MariaDB 学习之旅中,我们从 MariaDB 的起源与优势出发,深入了解了它与 MySQL 的关系和区别。通过安装与配置环节,我们成功搭建起属于自己的 MariaDB 环境 。在数据库与表的操作部分,学会了创建、修改和管理数据库及表,掌握了数据的增删改查操作,还了解了权限管理,保障数据库安全 。同时,针对安装和使用过程中可能出现的问题,也掌握了相应的解决方法。
然而,这只是 MariaDB 学习的基础,它还有更多强大的功能等待大家去探索。例如,在实际应用中,还可以学习 MariaDB 的主从复制,实现读写分离,提升系统性能;了解存储过程和触发器,实现更复杂的数据逻辑处理;探索其在大数据处理和高并发场景下的优化策略等。希望大家能继续深入学习和实践,将 MariaDB 运用到实际项目中,不断积累经验,提升自己的数据库技能。