
Linux-MariaDB数据库简介CentOS7 完整讲解 MariaDB 部署安装、配置文件分层结构基础 SQL 增删改查数据库用户与精细化权限管理逻辑 / 物理备份恢复企业数据库主流架构主从复制原理与实操。一、数据库基础概念数据库分类关系型数据库使用二维表类似 Excel 表格存储数据代表产品MySQL / MariaDB、Oracle、PostgreSQL。NoSQL 非关系型数据库Not Only SQL作为关系库补充代表Redis、MongoDB。MariaDB 是 MySQL 的开源社区分支完全兼容 MySQL 语法、APICentOS7 默认数据库。关系库组成层级数据库database→ 多张数据表 table → 行记录、列字段。行一条完整记录列字段定义数据类型二、MariaDB 部署安装1、安装软件包# 安装服务端、客户端工具 [rootserver ~]# yum install -y mariadb-server mariadb # 开机自启并且立刻启动服务 [rootserver ~]# systemctl enable --now mariadb # 防火墙放行mysql 3306端口 [rootserver ~]# firewall-cmd --permanent --add-servicemysql [rootserver ~]# firewall-cmd --reload2、安全初始化安装完数据库默认存在匿名用户、test 测试库执行安全加固脚本。[rootserver ~]# mysql_secure_installation交互式操作要点设置 root 管理员密码禁止 root 远程登录删除匿名账号删除 test 演示数据库3、进程说明mysqld_safe守护监控进程root 运行监控 mysqld 崩溃自动重启mysqld数据库核心工作进程使用 mysql 普通用户运行保障安全systemd 管理环境systemd 直接接管守护逻辑不一定看到 mysqld_safe。查看进程树[rootserver ~]# pstree | grep mysqld4、配置文件分层结构表格文件路径作用/etc/my.cnf主总配置优先级最高会加载/etc/my.cnf.d/*.cnf/etc/my.cnf.d/server.cnf服务端 mysqld 配置端口、监听地址、数据目录、存储引擎/etc/my.cnf.d/client.cnf客户端配置mysql 命令默认账号、密码、主机、提示符server.cnf 常用参数写在[mysqld]段落[mysqld] port3306 bind-address0.0.0.0 # 监听所有网卡允许远程访问 datadir/var/lib/mysql default-storage-engineInnoDB # skip-networking1 # 开启后只允许本地socket连接关闭TCP网络修改配置后重启服务生效[rootserver ~]# systemctl restart mariadb5、登录数据库方式 1本地 socket 登录[rootserver ~]# mysql -u root -p Enter password: MariaDB [(none)]方式 2TCP 远程登录[rootclient ~]# mysql -u user -p123 -h 10.1.8.11方式 3非交互执行 SQL适合脚本[rootserver ~]# mysql -u root -p -e show databases;客户端配置简化登录编辑/etc/my.cnf.d/client.cnf[client] userroot password你的密码 prompt\\u\\h [\\d] 保存后直接输入mysql即可登录无需账号密码。三、基础 SQL 语句实操SQL 关键字习惯大写库名表名区分大小写语句末尾分号;结束。1、数据库库操作-- 查看全部数据库 SHOW DATABASES; -- 切换使用某个数据库 USE inventory; -- 创建数据库 CREATE DATABASE webapp; -- 删除数据库危险全部数据丢失 DROP DATABASE webapp;系统自带库说明mysql系统库保存用户账号、权限information_schema元数据保存表、字段信息performance_schema性能监控数据2、数据表操作查看库里面的表USE inventory; SHOW TABLES;查看表结构DESCRIBE product;字段含义Field字段名Type数据类型Null是否允许为空Key主键 PRIExtraauto_increment 自增CRUD 增删改查查询 SELECT-- 查询整张表全部内容 SELECT * FROM product; -- 只查询指定列 SELECT name,price,stock FROM product; -- WHERE条件过滤 SELECT * FROM product WHERE price 100; -- 条件运算符 BETWEEN IN LIKE AND OR SELECT * FROM product WHERE id BETWEEN 1 AND 3; SELECT * FROM product WHERE name LIKE %Server%; -- 排序 ORDER BY desc降序 SELECT * FROM product ORDER BY price DESC; -- 聚合函数 avg max min sum count SELECT avg(price) FROM product; SELECT sum(stock) FROM product; -- GROUP BY分组统计 SELECT id_category,sum(stock) FROM product GROUP BY id_category; -- 多表关联查询 SELECT product.name,product.price FROM product,category WHERE product.id_category category.id AND category.nameServers;插入 INSERTINSERT INTO staff(id,name,age) VALUES (1,zhangsan,22);更新 UPDATE⚠️不加 WHERE 条件整张表全部更新生产严禁UPDATE staff SET age25 WHERE id1;删除 DELETE⚠️不加 WHERE 条件清空整张表DELETE FROM staff WHERE id1;创建表CREATE TABLE staff( id INT(11) NOT NULL, name VARCHAR(100) NOT NULL, age INT(11) DEFAULT 10 );删除表DROP TABLE staff;四、数据库用户与权限管理MariaDB 用户和 Linux 系统用户相互独立格式用户名访问主机user%代表 user 可以从任意地址登录userlocalhost仅本地登录。1、创建用户CREATE USER user% IDENTIFIED BY Redhat123;2、GRANT 授予权限授权语法GRANT 权限列表 ON 库名.表名 TO 用户主机; FLUSH PRIVILEGES; --刷新权限权限作用范围*.*全局所有库所有表DBA 管理员webapp.*webapp 库下面所有表webapp.userwebapp 库中 user 单张表列级别webapp.user(name,phone)只允许操作指定列常用权限SELECT查询INSERT插入UPDATE修改DELETE删除CREATE建库建表DROP删除库表ALL PRIVILEGES全部权限。示例-- 给user对inventory库全部读写权限 GRANT SELECT,INSERT,UPDATE,DELETE ON inventory.* TO user%; FLUSH PRIVILEGES; -- 管理员全部权限 GRANT ALL PRIVILEGES ON *.* TO rootlocalhost WITH GRANT OPTION;3、查看用户权限SHOW GRANTS FOR user%;4、回收权限 REVOKEREVOKE DELETE ON inventory.* FROM user%; FLUSH PRIVILEGES;5、删除用户DROP USER user%;6、重置密码root 忘记密码恢复步骤修改/etc/my.cnf.d/server.cnf[mysqld]添加skip-grant-tables1重启 mariadb 服务[rootserver ~]# systemctl restart mariadb无密码登录修改 root 密码[rootserver ~]# mysql -u root USE mysql; UPDATE user SET passwordPASSWORD(新密码) WHERE userroot; FLUSH PRIVILEGES; exit注释掉skip-grant-tables1重启数据库恢复权限校验。五、数据库备份与恢复两种备份类型物理备份直接拷贝数据库原始数据目录/var/lib/mysql速度快需要停止数据库跨系统兼容性差。逻辑备份 mysqldump导出 SQL 文本运行时备份兼容性好速度相对慢生产最常用。1、mysqldump 逻辑备份# 备份单个库不包含create database语句 [rootserver ~]# mysqldump -u root -p inventory /backup/inventory.sql # -B参数备份同时包含创建数据库语句 [rootserver ~]# mysqldump -u root -p -B inventory /backup/inventory-b.sql # 备份全部所有库 [rootserver ~]# mysqldump -u root -p -A /backup/all-db.sql2、逻辑备份恢复# 方式一shell重定向导入 [rootserver ~]# mysql -u root -p inventory /backup/inventory.sql # 方式二mysql命令行source导入 [rootserver ~]# mysql -u root -p MariaDB [(none)] source /backup/inventory-b.sql;注意不带-B参数的备份文件恢复前需要手动CREATE DATABASE并且USE数据库。3、物理备份实操停机拷贝# 停止数据库 [rootserver ~]# systemctl stop mariadb # 拷贝数据目录 [rootserver ~]# cp -a /var/lib/mysql /backup/mysql-backup # 恢复 [rootserver ~]# rm -rf /var/lib/mysql [rootserver ~]# cp -a /backup/mysql-backup /var/lib/mysql [rootserver ~]# chown -R mysql:mysql /var/lib/mysql # 启动服务 [rootserver ~]# systemctl start mariadb六、MySQL/MariaDB 主从复制作用实现读写分离、数据备份主库负责写入从库同步主库数据可以承担查询读流量。复制原理流程主库 Master客户端执行写操作变更记录写入binlog 二进制日志。从库 Slave I/O 线程连接主库拉取 binlog 日志写入本地 relay-log 中继日志。从库 SQL 线程读取中继日志重放 SQL在从库复现数据变更。复制三种模式异步复制默认主库写完 binlog 直接返回客户端不等从库确认性能高有数据丢失风险。半同步复制主库等待至少一台从库收到 binlog 才返回超时降级异步兼顾安全和性能。全同步复制等待所有从库执行完成性能很差原生不支持。主从部署实操环境规划表格主机IP角色db110.1.8.11master 主库db210.1.8.12slave 从库①主库配置 /etc/my.cnf.d/master.cnf[mysqld] server_id1 log_binmysql-bin binlog_formatROW relay_logmysql-relay-bin binlog-ignore-dbinformation_schema binlog-ignore-dbperformance_schema binlog-ignore-dbsys重启服务[rootdb1 ~]# systemctl restart mariadb创建复制账号给从库使用GRANT replication slave,replication client ON *.* TO repl10.1.8.12 IDENTIFIED BY Repl123; FLUSH PRIVILEGES; -- 查看主库binlog文件名和position偏移量记录后面从库要使用 SHOW MASTER STATUS\G②从库配置 /etc/my.cnf.d/master.cnfserver_id 不能和主库重复[mysqld] server_id2 log_binmysql-bin binlog_formatROW relay_logmysql-relay-bin binlog-ignore-dbinformation_schema binlog-ignore-dbperformance_schema binlog-ignore-dbsys重启服务[rootdb2 ~]# systemctl restart mariadb从库配置连接主库填入主库 IP、repl 账号密码、binlog 文件名、positionCHANGE MASTER TO master_host10.1.8.11, master_userrepl, master_passwordRepl123, master_port3306, master_log_filemysql-bin.000003, master_log_pos327, master_connect_retry30; -- 启动复制 START SLAVE; -- 查看复制状态 SHOW SLAVE STATUS\G关键检查两项必须为 YesSlave_IO_Running: YesSlave_SQL_Running: Yes③测试验证主库创建库、插入数据观察从库是否自动同步到数据。主从常见问题IO 线程 No网络不通、防火墙拦截、账号密码错误、IP 不对。SQL 线程 No主从数据不一致、主键冲突需要跳过冲突或者重新全量备份重建主从。Seconds_Behind_Master代表主从复制延迟秒数。七、企业数据库架构简单科普基础一主多从简单无自动故障切换读请求分发从库读写分离。MHA传统企业经典高可用故障自动切换主库成熟稳定。MGRMySQL Group Replication官方组复制新一代强一致性。分库分表单机 MySQL 写入存在上限大流量业务做水平拆分搭配 Redis 缓存扛读流量。小结MariaDB 是 MySQL 社区分支配置文件分层my.cnf总配置my.cnf.d/*.cnf拆分服务端、客户端配置。SQLDDL 定义库表DML 增删改查DCL 用户授权UPDATE/DELETE 不加 WHERE 会操作整张表生产禁止。用户格式userhost权限粒度分全局、库、表、列最小权限原则不要随便给 ALL PRIVILEGES。备份mysqldump 逻辑备份导出 SQL物理备份直接拷贝数据目录需要停机。主从复制依靠 binlogrelay‑log异步复制性能高半同步提升数据安全部署注意 server‑id 不能重复Slave_IO_Running、Slave_SQL_Running必须全部 Yes 才算正常工作。