完成rocky下部署mysql和ubuntu下部署mariadb,总结过程

准备工作

已经有了两台机器:

机器 操作系统 IP 地址
Rocky Linux Rocky Linux 8/9 10.0.0.12
Ubuntu Ubuntu 20.04/22.04 10.0.0.13

第一部分:在 Rocky Linux 上部署 MySQL

请在你的 Rocky 终端(root 用户)中依次执行以下命令:

1. 更新系统并安装 MySQL
 

dnf update -y
dnf install mysql-server -y

2. 启动 MySQL 并设置开机自启

systemctl start mysqld
systemctl enable mysqld

3. 检查 MySQL 是否运行

systemctl status mysqld

应该看到 active (running)

4. 设置 root 密码并安全配置

可以直接无密码登录。所以我们直接运行安全脚本。

mysql_secure_installation

5. 测试登录

mysql -u root -p

进入 mysql> 提示符。然后执行:

SELECT VERSION();

会显示 MySQL 8.0.x 版本。然后退出:

exit;

第二部分:在 Ubuntu 上部署 MariaDB

请打开 Ubuntu 的终端(root 用户)执行:

1. 更新系统并安装 MariaDB

apt update -y
apt install mariadb-server -y

2. 启动 MariaDB 并设置开机自启

systemctl start mariadb
systemctl enable mariadb

3. 检查状态

systemctl status mariadb

应显示 active (running)

4. 安全配置(设置 root 密码等)

mysql_secure_installation

5. 测试登录

mysql -u root -p

进入 MariaDB [(none)]> 提示符。执行:

SELECT VERSION();

会显示 MariaDB 版本号(如 10.x.x)。退出:

exit;

第三部分:总结过程

一、实验环境

操作系统 主机名/IP 部署的数据库
Rocky Linux 9 rocky-153(10.0.0.12) MySQL 8.0.45
Ubuntu 22.04 ubuntu (10.0.0.13) MariaDB 10.11.x

二、部署步骤对比表

操作步骤 Rocky Linux (MySQL) Ubuntu (MariaDB)
更新软件源 dnf update -y apt update -y
安装数据库 dnf install mysql-server -y apt install mariadb-server -y
启动服务 systemctl start mysqld systemctl start mariadb
设置开机自启 systemctl enable mysqld systemctl enable mariadb
检查服务状态 systemctl status mysqld systemctl status mariadb
安全配置 mysql_secure_installation
(初始密码为空,直接回车)
mysql_secure_installation
(初始密码为空,直接回车)
设置 root 密码 在安全脚本中设置(强密码要求) 在安全脚本中设置(密码要求较宽松)
登录测试 mysql -u root -p mysql -u root -p
查看版本 SELECT VERSION(); SELECT VERSION();

三、主要差异点

  1. 包管理器不同:Rocky 使用 dnf,Ubuntu 使用 apt

  2. 服务名称不同:MySQL 服务名为 mysqld,MariaDB 服务名为 mariadb

  3. 日志位置:MySQL 8.0 on Rocky 默认无 /var/log/mysqld.log,密码通过 mysql_secure_installation 直接设置;MariaDB 同样无初始密码。

  4. 密码策略:MySQL 8.0 默认要求强密码(大小写+数字+特殊字符,≥8位),而 MariaDB 允许相对简单的密码。

  5. 配置文件路径:MySQL 为 /etc/my.cnf,MariaDB 为 /etc/mysql/mariadb.cnf(或 /etc/my.cnf)。

四、验证结果

  • 在 Rocky 上成功登录 MySQL,执行 SELECT VERSION(); 返回 8.0.45

  • 在 Ubuntu 上成功登录 MariaDB,执行 SELECT VERSION(); 返回 10.11.x

  • 两台数据库均能正常创建数据库、表,执行增删改查操作。

结论:Rocky Linux 下部署 MySQL 和 Ubuntu 下部署 MariaDB 均顺利完成,数据库服务运行正常。

完成数据表的创建,修改,移除等基本练习

第一步:登录 MariaDB

直接mysql或mysql -u root -p(输入密码)

mysql -u root -p

第二步:创建一个测试数据库

CREATE DATABASE school;
USE school;

我们可以使用 school 作为练习数据库。

第三步:创建数据表(CREATE)

创建一个 students 表,包含以下字段:

  • id:整数,主键,自动递增

  • name:字符串(50),不能为空

  • age:整数

  • grade:浮点数(总分100)

CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    grade DECIMAL(5,2)
);

查看表结构:

DESC students;
-- 或者 SHOW COLUMNS FROM students;

第四步:修改表结构(ALTER)

4.1 添加一个新列 email

ALTER TABLE students ADD COLUMN email VARCHAR(100);

4.2 修改现有列的数据类型(例如将 grade 改为 INT)

ALTER TABLE students MODIFY grade INT;

4.3 重命名一个列(将 age 改为 student_age

ALTER TABLE students CHANGE age student_age INT;

4.4 删除一个列(删除 email

ALTER TABLE students DROP COLUMN email;

4.5 查看修改后的表结构

DESC students;

第五步:插入一些测试数据(用于验证表结构)

INSERT INTO students (name, student_age, grade) VALUES 
('张三', 18, 90),
('李四', 19, 85),
('王五', 20, 88);

查询数据:

SELECT * FROM students;

第六步:移除表(DROP TABLE)

DROP TABLE students;

再次查看表:

SHOW TABLES;

第七步:删除数据库(可选)

DROP DATABASE school;

第八步:退出 MariaDB

exit;

表操作命令总结

操作 SQL 命令 示例
创建表 CREATE TABLE CREATE TABLE students (id INT, name VARCHAR(50));
查看表结构 DESC 或 SHOW COLUMNS DESC students;
添加列 ALTER TABLE ... ADD ALTER TABLE students ADD email VARCHAR(100);
修改列类型 ALTER TABLE ... MODIFY ALTER TABLE students MODIFY grade INT;
重命名列 ALTER TABLE ... CHANGE ALTER TABLE students CHANGE age student_age INT;
删除列 ALTER TABLE ... DROP ALTER TABLE students DROP COLUMN email;
删除表 DROP TABLE DROP TABLE students;
删除数据库 DROP DATABASE DROP DATABASE school;

完成数据库数据增删改查基本练习和数据查询分组,去重等练习

准备工作:登录并创建测试表

CREATE DATABASE IF NOT EXISTS school;
USE school;

-- 创建一个学生表(包含重复年级、不同成绩等用于演示)
CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    grade VARCHAR(10),      -- 年级,如 '大一', '大二'
    score INT               -- 成绩 0-100
);

一、增删改查基本练习

1. 增(INSERT)—— 插入数据

插入单行:

INSERT INTO students (name, age, grade, score) VALUES ('张三', 18, '大一', 85);

插入多行:

INSERT INTO students (name, age, grade, score) VALUES 
('李四', 19, '大二', 92),
('王五', 20, '大三', 78),
('赵六', 18, '大一', 88),
('小红', 19, '大二', 95),
('小明', 20, '大三', 82),
('小刚', 21, '大四', 70),
('小丽', 22, '大四', 88);

2. 查(SELECT)—— 基本查询

-- 查询所有数据
SELECT * FROM students;
-- 带条件查询(WHERE)
SELECT * FROM students WHERE score >= 90;

3. 改(UPDATE)—— 修改数据

UPDATE students SET score = 75 WHERE name = '小刚';

4. 删(DELETE)—— 删除数据

-- 删除名字叫“小明”的学生
DELETE FROM students WHERE name = '小明';

-- 再次查询,确认删除
SELECT * FROM students;

二、数据查询高级练习:去重、分组、聚合

1. 去重(DISTINCT)

SELECT DISTINCT grade FROM students;

2. 分组(GROUP BY)与聚合函数

常用聚合函数:COUNTSUMAVGMAXMIN

-- 计算每个年级的平均成绩
SELECT grade, AVG(score) AS avg_score FROM students GROUP BY grade;
-- 每个年级的总分
SELECT grade, SUM(score) AS total_score FROM students GROUP BY grade;

三、练习记录与命令总结

1. 增删改查命令总结

操作 命令格式 示例
插入 INSERT INTO 表名 (列...) VALUES (值...); INSERT INTO students (name,score) VALUES ('张三',85);
查询 SELECT 列 FROM 表名 WHERE 条件 ORDER BY 列 LIMIT n; SELECT * FROM students WHERE score>80 ORDER BY score DESC;
更新 UPDATE 表名 SET 列=新值 WHERE 条件; UPDATE students SET score=90 WHERE name='李四';
删除 DELETE FROM 表名 WHERE 条件; DELETE FROM students WHERE score<60;

2. 高级查询命令总结

功能 关键字 示例
去重 SELECT DISTINCT SELECT DISTINCT grade FROM students;
分组 GROUP BY SELECT grade, COUNT(*) FROM students GROUP BY grade;
分组过滤 HAVING SELECT grade, AVG(score) FROM students GROUP BY grade HAVING AVG(score)>85;
排序 ORDER BY SELECT * FROM students ORDER BY score DESC;
聚合函数 COUNT, SUM, AVG, MAX, MIN SELECT AVG(score) FROM students;

完成mysql用户管理增删改查,赋权,密码增删改查等

一、查看当前用户(查)

SELECT host, user FROM mysql.user;

二、创建用户(增)

CREATE USER 'user1'@'localhost' IDENTIFIED BY 'User1@123';
CREATE USER 'user2'@'%' IDENTIFIED BY 'User2@456';

执行后,再次查看用户:

SELECT host, user FROM mysql.user;

三、修改用户密码(改)

ALTER USER 'user1'@'localhost' IDENTIFIED BY 'NewUser1@456';

四、删除用户(删)

先创建一个临时用户用于删除练习:

CREATE USER 'tempuser'@'localhost' IDENTIFIED BY 'Temp@123';

然后删除它:

DROP USER 'tempuser'@'localhost';

五、授权(GRANT)与查看权限

5.1 先创建一个测试数据库

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE t1 (id INT);

5.2 给 user1 授权

GRANT SELECT, INSERT ON testdb.* TO 'user1'@'localhost';

5.3 查看 user1 的权限

SHOW GRANTS FOR 'user1'@'localhost';

5.4 给 user2 授予全部权限(并允许继续授权)

GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%' WITH GRANT OPTION;

查看 user2 权限:

SHOW GRANTS FOR 'user2'@'%';

六、回收权限(REVOKE)

-- 回收 user1 的 INSERT 权限
REVOKE INSERT ON testdb.* FROM 'user1'@'localhost';

-- 再次查看 user1 权限,确认 INSERT 已消失
SHOW GRANTS FOR 'user1'@'localhost';

八、清理(可选)

DROP USER 'user1'@'localhost';
DROP USER 'user2'@'%';
DROP DATABASE testdb;

exit;退出。

完成二进制日志的练习,事务操作,内容查看,模式修改

一、开启二进制日志

注意:以下命令全部在 Ubuntu 的终端(shell)中执行,不要在 MariaDB 内部执行。

1.1 确认当前状态

mysql -u root -e "SHOW VARIABLES LIKE 'log_bin';"

1.2 编辑 MariaDB 配置文件

vim /etc/mysql/mariadb.conf.d/50-server.cnf

2. 找到 [mariadbd] 这一行

在截图里,你可以看到 [mariadbd] 出现在接近末尾的地方(在 [embedded] 和 [mariadb-11.8] 之间)。把光标移到 [mariadbd] 的下一行,然后添加以下两行:

log_bin = /var/log/mysql/mariadb-bin
server_id = 1

1.3 重启 MariaDB 服务

systemctl restart mariadb

1.4 验证是否开启

mysql -u root -e "SHOW VARIABLES LIKE 'log_bin';"

1.5 查看二进制日志文件列表

mysql -u root -e "SHOW BINARY LOGS;"

二、事务操作练习

进入 MariaDB 交互模式:

sudo mysql -u root

2.1 创建测试数据库和表

CREATE DATABASE test;
USE test;
CREATE TABLE account (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20),
    balance DECIMAL(10,2)
) ENGINE=InnoDB;

2.2 插入数据

INSERT INTO account (name, balance) VALUES ('Alice', 1000), ('Bob', 500);

2.3 事务提交演示

BEGIN;
UPDATE account SET balance = balance - 200 WHERE name = 'Alice';
UPDATE account SET balance = balance + 200 WHERE name = 'Bob';
COMMIT;
SELECT * FROM account;

输出

2.4 事务回滚演示

BEGIN;
UPDATE account SET balance = balance - 500 WHERE name = 'Alice';
SELECT * FROM account;  -- Alice: 300.00
ROLLBACK;
SELECT * FROM account;  -- 恢复 800.00, 700.00

三、查看二进制日志内容

3.1 查看当前使用的日志文件

SHOW MASTER STATUS;

3.2 查看日志中的事件(在 MariaDB 内)

SHOW BINLOG EVENTS IN 'mariadb-bin.000001' LIMIT 20;

将文件名替换成实际的。你会看到创建数据库、创建表、插入、更新等事件。

3.3 使用 mysqlbinlog 工具(在 shell 中)

退出 MariaDB:EXIT;,然后执行。

sudo mysqlbinlog /var/log/mysql/mariadb-bin.000001 | head -30

这会以 SQL 形式显示日志内容。

四、清理(可选)

DROP DATABASE test;
EXIT;

一、Rocky Linux 环境准备

1.1 确认 mysqldump 已安装

which mysqldump
# 输出:/usr/bin/mysqldump

1.2 安装 crond(通常已安装)

Rocky Linux 使用 cronie,检查并启动服务:

# 检查状态
systemctl status crond

# 如果未运行则启动并开机自启
systemctl enable --now crond

1.3 创建备份目录

mkdir -p /backup/mysql

二、编写每小时备份脚本

在 /root 或 /usr/local/bin 下创建脚本 mysql_hourly_backup.sh

cat > /usr/local/bin/mysql_hourly_backup.sh << 'EOF'
#!/bin/bash

# ---------- 请修改以下配置 ----------
MYSQL_USER="root"
MYSQL_PASSWORD="your_password"          # 替换为真实密码
MYSQL_HOST="localhost"
DATABASE_NAME="test_backup"             # 要备份的数据库名;留空表示备份所有库
BACKUP_DIR="/backup/mysql"

# ---------- 无需修改下方 ----------
DATE=$(date +%Y%m%d_%H)
BACKUP_FILE="$BACKUP_DIR/${DATABASE_NAME}_${DATE}.sql"

# 创建目录
mkdir -p "$BACKUP_DIR"

# 执行备份(使用绝对路径)
if [ -n "$DATABASE_NAME" ]; then
    /usr/bin/mysqldump -h"$MYSQL_HOST" -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" \
        --single-transaction --routines --triggers \
        "$DATABASE_NAME" > "$BACKUP_FILE"
else
    /usr/bin/mysqldump -h"$MYSQL_HOST" -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" \
        --single-transaction --routines --triggers \
        --all-databases > "$BACKUP_FILE"
fi

if [ $? -eq 0 ]; then
    echo "$(date) - Backup successful: $BACKUP_FILE" >> /var/log/mysql_backup.log
    gzip "$BACKUP_FILE"
else
    echo "$(date) - Backup FAILED!" >> /var/log/mysql_backup_error.log
    exit 1
fi

# 删除超过3天的备份文件
find "$BACKUP_DIR" -name "${DATABASE_NAME}_*.sql.gz" -mtime +3 -delete
EOF

赋予执行权限:

chmod +x /usr/local/bin/mysql_hourly_backup.sh

三、配置 crontab 每小时执行

以 root 用户编辑 crontab:

crontab -e

添加以下行(注意脚本路径及日志):

0 * * * * /usr/local/bin/mysql_hourly_backup.sh

保存退出后,cron 会自动生效。

查看当前 crontab 任务

crontab -l

查看 cron 日志(Rocky Linux 默认日志在 /var/log/cron):

tail -f /var/log/cron

四、手动测试脚本

先手动运行一次,确保无报错:

bash /usr/local/bin/mysql_hourly_backup.sh

检查备份文件:

ls -lh /backup/mysql/
# 应看到类似 test_backup_20260519_15.sql.gz

五、数据恢复操作(Rocky Linux)

5.1 准备测试数据(如未创建)

CREATE DATABASE test_backup;
USE test_backup;
CREATE TABLE employees (id INT, name VARCHAR(100));
INSERT INTO employees VALUES (1, '张三');

5.2 恢复单个数据库

# 创建数据库(如果不存在)
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS test_backup;"

# 解压并恢复
gunzip < /backup/mysql/test_backup_20260519_15.sql.gz | mysql -u root -p test_backup

5.3 恢复所有数据库(如果备份时使用了 --all-databases

# 1. 恢复最近整点备份
mysql -u root -p test_backup < /backup/mysql/test_backup_20260519_14.sql

# 2. 应用 binlog(假设 binlog 在 /var/lib/mysql/)
mysqlbinlog --start-datetime="2026-05-19 14:00:00" \
            --stop-datetime="2026-05-19 14:30:00" \
            /var/lib/mysql/mysql-bin.000001 | mysql -u root -p test_backup

六、针对 Rocky Linux 的额外建议

6.1 安全存储数据库密码

cat > /root/.my.cnf << EOF
[client]
user=root
password=your_password
host=localhost
EOF
chmod 600 /root/.my.cnf

6.2 设置日志轮转(防止日志过大)

创建 /etc/logrotate.d/mysql_backup

cat > /etc/logrotate.d/mysql_backup << EOF
/var/log/mysql_backup.log
/var/log/mysql_backup_error.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}
EOF

6.3 测试 crontab 环境变量

cron 执行时的 PATH 可能与交互式 shell 不同。已在脚本中使用绝对路径 /usr/bin/mysqldump 和 /bin/gzip(通常 gzip 在 /bin/gzip)。可以通过以下方式确认命令位置:

which gzip   # 通常是 /usr/bin/gzip

七、常见问题排查(Rocky Linux)

问题 解决方法
cron 不执行脚本 检查 crond 状态:systemctl status crond;查看 /var/log/cron 日志
mysqldump: command not found 脚本中改为 /usr/bin/mysqldump(已使用)
Got error: 1045 (28000): Access denied 密码错误;或者使用 .my.cnf 并确保权限 600
备份文件为空(0 字节) 手动运行脚本观察输出;检查数据库名是否正确
gzip: command not found 安装 gzip:dnf install gzip -y
Permission denied 写入 /backup/mysql 确保目录属主为 root

按照以上 Rocky Linux 专用步骤操作,您就可以实现 每小时自动备份,并能在需要时快速恢复数据。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐