一、环境规划
单机测试(服务端+客户端)
| 主机名 | IP地址 | 角色 |
|---|---|---|
| mariadb-server | 10.1.8.10/24 | MariaDB服务端 |
| mariadb-client | 10.1.8.11/24 | 远程客户端 |
主从复制架构
| 主机名 | IP地址 | 角色 |
|---|---|---|
| mariadb-server1 | 10.1.8.10/24 | 主库Master |
| mariadb-server2 | 10.1.8.11/24 | 从库Slave |
二、系统基础网络配置
1. 主机名设置
bash
hostnamectl set-hostname mariadb-server
2. 静态IP配置
bash
nmcli connection modify ens33 ipv4.method manual \
ipv4.addresses 10.1.8.10/24 \
ipv4.gateway 10.1.8.2 \
ipv4.dns 10.1.8.2 autoconnect yes
nmcli connection up ens33
三、MariaDB 安装与初始化(CentOS7 yum)
1. 安装服务端
bash
yum install -y mariadb mariadb-server
# 启动+开机自启
systemctl start mariadb
systemctl enable mariadb
# 查看运行状态
systemctl status mariadb
2. 生产安全初始化(必执行)
bash
mysql_secure_installation
交互步骤统一选择y:
- 初始无root密码,直接回车
- 设置root密码:
y - 删除匿名测试用户:
y - 禁止root账号远程登录:
y - 删除test测试库:
y - 刷新权限立即生效:
y
3. 数据库登录方式
bash
# 本地快捷登录
mysql -uroot -p
# 指定IP+端口登录
mysql -uroot -p -h127.0.0.1 -P3306
4. 客户端安装(仅远程机器执行)
bash
yum install mariadb -y
# 远程连接服务端
mysql -uadmin -p123456 -h10.1.8.10 -P3306
5. 放行防火墙3306端口
bash
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
四、核心基础SQL语句(每条以;结尾)
1. 数据库库操作
sql
-- 查看所有库
show databases;
-- 创建普通数据库
create database school;
-- 指定utf8mb4字符集(支持emoji,推荐)
create database school2 default character set utf8mb4 collate utf8mb4_general_ci;
-- 切换使用数据库
use school;
-- 查看当前所在库
select database();
-- 删除数据库
drop database school2;
2. 数据表操作
sql
-- 查看当前库所有表
show tables;
-- 创建学生表
create table student(
id int primary key auto_increment,
name varchar(20),
age int
);
-- 查看表字段结构
desc student;
-- 查看完整建表语句
show create table student;
-- 删除数据表
drop table student2;
3. DML增删改查(业务常用)
sql
-- 批量插入数据
insert into student(name,age) values('zhangsan',18),('lisi',20);
-- 查询全表数据
select * from student;
-- 条件过滤查询
select * from student where age>18;
-- 更新数据(务必加where条件)
update student set age=19 where id=1;
-- 删除指定数据(务必加where条件)
delete from student where id=2;
4. 用户创建与权限管理
创建登录账号
sql
-- 仅本地localhost登录
create user 'admin'@'localhost' identified by '123456';
-- 允许任意IP远程登录 %
create user 'admin'@'%' identified by '123456';
权限分配
sql
-- 给admin授予school库全部权限
grant all privileges on school.* to 'admin'@'%';
-- 刷新权限生效
flush privileges;
-- 查看指定用户权限
show grants for 'admin'@'%';
-- 删除用户
drop user 'test'@'%';
权限说明:
*.*:服务器所有数据库、所有表school.*:仅school库下全部数据表
五、MariaDB 配置文件说明
- 主配置文件:
/etc/my.cnf - 子配置目录:
/etc/my.cnf.d/*.cnf - 推荐服务端配置
/etc/my.cnf.d/server.cnf
ini
[mysqld]
server-id=1 # 实例唯一ID,主从必须不同
datadir=/var/lib/mysql # 数据存储目录
bind-address=0.0.0.0 # 监听所有IP,允许远程访问
character-set-server=utf8mb4 # 默认字符集
log_bin=mysql-bin # 开启二进制日志(主从必备)
binlog_format=mixed # binlog日志格式
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
修改配置后重启服务生效:
bash
systemctl restart mariadb
六、MariaDB 一主一从复制原理与实操
1. 主从复制核心原理图
2. 核心组件说明
- 主库 binlog(二进制日志)
记录所有增删改、建表等数据变更操作,是同步数据源。 - 从库 relay log(中继日志)
缓存从主库拉取的binlog,避免网络中断丢失数据。 - 主库 binlog dump线程
向从库推送binlog日志事件。 - 从库 IO线程
连接主库、拉取binlog写入本地relay log。 - 从库 SQL线程
读取relay log并回放SQL,实现数据同步。
3. 完整同步流程
- 主库执行数据变更,事务提交时写入binlog;
- 从库IO线程携带binlog文件名+偏移位置连接主库;
- 主库dump线程推送增量日志给从库IO线程;
- IO线程将日志写入本地relay log,记录同步位点;
- SQL线程按顺序回放relay log,同步主库数据。
4. 主库Master配置(10.1.8.10)
① 修改配置文件
bash
vim /etc/my.cnf
[mysqld]
server-id=1
log_bin=mysql-bin
# 重启服务
systemctl restart mariadb
② 创建复制专用账号
sql
create user 'repl'@'%' identified by 'Repl@123456';
grant replication slave on *.* to 'repl'@'%';
flush privileges;
-- 查看主库同步位点,记录File、Position
show master status;
5. 从库Slave配置(10.1.8.11)
① 修改配置文件
bash
vim /etc/my.cnf
[mysqld]
server-id=2
relay_log=mysql-relay-bin
systemctl restart mariadb
② 关联主库并启动同步
sql
change master to
master_host='10.1.8.10',
master_user='repl',
master_password='Repl@123456',
master_log_file='mysql-bin.000001',
master_log_pos=548;
-- 启动从同步
start slave;
-- 查看同步状态
show slave status\G;
同步正常标识:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
6. 同步测试
主库执行建库语句:
sql
create database qingqingcaoyuan;
从库执行show databases;可自动同步到新建数据库,验证同步成功。